找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1627|回复: 13
打印 上一主题 下一主题
收起左侧

为什么我按键停止不了单片机程序的发送字节呢?

[复制链接]
跳转到指定楼层
楼主
我想做一个按键控制开始和停止发送字节的程序,开始是可以开始发送,但是就时停止不了,逻辑指令不是while只要为假就跳出循环了么?为什么while(0)之后程序还是一直在发送字节啊

捕获.JPG (32.09 KB, 下载次数: 36)

捕获.JPG

11.JPG (31.6 KB, 下载次数: 38)

11.JPG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:978814 发表于 2023-8-16 14:11 | 只看该作者
是这样的,你这个是轮询执行,当你按下开始后,P就等于了1那么你的while(p)就会锁住,一直在执行这个循环里面的东西,不会再重头开始扫描了,也就是即使你按下了停止,单片机也不会去执行,单片机被锁在了while(p)中,如果想达到你的那个效果把while(p)改成if(p)就可以了
回复

使用道具 举报

板凳
ID:161164 发表于 2023-8-16 14:30 | 只看该作者
76行的while改为if
回复

使用道具 举报

地板
ID:1077099 发表于 2023-8-16 14:33 | 只看该作者
十二橡树 发表于 2023-8-16 14:11
是这样的,你这个是轮询执行,当你按下开始后,P就等于了1那么你的while(p)就会锁住,一直在执行这个循环 ...

但是这个大主体的while不也是循环么?就时main主函数里不是有一个while(1),他不会循环检测的么?这块的顺序是什么样的啊,嵌套指令后哪个为先哪个为后啊,求赐教啊
回复

使用道具 举报

5#
ID:1077099 发表于 2023-8-16 14:36 | 只看该作者
十二橡树 发表于 2023-8-16 14:11
是这样的,你这个是轮询执行,当你按下开始后,P就等于了1那么你的while(p)就会锁住,一直在执行这个循环 ...

我改成if(p)和if(p==1)都试了还是无法停止啊
回复

使用道具 举报

6#
ID:1077099 发表于 2023-8-16 14:40 | 只看该作者
lkc8210 发表于 2023-8-16 14:30
76行的while改为if

我改成了if(p)和if(p==1)都试了一下,都是可以开始但是无法停止
回复

使用道具 举报

7#
ID:978814 发表于 2023-8-16 14:47 | 只看该作者
溜溜小白 发表于 2023-8-16 14:33
但是这个大主体的while不也是循环么?就时main主函数里不是有一个while(1),他不会循环检测的么?这块 ...

轮询就是代码那个在前就先执行那个循环,首先先进行你的初始化即uart(),然后进入你的主循环,以后单片机就在这个主循环中跑了,然后执行你下面的程序,当你按键什么都没按下的时候,这个程序就一直在在主循环中从头到尾的扫描,当你按下开始以后,你的内部循环while(p)就激活了,同理单片机就会在while(p)这个循环中从头到尾的执行你的程序。如果你想使用whil(p)实现这个功能的话,你也可以把按键检测作为中断,在中断中改变p的状态
回复

使用道具 举报

8#
ID:978814 发表于 2023-8-16 14:50 | 只看该作者
溜溜小白 发表于 2023-8-16 14:40
我改成了if(p)和if(p==1)都试了一下,都是可以开始但是无法停止

你的P定义是什么 能截一下整个代码吗 是有符号的还是无符号
回复

使用道具 举报

9#
ID:1077099 发表于 2023-8-16 14:56 | 只看该作者
十二橡树 发表于 2023-8-16 14:50
你的P定义是什么 能截一下整个代码吗 是有符号的还是无符号

unsiged char p 无符号的
回复

使用道具 举报

10#
ID:978814 发表于 2023-8-16 15:07 | 只看该作者
你确定你的按键没问题是吗 这样你试试用P3.4做开始按键 p3.5做停止 然后你看下能不能开始 如果不能开始就是P3.4 硬件有问题
回复

使用道具 举报

11#
ID:161164 发表于 2023-8-16 15:13 | 只看该作者
溜溜小白 发表于 2023-8-16 14:40
我改成了if(p)和if(p==1)都试了一下,都是可以开始但是无法停止

71行改为p=0;
回复

使用道具 举报

12#
ID:123289 发表于 2023-8-16 17:22 | 只看该作者
分开写:
1、先写一个发送函数send_ss,运行它就发送。
2、再写一个停止发送函数stop_ss,运行它就停止发送。
做到这两点后:
3、再依据键状态,决定运行哪个函数。
这不是很清楚吗?而且分开调试又方便。
回复

使用道具 举报

13#
ID:69038 发表于 2023-8-16 17:31 | 只看该作者
逻辑问题,你这个while(p)就是一个坑,要么进不去,要么出不来。
回复

使用道具 举报

14#
ID:69038 发表于 2023-8-16 17:37 | 只看该作者

在while(P)中插入P3_4处理代码。试一下?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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