发新帖我要提问
12
返回列表
打印
[国产单片机]

STC12C5A60S2精确定时

[复制链接]
楼主: sdwys
手机看帖
扫描二维码
随时随地手机跟帖
21
ayb_ice| | 2021-12-2 13:16 | 只看该作者 回帖奖励 |倒序浏览
lyjian 发表于 2021-12-2 12:48
自动重装载的优点是可以省去软件处理,但这不代表只有自动重装载才能做到精确。
不用自动重装载加点软件 ...

都说了你这不精确,前面说的那些情况你这根本处理不了,
看看INTEL自己是怎么处理的吧
以下代码是RTX51-TINY的代码,这个系统最早就是INTEL搞的,KEIL的前身就是源自INTEL的官方开发环境
; Update 8051 Interrupt Timer
                CLR        TR0
                MOV        A,TL0
                ADD        A,#LOW (?RTX_CLOCK + 7)
                MOV        TL0,A
                MOV        A,TH0
                ADDC        A,#HIGH (?RTX_CLOCK + 7)
                MOV        TH0,A
                SETB        TR0
这里其实最好是关中断,但RTOS要尽量减少关中断时间,所以这里没有关,在极限情况下可能也不准(被其它中断打断),一般情况也够了


另外一种不用判断的巧妙用法可以精心设计一个初值,让初值的低8位为0,这样可以只更新TH0。。。
TH0 = 0xXX;
//TL0 |= 0xXX;


再或者让低半字节为0,假设标准51,中断周期为10ms, 那么初值为65536-10000=55536=d8f0,重设初值的代码可以这样
TH0 = 0xd8;
TL0 |= 0xf0;
这样也是准确的,但也受更高级中断的影响

使用特权

评论回复
22
lyjian| | 2021-12-2 21:10 | 只看该作者
ayb_ice 发表于 2021-12-2 13:16
都说了你这不精确,前面说的那些情况你这根本处理不了,
看看INTEL自己是怎么处理的吧
以下代码是RTX51-T ...

咋会有这么搞笑思维呢?
既然说是精确定时,你认为还会有人写软件傻到让这个定时中断受其他中断影响?51只有两个优先等级,只把这个定时中断设成高优先级别,其他中断都设成低优先级别不就得了。
照你这思维,就算是自动重装,更高级的中断可能会暂时关了这个定时器,又或者更高级的中断处理时间太长超过定时中断时间间隔,等等之类。那永远都无法精确不了。

使用特权

评论回复
23
ayb_ice| | 2021-12-3 08:36 | 只看该作者
lyjian 发表于 2021-12-2 21:10
咋会有这么搞笑思维呢?
既然说是精确定时,你认为还会有人写软件傻到让这个定时中断受其他中断影响?51 ...

你连为什么不精确本质都没搞清楚,还谈什么解决

使用特权

评论回复
24
lyjian| | 2021-12-3 11:36 | 只看该作者
ayb_ice 发表于 2021-12-3 08:36
你连为什么不精确本质都没搞清楚,还谈什么解决

我清楚,不清楚的是你

使用特权

评论回复
25
ayb_ice| | 2021-12-3 11:52 | 只看该作者
lyjian 发表于 2021-12-3 11:36
我清楚,不清楚的是你

不好意思你的精确是这样的

“实际时间100.953us*9906=1000,040.418us,每秒误差约40.418us”

是我理解错了

使用特权

评论回复
26
lyjian| | 2021-12-3 12:11 | 只看该作者
ayb_ice 发表于 2021-12-3 11:52
不好意思你的精确是这样的

“实际时间100.953us*9906=1000,040.418us,每秒误差约40.418us”

这是楼主的精确,我的精确是误差为0

使用特权

评论回复
27
ayb_ice| | 2021-12-3 13:04 | 只看该作者
lyjian 发表于 2021-12-3 12:11
这是楼主的精确,我的精确是误差为0

搞了半天,搞错了对象,
LZ都跑了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则