OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3915|回复: 12

51单片机怎么使用定时器实现延时功能?

[复制链接]

69

主题

495

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2197
金钱
2197
注册时间
2015-11-14
在线时间
542 小时
发表于 2017-3-4 09:45:40 | 显示全部楼层 |阅读模式
1金钱
    QQ截图20170304094031.png 这个是每发送一次数据就要延时一段时间的,现在这个延时是用for实现的,一直让mcu在死等待,这个延时怎么用定时器实现?30ms后一定要回到这里执行下一个发送数据语句,这个是for循环,也不能跑出去吧?有什么办法可以实现这个延时功能?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

17

主题

344

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1280
金钱
1280
注册时间
2013-12-14
在线时间
567 小时
发表于 2017-3-4 09:51:19 | 显示全部楼层
用时钟节拍+状态机的方法来做。
半导体->模拟电路->数字电路->单片机->汇编->C->操作系统->java
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-4 12:11:16 | 显示全部楼层
我就想问你,不死等的时候,你做什么去?  难道写数据0X00?如果这样,你何必加延时?
回复

使用道具 举报

69

主题

495

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2197
金钱
2197
注册时间
2015-11-14
在线时间
542 小时
 楼主| 发表于 2017-3-4 13:55:53 | 显示全部楼层
正点原子 发表于 2017-3-4 12:11
我就想问你,不死等的时候,你做什么去?  难道写数据0X00?如果这样,你何必加延时?

不是写0x00,这只是一个比如。大循环里有好多函数一直在循环,这个延时是其中一个函数里面的,在延时这段时间里不是应该去执行其他函数吗?但是我在想,这个延时怎么跳出来然后又跳回去?
回复

使用道具 举报

32

主题

300

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1049
金钱
1049
注册时间
2012-3-30
在线时间
321 小时
发表于 2017-3-6 17:47:29 来自手机 | 显示全部楼层
定时中断加计数器。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-3-6 18:28:48 | 显示全部楼层
单模先声 发表于 2017-3-4 13:55
不是写0x00,这只是一个比如。大循环里有好多函数一直在循环,这个延时是其中一个函数里面的,在延时这段 ...

怎么做?你告诉我
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2017-3-6 20:19:53 | 显示全部楼层
可以去了解前后台系统+状态机
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

0

主题

19

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1915
金钱
1915
注册时间
2017-3-5
在线时间
966 小时
发表于 2017-3-6 21:15:09 来自手机 | 显示全部楼层
把延时改为你要运行的函数,用函数来消耗时间,这样就没有空闲了。
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2017-3-7 09:03:07 | 显示全部楼层
单模先声 发表于 2017-3-4 13:55
不是写0x00,这只是一个比如。大循环里有好多函数一直在循环,这个延时是其中一个函数里面的,在延时这段 ...

配置定时器进中断咯
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2017-3-7 09:03:24 | 显示全部楼层
正点原子 发表于 2017-3-4 12:11
我就想问你,不死等的时候,你做什么去?  难道写数据0X00?如果这样,你何必加延时?

有道理
回复

使用道具 举报

0

主题

12

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2016-4-6
在线时间
4 小时
发表于 2017-3-7 09:19:43 | 显示全部楼层
xyl210xyl 发表于 2017-3-7 09:03
配置定时器进中断咯

这个是正解,类似串口TI发送中断,判断发送字节数,或者结束符,来决定是指针下移还是结束发送。
回复

使用道具 举报

3

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2013-12-24
在线时间
28 小时
发表于 2017-3-7 10:17:11 | 显示全部楼层
开一个RTOS就好了,你用定时器延时也是在死等的。只是比计数延时稍微准确一些而已
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2017-3-7 10:24:37 | 显示全部楼层
还有,收发用  起始 结束标志去判断从来就是不合理的 ,错误数据怎么办 ,中断能实现非阻塞收发,也能实现简单任务切换
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 17:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表