51单片机怎么接收电脑发送的16位数据?
就是说用串口调试助手发送0XFFFF,单片机怎么要怎么处理呢?先收到低八位后,进入中断把RI清0,然后单片机就会自动接收后面的高八位吗?我是用的是方式1,不需要奇偶校验...
就是说用串口调试助手发送0XFFFF,单片机怎么要怎么处理呢?先收到低八位后,进入中断把RI清0,然后单片机就会自动接收后面的高八位吗?
我是用的是方式1,不需要奇偶校验 展开
我是用的是方式1,不需要奇偶校验 展开
3个回答
展开全部
51单片机是8位的,一次只能接一个字节,你这16位的,要分两次的。
电脑串口也是按两次来发送,也就是把这个16位的拆成两个字节,所以每个字节发送都是遵循串口协议的,你在单片机里面开串口接收中断即可。
你可能会疑问,要是第一个字节中断了,进入中断函数接第一个字节后,那第二个字节会不会错过,来不及接收?
这个不会的,上面说了,第二个字节也是按串口标准发的,也就是起始位,数据位,(校验位),结束位。
电脑在发一个字节后,又会接着发第二个字节。可是,要知道串口的波特率是很低的,远远比单片机的处理速度低。当你接了第一个字节,将此字节做一些处理,比如存起来时,电脑可能都还没开始发第二个字节呢,因为电脑发数据的速率是以K为单位的,而单片机处理速度是以M为单位的。
因此,不用担心第二个字节会丢失。
电脑串口也是按两次来发送,也就是把这个16位的拆成两个字节,所以每个字节发送都是遵循串口协议的,你在单片机里面开串口接收中断即可。
你可能会疑问,要是第一个字节中断了,进入中断函数接第一个字节后,那第二个字节会不会错过,来不及接收?
这个不会的,上面说了,第二个字节也是按串口标准发的,也就是起始位,数据位,(校验位),结束位。
电脑在发一个字节后,又会接着发第二个字节。可是,要知道串口的波特率是很低的,远远比单片机的处理速度低。当你接了第一个字节,将此字节做一些处理,比如存起来时,电脑可能都还没开始发第二个字节呢,因为电脑发数据的速率是以K为单位的,而单片机处理速度是以M为单位的。
因此,不用担心第二个字节会丢失。
展开全部
采用串口中断接收,16位数据要分2次接收,即进入中断2次。每次进入中断后先关中断,再把RI清零,把接收SBUF的数据保存到一个unsigned char的字节变量中,然后开中断等待下一次接收。然后把2次接收的数据合并成一个unsigned int的16位数据。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
}
{
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);
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询