单片机C语言编程关于延时函数

单片机C语言编程关于延时函数,第1张

你是用的uvision吧?我用的uvision4,把程序编好运行,然后进行调试(在此要设置两个断点就是一个在Delay延时函数之前,一个断点设在延时之后),然后你会在左边register栏会看见一个   sec:000014182  这个就是软件运行到断点处所用时间,然后再运行一次(这次就是运行完延时函数所用时间)。你把两次的时间做差值就是延时函数延时时间。再附图两张。

这个延时关键看使用的晶振多大,比如12M晶振for(j=0;j<120;j++);大概延时1毫秒,110592M晶振那么for(j=0;j<110;j++);延时1毫秒,你这里的for(j=0;j<100;j++);延时1毫秒的话,晶振应该是10M,不太常见哟,特别是在单片机方面。

delay(u16 i)

{

while(i--);   //这里就是当i减1不为0时一直做减1运算,知道i为0跳出循环。

}

想当于:

delay(u16 i)

{

while(i--)

    {

    ;

    }

}

你要搞懂中断的含义,如果你想中断延时 有个方法可以使用下

当中断产生的时候,进入中断服务函数处理中断程序时,你可以延时你想要延时的时间。处理完毕再回到原程序,这样就达到了延时的目的,不过这是画蛇添足。

如果你是想一段时候后让MCU做什么事,那就是定时用法了,与延时没什么关系。

中断服务函数越简单越好

void main()

{

if(s19==0) //判断按键是否按下,s19是个开关

delay(10); //等待再次判断,以防误 *** 作,去抖

if(s19==0)

{P1=0x7f; }

}

这个这样写不行呀,这样只会执行一次呀。延时没有问题

void main()

{

while(1)

{

if(s19==0) //判断按键是否按下,s19是个开关

{

delay(10); //等待再次判断,以防误 *** 作,去抖

if(s19==0)

{P1=0x7f; }

}

}

}

楼主呀, {P1=0x7f; }这个里面要有多的延时呀,没有的话自然没有了呀。你换成:

{P1=0x7f;delay(100); }肯定有的啦。

其实这个你自己可以单步调试出来得呀。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11670157.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存