实验任务:
用AT89S51 的定时/计数器T0 产生2 秒钟的定时,每当2 秒定时到来时,更换指
示灯闪烁,每个指示闪烁的频率为0.2 秒,也就是说,开始L1 指示灯以0.2 秒
的速率闪烁,当2 秒定时到来之后,L2 开始以0.2 秒的速率闪烁,如此循环下
去。0.2 秒的闪烁速率也由定时/计数器T0 来完成。
我写的程序
ORG 00H
LJMP START
ORG 0BH
LCALL NEXT
LJMP WAIT
ORG 30H
START:
MOV R0,#10
MOV R1,#11111110B
MOV R2,#4
MOV R3,#0
MAIN:
MOV TMOD,#01H
MOV TH0,#60
MOV TL0,#156
SETB EA
SETB ET0
SETB TR0
WAIT:
LJMP $
NEXT:
MOV TH0,#60
MOV TL0,#156
DJNZ R2,RETI1
MOV R2,#4
LCALL OUTPUT
DJNZ R0,RETI1
MOV R0,#10
MOV A,R1
RL A
CJNE A,#11101111B,JIXU
MOV A,#11111110B
JIXU:
MOV R1,A
RETI1:
RETI
OUTPUT:
CJNE R3,#1,OUTPUTN
MOV R3,#0
MOV P1,R1
LJMP RET1
OUTPUTN:
MOV R3,#1
MOV A,#0FFH
MOV P1,A
RET1:
RET
END
额,不知道什么原因,前三盏灯运行正常,到第四盏灯是,R0在运行的过程中,进入中断程序后,从0A变成了0E!不知道哪位大侠指点一二
|