51单片机教程:单片机定时器、中断试验
程序2:用中断实现
ORG 0000H ,http://www.51hei.com
AJMP START
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 30H
START:
MOV P1,#0FFH ;关所 灯
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#15H
MOV TL0,#0A0H ;即数5536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
LOOP: AJMP LOOP ;真正工作时,这里可写任意程序
TIME0: ;定时器0的中断处理程序
PUSH ACC
PUSH PSW ;将PSW和ACC推入堆栈保护
CPL P1.0
MOV TH0,#15H
MOV TL0,#0A0H ;重置定时常数
POP PSW
POP ACC
RETI
END
上面的例程中,定时时间一到,TF0由0变1,就会引发中断,CPU将自动转至000B处寻找程序并执行,由于留给定时器中断的空间只有8个字节,显然不足以写下所有有中断处理程序,所以在000B处安排一条跳转指令,转到实际处理中断的程序处,这样,中断程序能写在任意地方,也能写任意长度了。进入定时中断后,首先要保存当前的一些状态,程序中只演示了保存存ACC和PSW,实际工作中应该根据需要将可能会改变的单元的值都推入堆栈进行保护(本程序中实际不需保存护任何值,这里只作个演示)。
评论