51单片机怎么接收电脑发送的16位数据?

就是说用串口调试助手发送0XFFFF,单片机怎么要怎么处理呢?先收到低八位后,进入中断把RI清0,然后单片机就会自动接收后面的高八位吗?
我是用的是方式1,不需要奇偶校验

51单片机是8位的,一次只能接一个字节,你这16位的,要分两次的。

电脑串口也是按两次来发送,也就是把这个16位的拆成两个字节,所以每个字节发送都是遵循串口协议的,你在单片机里面开串口接收中断即可。

你可能会疑问,要是第一个字节中断了,进入中断函数接第一个字节后,那第二个字节会不会错过,来不及接收?

这个不会的,上面说了,第二个字节也是按串口标准发的,也就是起始位,数据位,(校验位),结束位。

电脑在发一个字节后,又会接着发第二个字节。可是,要知道串口的波特率是很低的,远远比单片机的处理速度低。当你接了第一个字节,将此字节做一些处理,比如存起来时,电脑可能都还没开始发第二个字节呢,因为电脑发数据的速率是以K为单位的,而单片机处理速度是以M为单位的。

因此,不用担心第二个字节会丢失。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-13
采用串口中断接收,16位数据要分2次接收,即进入中断2次。每次进入中断后先关中断,再把RI清零,把接收SBUF的数据保存到一个unsigned char的字节变量中,然后开中断等待下一次接收。然后把2次接收的数据合并成一个unsigned int的16位数据。
第2个回答  推荐于2018-05-12
unsigned int recive()
{
unsigned int dat;
unsigned char ah,al;
while(!RI);
RI=0;
al=SBUF;
while(!RI);
RI=0;
ah=SBUF;
dat=(ah<<8)|al;
return(dat);
}本回答被网友采纳
相似回答