51单片机用T0计数器计算T1定时器的溢出次数,该如何实现?

不是C语言程序

方法一:

只开T1定时器中断,在T1定时器中断子程序中对(TH0 TL0)做加一运算。

方法二:

T1定时器模式,T0计数器模式,在T1定时器中断子程序中对某一固定引脚Px.x做“置1-清0-置1”操作,并将对应引脚连接在T0(P3.4)引脚。默认情况下T0中断比T1中断权限高,每次定时器T1溢出后,会在中断子程序内对引脚Px.x进行“置1-清0-置1”,过程中1到0的下降沿跳变会引起(TH0 TL0)加一;直到计数器T0溢出前的“置1-清0”时刻后“置1”时刻前,T0产生溢出中断,中断T1的中断子程序。

比较:

如果仅仅为了计算“T1定时器的溢出次数”的话,随便定义两个字节的“内部RAM数据存储器”就可以了,和方法一类似,在中断子程序中,对寄存器内数值加一,完全可以实现。

用T0算T1太浪费资源了!

定义“内部RAM数据存储器”计算“T1定时器的溢出次数”的程序:

可以用Keil仿真以下,能看出效果的!

 

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-03-12

可以实现,T1溢出时输出一个脉冲给T0的输入就可以了。

ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 001BH
LJMP T1ISR
ORG 0030H
MAIN:
    MOV TMOD,#16H
    MOV TH0,#0FFH
    MOV TL0,#0FFH
    MOV TH1,#HIGH(65536-10000)
    MOV TL1,#LOW(65536-10000)
    SETB TR0
    SETB TR1
    SETB ET0
    SETB ET1
    SETB EA
    CLR A
    SJMP $
T0ISR:
    INC A
    MOV P0,A
    RETI
T1ISR:
    CLR TR1
    MOV TH1,#HIGH(65536-10000)
    MOV TL1,#LOW(65536-10000) 
    SETB TR1
    RETI
    END

本回答被网友采纳
第2个回答  2013-11-12
用T0计数器计算...

用T0计数器,只能计算外部引脚送来的脉冲个数。

T1定时器每溢出一次,就通过导线,给 T0 引脚送去一个脉冲,即可。

51单片机用T0计数器计算T1定时器的溢出次数,...

这种计算的方法,电路、程序,都需要设计,并不实用。

更简单的方法,还是有的。本回答被网友采纳
第3个回答  2013-11-12
汇编语言我不会,但是实现原理我懂。
因为T0计数器的通过对某一IO口的电平跳变来计数的,而T1作为定时器又是内部的功能,要记录T1溢出率的话,可以在T1中断程序加一个操作IO产生一个电平跳变,然后接到T0计数口去。
希望我的回答能帮助到你。
第4个回答  2013-11-12
只会C程序
相似回答