永发信息网

串口调试助手向单片机发送一串数字,单片机只显示最后一位,该怎么解决?

答案:4  悬赏:60  手机版
解决时间 2021-12-31 09:25
  • 提问者网友:夢醒日落
  • 2021-12-30 13:44
利用串口调试助手发送一串数字如:11223344。单片机接收任意一位数字,重新组合显示在lcd1602上。但我的程序只能接收最后一位,下面是我写串口程序,大神们帮忙解决。

void InitUART(void)
{
SCON = 0x50; //8位可变波特率
AUXR1= AUXR1 & 0x3F;
AUXR = 0x40; //定时器1为1T模式
TMOD = 0x20; //定时器1为模式2(8位自动重载)
TL1 = 0xDC; //设置波特率重装值
TH1 = 0xDC;
TR1 = 1; //定时器1开始工作
ES = 1; //使能串口中断
EA = 1;
}

void Uart() interrupt 4 using 1
{
uint m=0;
while(RI)
{
RX_BUF4[m]=SBUF;
m++;
RI=0;
flag1=1;
}

if (TI)
{
TI = 0; //清除TI位
}
}
最佳答案
  • 五星知识达人网友:琴狂剑也妄
  • 2021-12-30 14:43



你好!!
你每次串口中断的时候都会 uint m=0;
那你 m++ 还有什么意义,把 uint m=0; 拿到中断的外面;中断结束后 m 清零
还有,别用 while 循环,用 if 判断
全部回答
  • 1楼网友:未来江山和你
  • 2021-12-30 18:14
定义这个数字了吗? RX_BUF4[m], M=8!
  • 2楼网友:一袍清酒付
  • 2021-12-30 17:47
把while(RI)改成 if(RI)
  • 3楼网友:廢物販賣機
  • 2021-12-30 16:19
你是发送asc码还是二进制数字?如果asc码直接逐个字节转化成数字然后乘以权值就可以了,如果是二进制可以用强制转化,比如:接收到缓冲区位buf,a = buf[1]*10+buf[0],以此类推。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯