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

[复制链接]
13415|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
sdpz 发表于 2011-4-11 13:31 | 显示全部楼层
延时时间那么短,干脆把Fcpu降频,这样就不用延时了,操作完再恢复。
CrazyST 发表于 2011-4-12 23:20 | 显示全部楼层
话是不错,不过降频影响中断服务程序了
Z赤心木QW 发表于 2011-4-16 23:18 | 显示全部楼层
我用一个定时器来负责各类延时工作,反正定时器多
午时龙且 发表于 2011-8-10 14:33 | 显示全部楼层
2# IJK
求教,具体是怎么样做精确延时的呢?尤其是US级延时,能不能发个来学习一下?
11yichengming 发表于 2013-7-15 15:52 | 显示全部楼层
怎么用定时器实现delay(u16 num_ms)的函数呢?
haitao10086 发表于 2013-7-15 16:19 | 显示全部楼层
搞个1ms的定时中断,在该中断中不断对jiffies进行计数,外围则调用get_jiffies()使用状态机方式
manong000 发表于 2013-7-26 11:29 | 显示全部楼层
你可以自己写 —nop 的延时函数   1us需要多少个_nop  你用示波器测一下救出来了    我测的是8个  仅供参考
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

241

主题

1609

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部