org 00h ;指定程序放置的地址,说明,放在程序寄存器的任意地址运行效果都是相同的,但是,用户必须合理分配,一般从00h开始放置
clr p1.0 ;点亮一个灯,以便观查移位效果
jmp cfg
org 0bh
jmp t0int
cfg:
mov tmod,#00010001b;
mov th0,#155 ;12MHz时,1次计数为1US
mov tl0,#205 ;12MHz时,
setb et0 ;开启中断
setb tr0 ;允许计数
setb ea ;开启总中断
mov r7,#5 ;保证以下程序每5次中断执行1次,因此灯闪的时间为中断时间乘以100次
main:
jmp main ;进入下一循环,这实际是一个没有多大意义的死循环,唯一的意义就等待中断
t0int:djnz r7,t0end ;中断的延时很短,需要进一步延时
mov r7,#5 ;保证以下程序每5次中断执行1次,因此灯闪的时间为中断时间乘以100次
mov a,p1 ;读入P1的灯亮情况
rr a ;移动一次
mov p1,a ;送回p1口,按照新的状态点亮灯
t0end: reti ;子程序运行结束,返回原调用的位置
end ;程序结束,以后可以放置任何内容
说明:由于单片机运行的速度很快,必须延时,人眼才能看清楚LED点亮和熄灭的过程,但是,在实际应用中,象这样应用延时程序的意义不在,
因为这占用了宝贵的CPU运行时间,在很多时间,CPU不是很有空.