这是摘自芯源单片机教程
延长定时时间的方法
ORG 0000H ;
AJMP START ;
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 30H ;
START:MOV P1,#0FFH ;关所有的灯
MOV 30H,#00H ;软件计数器预清0
MOV TMOD,#01H ;定时/计数器0工作于方式1
MOV TH0,#3CH ;
MOV TL0,#0B0H ;立即数3CH+0BH=15536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
LOOP:AJMP LOOP ;真正工作时,这里可写任意程序
TIME0:
PUSH ACC ;将ACC推入堆栈保护
PUSH PSW ;将PSW推入堆栈保护
INC 30H ;
MOV A,30H ;
CJNE A,#20,TIME1 ;30H单元中的值到了20了吗?
CPL P1.0 ;到了取反P1.0
MOV 30H,#0 ;清软件计数器
TIME1:MOV TH0,#15H ;给T0重新赋值
MOV TL0,#9FH ;重置定时常数
POP PSW ;
POP ACC ;
RETI ;
END
先用T0做一个50毫秒的定时器定时时间到了之后并不是立即取反P1.0而是将软件计数器中的值加1如果软件计数器计到了20就取反一次P1.0并清掉软件计数器中的值否则直接返回这样就变成了20次定时中断才取反一次P1.0因此定时时间就延长了成了20*50mS即1000毫秒了
请问TIME1:MOV TH0,#15H ;给T0重新赋值
MOV TL0,#9FH ;重置定时常数这段程序的重设定是常数是怎么算的?和
MOV TH0,#3CH ;
MOV TL0,#0B0H ;立即数3CH+0BH=15536 是不一样的