3208|9

11

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

单片机中delay的问题 [复制链接]

本人单片机小白一名,之前在写程序的时候,老师提到,我程序中的delay太多,无法放到实际中去运用。给我推荐了vt_time的方式,采用定时器去做计时。

我这边写了段亮灯程序

void main()

{

        system_init();

        while(1)

        {

                led_display();                                      //灯翻转程序

                vtimer_set(&vt_led, 2000);                //设定间隔时间
                while (!vtimer_expired(&vt_led));      //判断是否到时间

        }

}

 

请问这么写可以么,我感觉我写的思路和delay是一样的没区别,单片机在处理的时候会有什么不一样的地方么?单片机在处理该段定时的时候,仍处于空转的状态吧?

此帖出自51单片机论坛

最新回复

能说下方法嘛     详情 回复 发表于 2020-3-25 13:01
点赞 关注
 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 

delay采用单片机循环等待方式,是一种阻塞机制,系统在delay状态下不能处理其它任务,所以效率低。

 

使用RTOS或者定时器,只有在达到设定时间,才执行对应任务,就可以分时执行多个任务了。

此帖出自51单片机论坛

点评

那我这么写是不是还是就等于用的delay啊。灯亮了,等待时间,等时间到了才去执行下一步,灯翻转。。  详情 回复 发表于 2020-3-10 15:29
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
dcexpert 发表于 2020-3-10 15:23 delay采用单片机循环等待方式,是一种阻塞机制,系统在delay状态下不能处理其它任务,所以效率低。 &nbs ...

那我这么写是不是还是就等于用的delay啊。灯亮了,等待时间,等时间到了才去执行下一步,灯翻转。。

此帖出自51单片机论坛

点评

没错,实际上跟delay区别不大  详情 回复 发表于 2020-3-10 17:10
 
 
 

回复

1792

帖子

0

TA的资源

五彩晶圆(初级)

4
 
o景天o 发表于 2020-3-10 15:29 那我这么写是不是还是就等于用的delay啊。灯亮了,等待时间,等时间到了才去执行下一步,灯翻转。。

没错,实际上跟delay区别不大

此帖出自51单片机论坛

点评

那想请教一下,像是按键检测里面,那个delay'(消抖)该怎么去掉呢。怎么去写呢。还有这个led我这样写是否会好一点? if ((vtimer_expired(&vt_led))        &nbs  详情 回复 发表于 2020-3-10 17:37
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(中级)

5
 
sint27 发表于 2020-3-10 17:10 没错,实际上跟delay区别不大

那想请教一下,像是按键检测里面,那个delay'(消抖)该怎么去掉呢。怎么去写呢。还有这个led我这样写是否会好一点?
if ((vtimer_expired(&vt_led))                 //超时返回1

{

       led_display();                                      //灯翻转程序

       vtimer_set(&vt_led, 2000);                //设定间隔时间

}

此帖出自51单片机论坛

点评

可以用定时器,时间片的框架去做,比如每隔5ms检测一次按键,连续几次之后确认按键有效  详情 回复 发表于 2020-3-11 07:59
这个可以  详情 回复 发表于 2020-3-10 21:13
 
 
 

回复

1万

帖子

142

TA的资源

版主

6
 

Delay指令是用于很短的延时,较长、很长的延时应该用定时器做,这样MCU还可以去处理其它任务或进入低功耗状态。

此帖出自51单片机论坛
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

4005

帖子

0

TA的资源

版主

7
 
o景天o 发表于 2020-3-10 17:37 那想请教一下,像是按键检测里面,那个delay'(消抖)该怎么去掉呢。怎么去写呢。还有这个led我这样 ...

这个可以

此帖出自51单片机论坛
 
 
 

回复

1792

帖子

0

TA的资源

五彩晶圆(初级)

8
 
o景天o 发表于 2020-3-10 17:37 那想请教一下,像是按键检测里面,那个delay'(消抖)该怎么去掉呢。怎么去写呢。还有这个led我这样 ...

可以用定时器,时间片的框架去做,比如每隔5ms检测一次按键,连续几次之后确认按键有效

此帖出自51单片机论坛

点评

一般我超过10个us就不用延时  详情 回复 发表于 2020-3-11 08:11
 
 
 

回复

1632

帖子

4

TA的资源

纯净的硅(高级)

9
 
sint27 发表于 2020-3-11 07:59 可以用定时器,时间片的框架去做,比如每隔5ms检测一次按键,连续几次之后确认按键有效

一般我超过10个us就不用延时

此帖出自51单片机论坛
 
个人签名科技改变生活
 
 

回复

17

帖子

0

TA的资源

一粒金砂(初级)

10
 
o景天o 发表于 2020-3-10 17:37 那想请教一下,像是按键检测里面,那个delay'(消抖)该怎么去掉呢。怎么去写呢。还有这个led我这样 ...

能说下方法嘛

 

image-20200325130055-1.png (23.04 KB, 下载次数: 0)

image-20200325130055-1.png
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表