51单片机软件延时和定时器的区别
区别就是用单片机软件定时,CPU循环执行一小段延时程序,浪费CPU的精力,用定时器定时,CPU就可以干别的。
如果是程序延时的话,时间消耗在(延时程序+剩下的代码);计时器中断则相当于把延时程序交给定时器,此时CPU可以干别的事情,提高了效率。就类似于电脑打游戏时把图形处理任务交给显卡,CPU的压力就小。
单片机进中断后执行中断里的程序,比如你进定时中断,执行完后退出中断后做其他事,但定时还在计数,这样计数和做其他事情两不误。
你的程序中本来就没做其他事情,你的LED移动就是等待中断计数到10才操作的,LED动作的先决条件就是中断计数结束。
扩展资料
1、软件循环延时:采用循环语句,如for,while等,进行长时间的空操作,或者空语句。
优点:程序理解简易,入手快,新手必备武器。
缺点:时间精度不高,且占用单片机大量时间资源,引发其它子函数的不流畅(卡滞、迟钝),导致系统实时反应能力下降。
2、定时延时:采用定时器定时,如T0,T1;
优点:时间精度高,提高系统程序执行的高效性,不影响子函数的正常运行。
缺点:需占用1个定时器资源(可以复用),需良好程序构架支持,入手难。
个人建议:一旦学会定时器,就不应该再使用“循环延时”函数,采用定时器才是正道。如果对延时精度要求不高,建议使用结构体组成多个延时体。
参考资料:百度百科-单片机原理
参考资料:百度百科-定时延时
推荐于2017-12-15
你的程序中本来就没做其他事情,你的LED移动就是等待中断计数到10才操作的,LED动作的先决条件就是中断计数结束
亲,首先谢谢您无私的奉献,小弟还有一点不理解,就上面的这个程序,在第一次进入中断定时器数数的时候,主程序在干什么? 好像什么也没有做,在等呢?是不是这样?
下面的程序就不一样了,没进中断时执行主循环,有中断就进中断,中断执行完再回到中断前主程序执行的位置
进中断后,主程序就等啊,等中断退出才回到主程序
浪费 CPU 的精力。
用定时器定时,CPU 就可以干别的。
亲,谢谢您耐心的解答, 问下,您最后一句话,是什么意思?? 我就是不理解,我上面的那个程序,在进入中断定时函数的时候,主函数好像还是在等啊, 这和下面那个用软件延时的函数比起来, 下面那个函数好比是在等的时间内还在数数, 是这样理解吗?
下面那个函数在等待的时间久是一值在运行delay(100)的函数。上面从中断出来后是在while(1)里不停的循环在不停的判断i=10;上面运行一个while(1)只需要1个机械周期