【求助】看看重置的定时问题?


ORG 0000H
AJMP START
ORG 000BH ;定时器0的中断向量地址
AJMP TIME0 ;跳转到真正的定时器程序处
ORG 30H
START:
MOV P1,#0FFH ;关所

MOV 30H,#00H ;软件计数器预清0
MOV TMOD,#00000001B ;定时/计数器0工作于方式1
MOV TH0,#3CH
MOV TL0,#0B0H ;即数15536
SETB EA ;开总中断允许
SETB ET0 ;开定时/计数器0允许
SETB TR0 ;定时/计数器0开始运行
LOOP: AJMP LOOP ;真正工作时,这里可写任意程序
TIME0: ;定时器0的中断处理程序
PUSH ACC
PUSH PSW ;PSWACC推入堆栈保护
INC 30H
MOV A,30H
CJNE A,#20,T_RET ;30H单元中的值到了20了吗?
T_L1: CPL P1.0 ;到了,取反P10
MOV 30H,#0 ;清软件计数器
T_RET:
MOV TH0,#15H
MOV TL0,#9FH ;重置定时常数
POP PSW
POP ACC
RETI
END
教程中分析的程序:

思路是这样的,先用定时/计数器0做一个50毫秒的定时器,定时是间到了以后并不是立即取反P10,而是将软件计数器中的值加1,如果软件计数器计到了20,就取反P10,并清掉软件计数器中的值,否则直接返回,这样,就变成了20次定时中断才取反一次P10,因此定时时间就延长了成了20*50即1000毫秒了。


但是重置的TH0和TL0的数值和一开始15536不一样,那怎么可能还是50ms呢?谢谢回答。



我也来说两句 查看全部回复

最新回复

  • budhy (2008-7-14 05:13:41)

    CODE:

    T_RET:
    MOV TH0,#15H
    MOV TL0,#9FH ;重置定时常数
    应该是:

    CODE:

    MOV TH0,#3CH
    MOV TL0,#0B0H ;即数15536
  • clleady (2008-7-14 19:56:28)

    谢谢,我知道了。