找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 5407|回复: 4
收起左侧

(资料分享)51单片机超声波测距时发现只测一次或几次数据就会陷入死循环,现已解决。

[复制链接]
ID:440534 发表于 2019-3-9 19:43 | 显示全部楼层 |阅读模式
在设置发送模式后,有时程序会停留在等待ECHO引脚置1这个while循环里出不来,只要在这个循环里加入防死循环跳出程序即可,此外在设置发送模式成功以后收不到反射回来的信号的while等待中也需要加入防死循环语句。

这是在设置发送模式后等待ECHO引脚置1的while 循环,在里面记忆在简单的break跳出

这是在设置发送模式后等待ECHO引脚置1的while 循环,在里面记忆在简单的break跳出

此为等待发射回来信号的while循环,flag是在定时器0里面设置的。

此为等待发射回来信号的while循环,flag是在定时器0里面设置的。

在定时器溢出后用标志位强行退出等待发射信号,避免死循环

在定时器溢出后用标志位强行退出等待发射信号,避免死循环
。附上完整程序。

超声波测距(LCD1602显示).zip

67.46 KB, 下载次数: 77, 下载积分: 黑币 -5

实测解决只测一次或几次问题

回复

举报

ID:482935 发表于 2020-5-5 15:36 来自触屏版 | 显示全部楼层
楼主牛逼!当初做超声波实验的时候就想到这个问题了。。。但是倒是一直没发生死循环卡住的问题就没太在意。 另外楼主如果没有收到echo的1的话,可能是因为一开始20微秒的启动方波给的时常不够,再多给点延时看看。还有我把这个hcsr04朝天射过,感觉它一定时间(很长时间,超过量程最大时间)之后,echo引脚好像必定会置1的,然后根据长短时间再变0。 我看了hcsr04内部也是个单片机,估计里面程序有防止没回波置1的保障的,也就是只要启动发射超声波了,长时间后echo必定会给个置1。
回复

举报

ID:271725 发表于 2019-3-14 21:06 | 显示全部楼层
有三个警告
回复

举报

ID:345548 发表于 2019-8-18 10:25 | 显示全部楼层
不错,方法可行,不过我建议在第一张图里for语句即可实现,执行效率会高点,因为我的中断中flag=1,所以取的反,可供参考
51hei浏览器截图20190818102440.png
回复

举报

ID:91402 发表于 2020-1-20 16:16 | 显示全部楼层
bluewn 发表于 2019-8-18 10:25
不错,方法可行,不过我建议在第一张图里for语句即可实现,执行效率会高点,因为我的中断中flag=1,所以取 ...

程序用的好特别
回复

举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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