找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机串口发送数据,通过按键判断发送,但是没有经过按键就直接发送了!

查看数: 2513 | 评论数: 10 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-11-3 10:50

正文摘要:

这个就是程序,我用得单片机开发板,接上串口以后,直接发送数据了,而不是通过我按下那个按键在发送那个数据,而是一直发送,但是我按下另一个按键以后,就变成另一个一直发送了,求大佬指点一下,为什么不 ...

回复

ID:730961 发表于 2020-11-3 14:58
大佬们,怎么用printf(“打印一句话啊”),通过串口调试助手显示出来
ID:730961 发表于 2020-11-3 14:13
感谢大佬们,我把函数放在判断里面,或者在加一个判断就可以了
ID:245053 发表于 2020-11-3 13:19
主程序一直在执行fasong(num)函数,肯定是一直在发送数据了,fasong(num)要有条件(就是你的按键)的执行、结束
ID:278840 发表于 2020-11-3 13:11
当程序运行到fasong(num);串口就发送数据到上位机了,此时num= 0;如果要按键发送的话,就要在fasong()这个子函数加个判断比如定义一个变量Switch=flag.if(Switch_flag){Switch_flag = 0;fasong();}按键将Switch置1,然后if里面清零
ID:424598 发表于 2020-11-3 12:50
发送函数要放到按键函数的判断成功里面
ID:88256 发表于 2020-11-3 11:51
小白学51i 发表于 2020-11-3 11:27
没太懂,我得理解是这样得:初始化以后不是进入while(1);循环了嘛?他不是要一直扫描我的按键函数嘛? ...

   while(1)
   {
  keypros();   //按键函数
  fasong(num);  //发送函数
   }

你看看你写的这个循环,执行按键处理之后就是发送,而不是判断按下什么键去处理发送,所以就会一直发送
ID:730961 发表于 2020-11-3 11:27
lovezjf234 发表于 2020-11-3 11:18
fasong(num);  //发送函数  
你本来就一直在发送,没有中断过,最好用flag进行标记发送,或者用中断进行发 ...

没太懂,我得理解是这样得:初始化以后不是进入while(1);循环了嘛?他不是要一直扫描我的按键函数嘛?我的按键按下以后才能发送num得值,不按下不就发送不了嘛?那么第一次不就是不能发送数据嘛?必须等我按下以后才能发送第一次得值?
ID:730961 发表于 2020-11-3 11:23
心有浮生 发表于 2020-11-3 11:20
你这串口发的dat是在哪赋值的,

不是有一个函数是
void fasong(u16 dat)   
{
    SBUF = dat;
    while(!TI);
    TI = 0;
}
num值给dat了
ID:654028 发表于 2020-11-3 11:20
你这串口发的dat是在哪赋值的,
ID:739545 发表于 2020-11-3 11:18
fasong(num);  //发送函数  
你本来就一直在发送,没有中断过,最好用flag进行标记发送,或者用中断进行发送更好

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

Powered by 单片机教程网

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