51单片机中的串口通信发送10(16进制)以上显示不正确

串口通信中,向单片机发送数据控制LED灯亮实验中
发01,02、04、08 依次是 第1 2 3 4 个灯亮

而发送 10 就成第5 6 个一起亮了,然后发20 、40 是第7 和 第 8 个;
发 80 就全灭了 , 这是啥情况啊。

#include

unsigned char a,flag;
void init();
void main()
{
init();
while(1)
{
if(flag == 1)
{
ES = 0;
P0 = a;
ES = 1;
flag = 0;
}
}
}

void init()
{
TMOD = 0x20;
TH1 = 0xfa;
TL1 = 0xfa;
TR1 = 1; // T1开始工作
REN = 1; //允许串口接收
SM0 = 0;
SM1 = 1; //选择串口的工作方式
EA = 1; //中断总开关
ES = 1; // 开串口中断
}

void ext() interrupt 4
{
RI = 0;
a = SBUF;
flag = 1;
}

今天下午调了一下程序:

发现是波特率的问题:

4800 的 波特率

这样设置就有问题
图片说明

这样设置就没事。
图片说明
不过为啥是这个情况....

用 串口调试助手 看下你发送的数据对不对

如果对的话,可能是单片机内的程序的问题

你发生的数据,串口中是如何处理的。以及对应数据单片机支持吗,几个地方分别对照一下分析。

发送的方式不对,你改一下试试吧!