51单片机串口接收十六进制数组数据有误

如题所述

你使用这种方式发送vb数据的i话,发送的是ascii码,比如发送的数据是123的话,计算机会连续发送0x31,0x32,0x33,所以单片机接收程序,需要重新转换一下,你可是试着换一种方式发送十六进制数据
对于单片机接收程序,由于你发送的数据量比较小,而且发送数据时,相邻两个数据的时间间隔也很短,你可以在中断里面通过查询的方式接收数据包
void
serial
()
interrupt
4
using
3
{
uchar
a,cnt;
a=0;
cnt=250;//如果你的波特率比较低,而系统时钟又快的话,cnt应定义为int型,并把值设置的更大些
ri=0;
es=0;//关闭串口中断
str[a++]
=sbuf;
while(cnt--){//如果cnt等于0时退出循环
if(ri){
ri=0;
str[a++]
=sbuf;
cnt=250;//接收到新的数据,重新设定超时
}
}
es=1;//重新开串口中断
//这里可以做一个接收到数组的标志位,用于主程序查询处理相关数据
mc=str[0];
n=str[1];
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-19
单片机程序好像有问题
void
serial
()
interrupt
4
using
3
{
RI=0;
iab
=SBUF;
while(!RI){
RI=0;
n
=SBUF;
flg=1;
}
///////////////////////////////
void
serial
()
interrupt
4
using
3
{
uchar
a;
a=0;
//每次都会初始化为零
RI=0;
str[a++]
=SBUF;
//所以每次都是str[0]=SBUF;str[1]永远都没有得到更新
iab=str[0];
//
iab=1;
n=str[1];
flg=1;
}
相似回答