单片机怎么能延时执行不耽误正常运转
5个回答
展开全部
延时有两种方法,一种是用软件延时,即写延时子程序,这种方法是让单片机执行无用的指令,就是为了延时,延时期间就不能做其他事情了,很浪费单片机的时间。这种方法是在单片机不忙的情况下用,反正闲着也是闲着。
第二种方法就是你要求的,即能延时,又不耽误主程序的运行,用定时器T0或T1定时,设置定时时间后,定时器开始计时,主程序继续执行,不用管定时器,当定时时间到,定时器就会申请中断,单片机就响应中断,处理定时子程序需要完成的工作,完成后返回到主程序继续主程序的执行,这是最合理的方法,充分利用了单片机的资源,互不影响。
第二种方法就是你要求的,即能延时,又不耽误主程序的运行,用定时器T0或T1定时,设置定时时间后,定时器开始计时,主程序继续执行,不用管定时器,当定时时间到,定时器就会申请中断,单片机就响应中断,处理定时子程序需要完成的工作,完成后返回到主程序继续主程序的执行,这是最合理的方法,充分利用了单片机的资源,互不影响。
展开全部
单片机执行一条语句的速度是非常的慢的,接12M晶振其实到了单片机内部就分到1M而已了。所以时间非常可贵,因为衡量一个CPU好坏来说,它的速度是很重要的一个指标,因此,在一个比较大的工程当中,很不提倡使用简单的延时函数(也就是我们通常命名为delay的那个函数)来处理延时问题。就像你说的那样,虽是延时了,但却耽误了正常运转。
什么意思呢?举个简单的例子,在有八个数码管(采用动态显示)和几个按键(因需消抖,要延时)的工程当中,程序在不断地对数码管和按键进行扫描,当检测到某个按键按下时,水平不高的人一般都delay(100)来延时消抖,那样子的话,如果是细心的人会发现数码管闪了一下(也就是灭了一下),做出这种产品的人只能说是一个二流工程师做出来的。
那如何不影响数码管扫描,又能达到按键消抖的效果呢?这里,时间把握就很重要了。
其实,按脚抖动的时间持续大约是10ms,一个发光二极管从亮到完全暗大约也是10ms,而从灭到完全亮需要1ms,因此,懂得这些以后,就好办了。
说了那么多,不用延时,那方法是什么?答案是定时器中断。是的,定时器中断,当时间到了,再去处理按键动作,这样,就不回卡住CPU时间(也就是你所说的“不耽误正常运转”)了。那怎么实现呢?通常是设一些标志位,这里就不详细讲了。
当然,像数码管也是最好用定时器来延时扫描最好,大的工程都需要这么做,本人从不提倡使用简单的delay延时来处理一切需要延时的事例。
要做精品,并且做好,需要经验的累加。
什么意思呢?举个简单的例子,在有八个数码管(采用动态显示)和几个按键(因需消抖,要延时)的工程当中,程序在不断地对数码管和按键进行扫描,当检测到某个按键按下时,水平不高的人一般都delay(100)来延时消抖,那样子的话,如果是细心的人会发现数码管闪了一下(也就是灭了一下),做出这种产品的人只能说是一个二流工程师做出来的。
那如何不影响数码管扫描,又能达到按键消抖的效果呢?这里,时间把握就很重要了。
其实,按脚抖动的时间持续大约是10ms,一个发光二极管从亮到完全暗大约也是10ms,而从灭到完全亮需要1ms,因此,懂得这些以后,就好办了。
说了那么多,不用延时,那方法是什么?答案是定时器中断。是的,定时器中断,当时间到了,再去处理按键动作,这样,就不回卡住CPU时间(也就是你所说的“不耽误正常运转”)了。那怎么实现呢?通常是设一些标志位,这里就不详细讲了。
当然,像数码管也是最好用定时器来延时扫描最好,大的工程都需要这么做,本人从不提倡使用简单的delay延时来处理一切需要延时的事例。
要做精品,并且做好,需要经验的累加。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.用中断 2.用标志位 如if(a==0){函数体;}当a!=0时跳出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个想法若能实现,基本上99%的工程项目也就与操作系统无缘了,操作系统出现的原因80%都和怎么处理延时有关
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以借鉴系统的解决方法,比如ucos2,设计一个时间基准,看看这个帖子
http://bbs.elecfans.com/jishu_406259_1_1.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询