求助大神!51单片机接收一字节数据出现问题
时间:10-02
整理:3721RD
点击:
大神们你们好!我想做一个51单片机从f28335上位机上通过SCI通讯的实验,上位机每次发给51一字节的数据,以十六进制的形式发送,比如FFH,51H等,但是我的51上接收的数据只有01H-0FH和F1H-FFH是正确的,但是当我发送10H时,单片机会接收到34H,而且完全找不到规律。请大神们抽出一点宝贵的时间给小弟解答下吧!谢了!
void display(uchar num)
{
uchar ge,shi,bai;
ge=num%10;
bai=num/100;
shi=num%100/10;
wb=0;wa=1;
dx=1;
P2=table[bai];
delayms(5);
dx=0;
wb=1;wa=0;
dx=1;
P2=table[shi];
delayms(5);
dx=0;
wb=1;wa=1;
dx=1;
P2=table[ge];
delayms(5);
dx=0;
}
void main()
{
TMOD=0x20; //定时器工作在第二种方式 具有自动重装初值的八位定时器/计数器
PCON=0x80;
TH1=0xff; //波特率设为14400
TL1=0xff;
TR1=1; //启动定时器T1
REN=1; //串行接收允许位
SM0=0; //工作方式1 八位通用异步接收器、发送器
SM1=1; //同上
EA=1; //总中断允许控制位
ES=1; //串口中断允许位
Speed=0;
while(1)
{
display(Speed);
}
}
void ser() interrupt 4
{
ES=0; //串口终端允许位
RI=0; //接收中断标志位
Speed=SBUF;
ES=1;
}
void display(uchar num)
{
uchar ge,shi,bai;
ge=num%10;
bai=num/100;
shi=num%100/10;
wb=0;wa=1;
dx=1;
P2=table[bai];
delayms(5);
dx=0;
wb=1;wa=0;
dx=1;
P2=table[shi];
delayms(5);
dx=0;
wb=1;wa=1;
dx=1;
P2=table[ge];
delayms(5);
dx=0;
}
void main()
{
TMOD=0x20; //定时器工作在第二种方式 具有自动重装初值的八位定时器/计数器
PCON=0x80;
TH1=0xff; //波特率设为14400
TL1=0xff;
TR1=1; //启动定时器T1
REN=1; //串行接收允许位
SM0=0; //工作方式1 八位通用异步接收器、发送器
SM1=1; //同上
EA=1; //总中断允许控制位
ES=1; //串口中断允许位
Speed=0;
while(1)
{
display(Speed);
}
}
void ser() interrupt 4
{
ES=0; //串口终端允许位
RI=0; //接收中断标志位
Speed=SBUF;
ES=1;
}
你用的晶振是多少的呀?看看波特率初始化赋值有没有问题,
PCON=0x80;这个东西把波特率加倍了
用的11.0952Mhz的晶振,感觉初始化都没得问题的样子
嗯 我用的57600的波特率 串口助手也用的57600的 但是还是不行。