找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2984|回复: 10
收起左侧

这个延时怎样理解?大神们。

[复制链接]
ID:222622 发表于 2017-8-16 15:28 | 显示全部楼层 |阅读模式
void DelayUs2x(unsigned char t)
{   
while(--t);
}
void DelayMs(unsigned char t)
{

while(t--)
{
     //大致延时1mS
         DelayUs2x(245);
         DelayUs2x(245);
}
}

回复

使用道具 举报

ID:227925 发表于 2017-8-16 16:33 | 显示全部楼层
这种延时就是通过大量的自减操作来占用MCU的时钟周期,从而延迟后面程序的执行,在不需要精确延时的时候可以使用,另外这种办法和主频有关,比如36MHz、72MHz的单片机时钟周期是不同的,所以同一条指令运行花的时间也不一样,在其他主频的板子上延时,参数要重新测。
回复

使用道具 举报

ID:211901 发表于 2017-8-16 16:50 | 显示全部楼层
t自减,t--为真时都执行while循环,知道t--小于0
回复

使用道具 举报

ID:227393 发表于 2017-8-16 18:32 | 显示全部楼层
--t是t先减一再判断T是不是1,t--是先判断再减一
回复

使用道具 举报

ID:227821 发表于 2017-8-16 20:08 | 显示全部楼层
谁便一本单片机入门书籍都有讲吧,还需要发帖吗?世上有百度和谷歌....
回复

使用道具 举报

ID:220834 发表于 2017-8-17 21:36 | 显示全部楼层
这是两个延时函数,其中第1个延时函数的参数是t,而第2个演示函数的变量t是指while(t--),只有当t--不为0时才调用第一个延时函数。
回复

使用道具 举报

ID:228211 发表于 2017-8-18 08:38 | 显示全部楼层
通过循环自减来占用cpu工作。从而来实现延时。根据指令执行的周期有关
回复

使用道具 举报

ID:226263 发表于 2017-8-18 09:15 | 显示全部楼层
其实用定时器T0产生标志位,主函数根据时间标志位做相应的动作,单片机不用为延时停在哪里,响应更快,根本不用delay这种写法。
void        main()
{init();
while(1)
                {if(time_flag==10)                  
                        {time_flag=0;
                        key_scan();                 
                        i++;                          
                        }
                }
}
void        T0_time()        interrupt        1                               
{                TH0=(65536-1000)/256;
                TL0=(65536-1000)%256;
                time_flag++;
}
回复

使用道具 举报

ID:228225 发表于 2017-8-18 10:25 | 显示全部楼层
相当于编写了一个递减计数器,每递减一次耗时一个指令周期,通过设置递减数值来实现不同的延迟时间!
回复

使用道具 举报

ID:221628 发表于 2017-8-18 22:24 | 显示全部楼层
软件延时不够准确,而且可移植性太差,具体延时多久要看你的时钟频率
回复

使用道具 举报

ID:199944 发表于 2017-8-18 22:46 | 显示全部楼层
这个简单啊,应该是51单片机的
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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