应用定时中断实现灯的闪烁

来源:百度知道 编辑:UC知道 时间:2024/06/01 09:40:02
请单片机高手指点,我想用定时器中断实现灯的闪烁,但闪烁2次就不显示了。帮忙看看问题出在哪了?
ORG 0000H
AJMP START
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 30H
START:
MOV P1,#0FFH ;关所 灯
MOV R0,#00H ;软件计数器预清0
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#3CH
MOV TL0,#0B0H ;即数15536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行

TIME0: ;定时器0的中断处理程序
INC R0
MOV A,R0
CJNE A,#20,T_RET ;R0的值到了20了吗?
T_L1: CPL P1.0 ;到了,取反P10
MOV R0,#0 ;清软件计数器
T_RET:
MOV TH0,#30H
MOV TL0,#0B0H ;重置定时常数
RETI

END

我把程序给你调了一下,少了一条语句:LJMP $ 就是少了等待。
ORG 0000H
AJMP START
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 0030H
START:
MOV SP,#60H
MOV P1,#0FFH ;关所 灯
MOV R0,#00H ;软件计数器预清0
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#3CH
MOV TL0,#0B0H ;即数15536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
LJMP $
TIME0: ;定时器0的中断处理程序
INC R0
MOV A,R0
CJNE A,#20,T_RET ;R0的值到了20了吗?
T_L1: CPL P1.0 ;到了,取反P10
MOV R0,#0 ;清软件计数器

T_RET:
MOV TH0,#30H
MOV TL0,#0B0H ;重置定时常数
RETI

END