单片机串口控制数码管,数据能接收和发送,但接受的数据大多都少了数据的最后一位,有的出乱!这是为什么

波特率都改过!!发送的每个数据都没完整的!!
问题解决了!!谢谢各位!!我用的是单片机发送0-9的数字,接收机将接收到的数字对应数组里0-9的编码下标在输出就可以了!!但我还是有点不明白,单片机发送数字过去接收机怎么就知道是几?还有发送的数字也不是对应数的2进制代码!!那是什么?

第1个回答  2011-08-03
SCON控制寄存器使用位控制,不要整体设定。不然你会发现在上电的那一刻,PC会接受到一个乱码,这也就是为什么导致数据错位的原因。要想比较稳定最好是在接受中断中加写识别前缀和后缀,不过你只需要前缀就可以了,比如收到AT之后,后边的数据才是有效数据,将这些数据写入数组,再用数码管显示出来即可!
第2个回答  2011-08-08
1.这个是串行协议决定的,除了起始位结束符奇偶校验位剩下的数据就是你发送的实际有用数据,一般5--8位。
2.比如你发送2,实际发送数据为0b0000 0010
如果你发送'2',则发送ASCII码了
第3个回答  2011-08-03
可能是接收数据部分的程序有问题追问

#include
#define uchar unsigned char
#define uint unsigned int
unsigned idata buf[50];
void init_serialcomm()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
PCON=0x00
TR1=1;
SCON=0x50;
}
void SBUFRev()
{
while(RI==0);
P2=SBUF;
RI=0; }
void main()
{
init_serialcomm();
while(1)
{
SBUFRev();
}
}

第4个回答  2011-08-03
你可以把程序发上来看看 我刚做了一个能接收温度的
相似回答