51单片机定时器最长时间只有65.536ms,为了更长的时间应用需求,可以利用中断器执行50ms定时多次(1s就是20次)
1、开启中断器(0BH)
打开中断允许寄存器IE(interrupt enable)的全局中断位和定时器0中断位,
MOV IE,#10000010B
中断矢量的选择
IE各位功能
2、设置中断器起始地址
Timer0作为中断源,对应的中断矢量为0BH
ORG 0BH
;中断后操作
RETI
编写这部分代码后,定时器0计满自动执行
CALL 0BH ;CALL表示呼叫子程序,而RETI是子程序对应的中断器返回指令
3、中断器、定时器实现单灯左移
ORG 00H
JMP START
ORG 0BH
DJNZ R6,TIMERLOOP
JMP ROLLLEFT
;------------只执行一次----------
START:MOV TMOD,#11H
MOV A,#0FEH ;1111 1110B,P2.0口低电平
MOV IE,#10000010B
MOV R6,#20
TIMER:MOV P2,A
CLR TR0
MOV TH0,#HIGH(15536)
MOV TL0,#LOW(15536)
SETB TR0
;-------------只执行一次-----------
SJMP $ ;懒汉程序
TIMERLOOP:MOV P2,A
CLR TR0
MOV TH0,#HIGH(15536)
MOV TL0,#LOW(15536)
SETB TR0
RETI
ROLLLEFT:MOV R6,#20
RL A
RETI
END