打印
[STM8]

STM8怎么实现粗糙的软延时和精确的短延时

[复制链接]
11642|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
donkey89|  楼主 | 2011-4-11 08:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
毫秒级别的延时,是很常用的.例如对付LCD这类低速器件和键盘什么的,大致差不多就可以了,这个靠计算指令周期的方法来实现,似乎不太靠谱吧?但是这么粗糙的延时,总不能单独占用一个定时器吗?
还有微秒(US)级别的延时,从十几到即使微秒的延时,怎么实现,靠定时器?用中断也不太好使啊,跳转,进栈出栈的操作就把时间消耗得七七八八了.精度没法保证.
沙发
IJK| | 2011-4-11 09:58 | 只看该作者
无论是毫秒级别还是10us级别的延时,我都是用定时器来实现。STM8的定时器挺多,不用白不用。如果觉得用中断不够准,可以直接用查询方式,特别是10us级别的短延时。

使用特权

评论回复
板凳
heuyck| | 2011-4-11 09:59 | 只看该作者
粗糙的延时可共用SYSTICK实现。
us级的延时,用NOP实现。C可以调用ASM函数,精度可到几个指令周期。

使用特权

评论回复
地板
shizaigaole| | 2011-4-11 11:11 | 只看该作者
用定时计数,查询计数值,实现极端延时,哪怕是10us

使用特权

评论回复
5
sdpz| | 2011-4-11 13:31 | 只看该作者
延时时间那么短,干脆把Fcpu降频,这样就不用延时了,操作完再恢复。

使用特权

评论回复
6
CrazyST| | 2011-4-12 23:20 | 只看该作者
话是不错,不过降频影响中断服务程序了

使用特权

评论回复
7
Z赤心木QW| | 2011-4-16 23:18 | 只看该作者
我用一个定时器来负责各类延时工作,反正定时器多

使用特权

评论回复
8
午时龙且| | 2011-8-10 14:33 | 只看该作者
2# IJK
求教,具体是怎么样做精确延时的呢?尤其是US级延时,能不能发个来学习一下?

使用特权

评论回复
9
11yichengming| | 2013-7-15 15:52 | 只看该作者
怎么用定时器实现delay(u16 num_ms)的函数呢?

使用特权

评论回复
10
haitao10086| | 2013-7-15 16:19 | 只看该作者
搞个1ms的定时中断,在该中断中不断对jiffies进行计数,外围则调用get_jiffies()使用状态机方式

使用特权

评论回复
11
manong000| | 2013-7-26 11:29 | 只看该作者
你可以自己写 —nop 的延时函数   1us需要多少个_nop  你用示波器测一下救出来了    我测的是8个  仅供参考

使用特权

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

本版积分规则

个人签名:数显ESR电容等效内阻测量仪 http://cn.digit-esr.com

241

主题

1609

帖子

1

粉丝