标题: 单片机初学者请教软件延时和定时器延时的区别? [打印本页]

作者: lwhmgp    时间: 2018-11-23 19:51
标题: 单片机初学者请教软件延时和定时器延时的区别?
对于软件延时还是定时器延时有点疑惑,为什么说定时器延时不占用单片机时间,书上和视频中都说软件延时占用单片机的扫描时间,会错过一些事件,不都是起一个延时的效果吗,比如 led=0;delay();led=1;delay(); ........
比如第一个delay()不论是软件延时还是定时器延时,都得把延时函数执行完才会执行下一步吧,如像书上和视频中说的定时器延时不占用扫描时间,哪岂不是就跳过delay() 函数了,哪还有什么意义。
作者: 背球客    时间: 2018-11-23 21:36
定时器延时会使程序进入中断,中断进行中,主程序并不会运行,所以没问题
作者: 冰冰洁洁    时间: 2018-11-24 07:44
定时器有专用寄程器的,如你的主程序随便运行,只要定时中断一到就会叫停主程序而执行行定时中断,这个中断可以是点个小灯。如你主程序不停取反闪烁一个灯,定时一到就长亮。你看这不就是你主程序一直运行取反,无论定时到的那一会灯是什么状态,他都会常亮。这样理行能行吗?

作者: lwhmgp    时间: 2018-11-24 08:07
背球客 发表于 2018-11-23 21:36
定时器延时会使程序进入中断,中断进行中,主程序并不会运行,所以没问题

你的意思是程序是在中断中进行的,可主程序中往往有很多的状态要扫描的,你说主程序在这个时候是不运行的,哪不是主程序的扫描停止了吗,哪和软件延时还有什么区别,都是停在delay不往下进行,都会错过一些状态的,我的疑惑就在这儿.
作者: phang    时间: 2018-11-24 09:21
1软件延时:
其他执行  --------           --------
延时执行             --------          --------
    看到软件延时像是一般其他执行那样,会占用时间的

2定时器延时:
其他执行 ------- - - - -   --------  - - - -  --------
延时执行         - - - - -            - - - - -
   看到,在定时器计数时,单片机是在做着其他工作,知道定时器加1一次,才回到定时器延时执行。

大概就这么个理解,要深入理解,变成自己的知识,还是多写代码多看书。
作者: angmall    时间: 2018-11-24 09:21
用软件延时,CPU 循环执行一小段延时程序。
浪费 CPU 的精力。

用定时器定时,CPU 就可以干别的。
作者: angmall    时间: 2018-11-24 09:26
1、软件循环延时:采用循环语句,如for,while等,进行长时间的空操作,或者空语句。
优点:程序理解简易,入手快,新手必备武器!
缺点:时间精度不高,且占用单片机大量时间资源,引发其它子函数的不流畅(卡滞、迟钝),导致系统实时反应能力下降。
2、定时延时:采用定时器定时,如T0,T1;
优点:时间精度高,提高系统程序执行的高效性,不影响子函数的正常运行。
缺点:需占用1个定时器资源(可以复用),需良好程序构架支持,入手难。
个人建议:一旦学会定时器,就不应该再使用“循环延时”函数,采用定时器才是正道。如果对延时精度要求不高,建议使用结构体组成多个延时体。

作者: Sea海    时间: 2018-11-24 09:31
用软件定时,CPU 循环执行一小段延时程序。 浪费 CPU 的精力。 用定时器定时,CPU 就可以干别的。
作者: 冰冰洁洁    时间: 2018-11-24 10:05
lwhmgp 发表于 2018-11-24 08:07
你的意思是程序是在中断中进行的,可主程序中往往有很多的状态要扫描的,你说主程序在这个时候是不运行的, ...

那是对的,但中断所以才分优先级别,中断还可以被另一个中断高级别叫停,回归,但延时就只能等待,
作者: 冰冰洁洁    时间: 2018-11-24 10:10
lwhmgp 发表于 2018-11-24 08:07
你的意思是程序是在中断中进行的,可主程序中往往有很多的状态要扫描的,你说主程序在这个时候是不运行的, ...

所以我们才会引入N多中断优先级,防止延时或者大量不应答器件,死在那里,使得主程序停止,中断有时等于你认为的延
作者: azhaozhijia    时间: 2018-11-24 13:51
软件延时说白了就是浪费CPU时间而且还有很大的机械抖动,而定时器就不一样他是单片机的内部定时就好像你要2MS的延时,定时器就像CPU雇佣的工人2MS
作者: BWxiaozhang    时间: 2018-11-24 14:15
软件延迟一般时间不精准,定时器就比较准
作者: 6467778399    时间: 2018-12-11 17:08
精度不一样
作者: DA柱    时间: 2018-12-11 17:22
软件延时会占用cpu,定时器延时的话就好比你在工作的时候还有个小助手来帮你,不用经常打断你的工作
作者: 昆明路口卖提莫    时间: 2018-12-11 19:00
延时函数时CPU会一直纯延时,什么都不干,  而定时器不一样,它在背后跑它自己的,到时间了会进入中断,执行中断函数里的程序,不占用CPU,主程序和定时器互不影响
作者: Mr.MR.Z    时间: 2018-12-12 15:06
可以这样理解:定时器延时是让程序跑进定时器里面运行,单片机依旧可以干别的事情,软件延时就是让单片机依旧不停在干活,只不过干的活是无意义纯粹消磨时间的期间单片机干不了别的。
作者: 坐在分头调戏鬼    时间: 2018-12-13 09:58
只是暂时跳过吧    当中断执行完以后还会继续执行没有完成的程序   等到下次中断时间到了在进去中断就这么循环下去
作者: saya0769    时间: 2019-3-28 09:03
我可以这样理解吗? 延时是单片机等待,什么都做不了,主程序也不会继续执行。定时器虽然也让主程序不继续执行。但是有多个定时器的话,那多个定时器都还在执行???
作者: 77smile    时间: 2019-3-28 11:10
定时器延时是利用定时计数,视为外设,计数是一直在进行的,当计数到溢出更新值时产生中断信号,MCU接收到这个信号后,在中断函数中可以处理你要延时之后再执行的代码,在未进入定时中断时间内,MCU同时可以执行其他代码;而普通的延时函数,函数里面的代码是需要MCU一句一句地执行,要占用时间。
作者: 笨笨兔    时间: 2019-3-28 11:17
举个例子:单片机要点亮1 Minute的LED,软件延时的意思是,从点亮LED开始,单片机什么都不干,等待1 Minute,到时关闭LED;
定时器延时意思就是,从点亮LED开始,设置好定时器延时时间,单片机该干什么就干什么,等到延时器延时时间到了,来个中断,单片机放下当前工作,保存现场参数,响应中断并关闭LED,单片机回复现场参数,接着干原来的工作;

作者: 艰难018jin    时间: 2019-3-28 12:55
用软件定时,CPU 循环执行一小段延时程序。 浪费 CPU 的精力。浪费资源。
作者: pingshuenhao    时间: 2019-3-28 15:42
定时器延时准确,依靠晶振。重点是不耽误单片机运行。软件延时消耗的是cpu指令时间。CPU处于暂停(只能执行延时)状态
作者: jyysns    时间: 2019-8-13 23:46
pingshuenhao 发表于 2019-3-28 15:42
定时器延时准确,依靠晶振。重点是不耽误单片机运行。软件延时消耗的是cpu指令时间。CPU处于暂停(只能执行 ...

说的好呀
作者: 天风情    时间: 2019-8-14 10:01
软件延时只是傻瓜式的空等,此时延时的优先级高于一切中断,这样做是有风险的
作者: qxdqxd123456    时间: 2019-8-14 10:33
延时不精确,主要是相当于用单片机执行空语句, 而定时器则是精确定时,每隔几ms或us执行一次程序
作者: 13236498633    时间: 2019-8-14 11:35
定时器延时是单机内部硬件延时,不占用软件时间。
作者: 流着汗的鱼    时间: 2019-8-14 16:02
你这个问题,可以留着,等你多学习一点,自己就明白了!




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