首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助:定时器溢出问题

求助:定时器溢出问题

在51里,定时器溢出中断,是当从0xFFFF→0x0000时(假设16位)溢出中断,而在HC908SR12里,溢出中断指的是从0计数到指定值时溢出中断,那么能否实现51那样的从全1→全0的溢出中断?

其实我想弄这个问题的用意是:我现在想用定时器输入捕捉方式测脉冲周期,从而算出频率(不用固定时间内统计计数值方法),现在我怕在低频时,两次脉冲跳变时间间隔过长,定时器值已经好几次越过0xFFFF→0x0000了,我想在两次捕捉之间顺带统计定时器值越过0xFFFF→0x0000的次数,从而可以算出两次捕捉之间真正的计数值(很可能大于0xFFFF)。

还不一个样啊,弄个计数器放里面就是了
不过我做的最低得也就几十hz,再低就忽略了
欢迎大家到汽车电子群2838085!
让我们推动中国汽车前进!
一个是正数计数,一个是倒数计数,不是一样的吗?溢出时都会产生中断的。
海纳百川  有容乃大
今天重看了一下手册,好象输入捕捉中断时读的是如T1CH0的值,也就是说输入捕捉捕捉的只是T1CH0的值,我的理解是这样的,T1CH一直在计数,并且满0xFFFF后从0x0000(过0点)再开始,只是有捕捉到输入信号时,才锁定T1CH值并中断,那么程序只要将本次捕捉到的值减去上次的值就可算出两次信号跳变之间的时间,这似乎跟TCNT以及TMOD的值都无关,但是如果输入信号两次跳变间隔时间太长怎么办呢,因为两次捕捉的值相减最多也就0xffff,如果间隔时间太长计数器早就循环(0x0000-0xffff-0x0000.....)好几个周期了,我怎么记下TCH过了几次0点呢。
    如:上次捕捉到的TCH为0xA000,这次捕捉到的为0x0100,则两次间隔时间为
1、可能为↓0xA000→0xFFFF→0x0000→↓0x0100,只过了1次0点,则差值为0x0100-0xa000=0x6100;
2、但也可能为↓0xA000→0xFFFF→0x0000→0xFFFF→0x0000→↓0x0100,则差值应该为
0x0100-0xa000+0x10000=0x16100了;
计算的两次跳变周期肯定是不一样的,我怎么统计过0点的次数。
    再如两次捕捉分别为0xA000、0xA100,很有可能是0xA000直接计到0xA100,但也可能是0xA000→0xFFFF→0x0000→0xA100,计算结果也不一样啊?


    根据手册,TMOD的作用是相当于定时用,增计数,当TCNT计数到TMOD的值时,就产生中断,并且从0重新开始计数,相当于每计数TMOD个数就中断一次,这是典型的定时方式了。不知我这样理解对不对。
感谢zhwdy81和strongchen
明白了,TMOD跟51里其实道理一样,就是设定定时器的模,其实就是决定定时器的计数最大值,也就是捕捉也只可能到0到模之间的计数值,计数满有一个中断,捕捉也有一个中断,两者配合就可计算长脉冲宽度了
对头!
海纳百川  有容乃大
返回列表