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

[复制链接]
4953|11
 楼主| 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就好。
xch 发表于 2025-3-10 07:49 | 显示全部楼层
可以仅唤醒不响应中断。
weifeng90 发表于 2025-3-10 08:19 来自手机 | 显示全部楼层
如果精度要求高就用定时器,如果精度要求不高直接用软延时
xionghaoyun 发表于 2025-3-10 08:46 | 显示全部楼层
delay**好
dukedz 发表于 2025-3-10 14:27 | 显示全部楼层
用 systick 计时器,阻塞等待,见 delay_us 函数:
https://github.com/dukelec/cdnet/blob/master/arch/stm32/arch_wrapper.c
alienmiller 发表于 2025-3-10 17:49 | 显示全部楼层
看你用的什么单片机了,频率低精度要求不高的当然nop,频率高对延时有精度要求的那就用定时器。
SpiritSong 发表于 2025-3-10 23:13 | 显示全部楼层
就是使用nop命令,不过要注意不要被编译器给优化掉
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);
自动化陈稳 发表于 2025-5-25 18:19 | 显示全部楼层
通过编写空的 for 或 while 循环来消耗时间。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

31

主题

746

帖子

23

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