找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3745|回复: 9
打印 上一主题 下一主题
收起左侧

MCU应该如何实现一个毫秒级的延时函数?

[复制链接]
跳转到指定楼层
楼主
大佬们,就是特别想知道你们是咋样弄出一个毫秒级的函数,通过while或者是for循环得到的,能否写的明白一点
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:743654 发表于 2020-11-4 08:48 | 只看该作者
延时时间跟晶振有关,
void Delay1ms()                //@11.0592MHz
{
        unsigned char i, j;

        _nop_();
        i = 2;
        j = 199;
        do
        {
                while (--j);
        } while (--i);
}

要精确延时需用到定时器
回复

使用道具 举报

板凳
ID:420836 发表于 2020-11-4 09:06 | 只看该作者
通常可以使用单片机库的delay子例程。
回复

使用道具 举报

地板
ID:743654 发表于 2020-11-4 09:13 | 只看该作者
cheney03 发表于 2020-11-4 08:48
延时时间跟晶振有关,
void Delay1ms()                //@11.0592MHz
{

for 循环实现:
void MainDelayMs(unsigned int ms)          //@11.0592MHz
{
        unsigned int  i,j;
        for(i=ms;i>0;i--)
    {
            for(j=500;j>0;j--){}
    }               
}
回复

使用道具 举报

5#
ID:401564 发表于 2020-11-4 11:51 | 只看该作者
只要是循环,都是一样的
毫秒级随便就可以的了
如果是STC单片机,直接在下载器那复制就可以了,不同型号的单片机要有不同的选择想要微秒级的,就用汇编


回复

使用道具 举报

6#
ID:514901 发表于 2020-11-4 12:50 | 只看该作者
用STC官方的ISP下载器,可以根据你的单片机型号和晶振生成任意延时时间的函数程序
回复

使用道具 举报

7#
ID:836364 发表于 2020-11-4 15:45 | 只看该作者
哦,谢谢大佬们了
回复

使用道具 举报

8#
ID:137736 发表于 2020-11-4 17:30 | 只看该作者
循环嵌套就行,但不建议用。定时器加标志变量更好。
回复

使用道具 举报

9#
ID:836364 发表于 2020-11-5 08:44 | 只看该作者
那定时器不够用咋办??定时器就那么几个,有限的很
回复

使用道具 举报

10#
ID:401564 发表于 2020-11-5 09:18 | 只看该作者
123456czst 发表于 2020-11-5 08:44
那定时器不够用咋办??定时器就那么几个,有限的很

在很多情况下,定时器虽然叫""定时"",但很少是用定时器来延时的,它的作用是定时器中断,这才是它的核心
也就是说每过一个时间要做一件事,而且这件事的等级是最高的(可以设定),不管单片机在做什么,都会先停下来,进入中断
或者是外部触发事件之类的,像是测量一个脉冲的长度,这个脉冲随时会来的那种,这就要用到定时器中断,严格叫捕捉,你学到了就会知道了
至于延时,函数就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表