#include <reg51.h>
#define uchar unsigned char
uchar table[8];
uchar i;
void Uart_Init();
void receive();
void send();
void main()
{
Uart_Init();
while(1)
{
receive();
send();
}
}
void Uart_Init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
TR1=1;
}
void receive()
{
for(i=0;i<8;i++)
{
while(!RI);
RI=0;
table[i]=SBUF;
}
}
void send()
{
for(i=0;i<8;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
}
这是我写的一个串口程序:将收到的八位数字原样返回。
结果出现了很奇怪的现象:大部分的时间都能正常执行,但是在烧进程序,或者偶尔复位的时候会出现混乱。例如我输入12345678,返回给电脑的是1234567(有时也返回01234567),再点发送,返回给电脑的是81234567,然后就会一直以81234567的形式返回给电脑。复位之后又会恢复正常。
以上我说的仅仅是我验证时碰到的一种情况。
总是在数据返回给电脑的时会出现极个别的错误,大部分情况还是正常的。
本人是菜鸟,想了很久也没头绪,哪位大神帮帮忙,解释解释这种情况啊! |