找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6860|回复: 10
收起左侧

为什么单片机串口一直发数据,我程序只想让他发送一次

[复制链接]
ID:514790 发表于 2019-6-9 02:59 | 显示全部楼层 |阅读模式
主程序运行,while(1)
{
     当按下按键时,调用串口发送函数Uart1SendStr(strsend);
}
发送的数据没有问题,就是在第一次按下按键后就一直开始发送,本意是想按一下发送一次的,求解答!
中断程序:
void Uart1Isr() interrupt 4
{
    if (TI)
    {
        TI = 0;
    }
    if (RI)
    {
        RI = 0;
    }
    busy = 0;
}
回复

使用道具 举报

ID:94031 发表于 2019-6-9 09:08 | 显示全部楼层
设个标志来判断,只发一次。
回复

使用道具 举报

ID:489598 发表于 2019-6-9 10:04 | 显示全部楼层
清中断标志位了?还有就是有可能按键按下多次触发了,给按键加个延时试试
回复

使用道具 举报

ID:517466 发表于 2019-6-9 11:11 | 显示全部楼层
首先确认你的按键处理中有没有防抖动处理。没有的话,很容易出现连续发送情况。加入防抖动处理,并且要保证在按键松开以后,视为一次完整的按键按下,在这之后再执行按键的对应处理,就不会发生连续发送了。
你的按键的处理程序没列出来,所以很难判断是哪里出了问题。
防抖处理逻辑:
      按键按下?
         是
            延时20ms
               这个案件被按下?
                  是
                     按键是否被松开了?
                        是
                           执行这个按键被按下的处理
回复

使用道具 举报

ID:557425 发表于 2019-6-9 11:16 | 显示全部楼层
给按键加个延时
回复

使用道具 举报

ID:542241 发表于 2019-6-9 11:27 | 显示全部楼层
少个按键抖动的判断
回复

使用道具 举报

ID:558226 发表于 2019-6-9 15:31 | 显示全部楼层
初始化设置标志
回复

使用道具 举报

ID:514790 发表于 2019-6-9 17:18 | 显示全部楼层
suncat0504 发表于 2019-6-9 11:11
首先确认你的按键处理中有没有防抖动处理。没有的话,很容易出现连续发送情况。加入防抖动处理,并且要保证 ...

你好,我是在运行按键处理程序后,获得其键值,再根据键值来执行相应的函数程序,这个相应的程序是发送数据
回复

使用道具 举报

ID:93224 发表于 2019-6-9 17:24 | 显示全部楼层
肯定是你按键的问题,好好看看按键的程序有没有去抖动什么的
回复

使用道具 举报

ID:517466 发表于 2019-6-9 22:48 | 显示全部楼层
5anXR 发表于 2019-6-9 17:18
你好,我是在运行按键处理程序后,获得其键值,再根据键值来执行相应的函数程序,这个相应的程序是发送数 ...

根据键值处理场合,判断键值合适,立即清除这个键值(复位),然后执行对应键值的处理程序。键值不复位,下次即使没有任何按键,由于这个键值依旧被保持,还会执行对应这个键值的处理程序。
就是说,在中断处理中建立键值后,在键值的判断处理过程中,在处理完成返回之前一定要清除这个键值。避免下次有效串口数据发送之前,依旧使用之前的键值进行处理。
串口中断:收到键值,保存到变量中。
主循环处理:键值=xx?
                        是
                             {
                               键值=0;// 键值复位,等待下一次串口发送键值时设置
                               调用对应这个键值的处理
                             }
                          
回复

使用道具 举报

ID:222006 发表于 2019-6-10 01:12 | 显示全部楼层
按一次发送一次就在按键函数里面处理RI 和 TI好了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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