打印
[家电应用]

大家使用什么操作做为短时间延时啊?

[复制链接]
1484|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jobszheng|  楼主 | 2025-3-8 17:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家使用什么操作做为短时间延时啊?
我想有10us的延时时间片。

我觉得使用中断的timer来处理,有点浪费。
本来主频都不高!
再使用中断,进出中断的消耗就快等于中断的延时时间了。


使用特权

评论回复
沙发
OceanGaze| | 2025-3-8 18:00 | 只看该作者
这么短的延迟时间就直接nop吧!

使用特权

评论回复
板凳
zchong| | 2025-3-9 13:11 | 只看该作者
启动一个自由运行的定时器,需要延时的时候读cnt的值出来判断

使用特权

评论回复
地板
钓鱼大师| | 2025-3-9 16:20 | 只看该作者
10US用中断,那就太频繁了,用NOP就好。

使用特权

评论回复
5
xch| | 2025-3-10 07:49 | 只看该作者
可以仅唤醒不响应中断。

使用特权

评论回复
6
weifeng90| | 2025-3-10 08:19 | 只看该作者
如果精度要求高就用定时器,如果精度要求不高直接用软延时

使用特权

评论回复
7
xionghaoyun| | 2025-3-10 08:46 | 只看该作者
delay**好

使用特权

评论回复
8
dukedz| | 2025-3-10 14:27 | 只看该作者
用 systick 计时器,阻塞等待,见 delay_us 函数:
https://github.com/dukelec/cdnet/blob/master/arch/stm32/arch_wrapper.c

使用特权

评论回复
9
alienmiller| | 2025-3-10 17:49 | 只看该作者
看你用的什么单片机了,频率低精度要求不高的当然nop,频率高对延时有精度要求的那就用定时器。

使用特权

评论回复
10
SpiritSong| | 2025-3-10 23:13 | 只看该作者
就是使用nop命令,不过要注意不要被编译器给优化掉

使用特权

评论回复
11
ayb_ice| | 2025-3-11 09:55 | 只看该作者
这取决于主频,比如标准51就是10个NOP,如果是单周期51,又跑的比较快,可以用定时器方式2,不开中断,直接读取两次计数值,相减大于等于10即可

//假设单周期51,跑12M
#define us        *12
void delay_xus(u8 x)
{
        volatile u8 ucBase = TH0;
       
        while ((u8)(TH0 - ucBase) < x)
        {
                //__nop();
        }
}

        delay_xus(10us);

使用特权

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

本版积分规则

认证:嵌入式技术专家
简介:热爱开源,乐于分享。在嵌入式技术领域里面,主攻通讯协议,Modbus,TCP/IP以及虚拟化和RTOS

23

主题

508

帖子

3

粉丝