[应用相关] 如何发送与接收16位的数据?

[复制链接]
635|8
 楼主| laozhongyi 发表于 2020-7-6 21:47 | 显示全部楼层 |阅读模式
单片机与单片机间的串口通信,如何发送与接收16位的数据?
Edisons 发表于 2020-7-6 21:51 | 显示全部楼层
void send_com(u8 k)   //发送的数据长度为2^8-1=255
{
S2BUF=k;
while(!(S2CON&S2TI));
S2CON&=~S2TI;
}

u8 Recv_com(void)   //发送的数据长度为2^8-1=255
{
u8 dat;
while(!(S2CON&S2RI));
S2CON&=~S2RI;
return S2BUF;
}
_gege 发表于 2020-7-6 21:53 | 显示全部楼层

SBUF都是8位的,分两次发 分成两部分发送,再合成即可。
Mozarts 发表于 2020-7-6 21:56 | 显示全部楼层
void send_com(u16 k)               
{
S2BUF=(k>>8)&0xff;
while(!(S2CON&S2TI));
S2CON&=~S2TI;

S2BUF=k&0xff;
while(!(S2CON&S2TI));
S2CON&=~S2TI;
}

u16 Recv_com(void)               
{
u16 dat;
u8 dat1;
u8 dat2;
while(!(S2CON&S2RI));
S2CON&=~S2RI;
dat1=S2BUF;

while(!(S2CON&S2RI));
S2CON&=~S2RI;
dat2=S2BUF;

dat=dat1+dat2;
return dat;
}
Listate 发表于 2020-7-6 21:58 | 显示全部楼层
这个接收部分的dat1不用左移8位吗?
wanglaojii 发表于 2020-7-6 22:02 | 显示全部楼层
分两次发送8位数据,两次接收完成后进行一下数据整合成16bit。。
bbapple 发表于 2020-7-6 22:03 | 显示全部楼层
每次只能八位 分两次操作。
handleMessage 发表于 2020-7-6 22:07 | 显示全部楼层
是不是还需要自己校验一下。。
zhouhuanの 发表于 2020-7-6 22:08 | 显示全部楼层
建议自己制定一下通讯协议。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

111

主题

1388

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部