标题: 这个延时怎样理解?大神们。 [打印本页]

作者: 李仲豪    时间: 2017-8-16 15:28
标题: 这个延时怎样理解?大神们。
void DelayUs2x(unsigned char t)
{   
while(--t);
}
void DelayMs(unsigned char t)
{

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


作者: Lemon_He    时间: 2017-8-16 16:33
这种延时就是通过大量的自减操作来占用MCU的时钟周期,从而延迟后面程序的执行,在不需要精确延时的时候可以使用,另外这种办法和主频有关,比如36MHz、72MHz的单片机时钟周期是不同的,所以同一条指令运行花的时间也不一样,在其他主频的板子上延时,参数要重新测。
作者: 我爱面包    时间: 2017-8-16 16:50
t自减,t--为真时都执行while循环,知道t--小于0
作者: sgq657785    时间: 2017-8-16 18:32
--t是t先减一再判断T是不是1,t--是先判断再减一
作者: i123    时间: 2017-8-16 20:08
谁便一本单片机入门书籍都有讲吧,还需要发帖吗?世上有百度和谷歌....
作者: 宏图物业2011    时间: 2017-8-17 21:36
这是两个延时函数,其中第1个延时函数的参数是t,而第2个演示函数的变量t是指while(t--),只有当t--不为0时才调用第一个延时函数。
作者: 951014035    时间: 2017-8-18 08:38
通过循环自减来占用cpu工作。从而来实现延时。根据指令执行的周期有关
作者: 伟大的科长    时间: 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++;
}
作者: garonleo    时间: 2017-8-18 10:25
相当于编写了一个递减计数器,每递减一次耗时一个指令周期,通过设置递减数值来实现不同的延迟时间!
作者: 趣多多    时间: 2017-8-18 22:24
软件延时不够准确,而且可移植性太差,具体延时多久要看你的时钟频率
作者: 转换zai    时间: 2017-8-18 22:46
这个简单啊,应该是51单片机的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1