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

就是说用串口调试助手发送0XFFFF,单片机怎么要怎么处理呢?先收到低八位后,进入中断把RI清0,然后单片机就会自动接收后面的高八位吗?我是用的是方式1,不需要奇偶校验... 就是说用串口调试助手发送0XFFFF,单片机怎么要怎么处理呢?先收到低八位后,进入中断把RI清0,然后单片机就会自动接收后面的高八位吗?
我是用的是方式1,不需要奇偶校验
展开
 我来答
百度网友186dfeac08
2014-03-13 · TA获得超过754个赞
知道小有建树答主
回答量:1074
采纳率:50%
帮助的人:531万
展开全部
51单片机是8位的,一次只能接一个字节,你这16位的,要分两次的。

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

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

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

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

因此,不用担心第二个字节会丢失。
九环套月
2014-03-13 · TA获得超过613个赞
知道小有建树答主
回答量:134
采纳率:0%
帮助的人:109万
展开全部
采用串口中断接收,16位数据要分2次接收,即进入中断2次。每次进入中断后先关中断,再把RI清零,把接收SBUF的数据保存到一个unsigned char的字节变量中,然后开中断等待下一次接收。然后把2次接收的数据合并成一个unsigned int的16位数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhxiufan
推荐于2018-05-12 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38387
国家科技进步奖

向TA提问 私信TA
展开全部
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);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式