打印
[MCU]

如何发送与接收16位的数据?

[复制链接]
529|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenjunt|  楼主 | 2020-6-3 23:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
yufe| | 2020-6-3 23:35 | 只看该作者

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
chenjunt|  楼主 | 2020-6-3 23:40 | 只看该作者

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;
}

使用特权

评论回复
地板
songqian17| | 2020-6-3 23:43 | 只看该作者
SBUF都是8位的,分两次发

使用特权

评论回复
5
songqian17| | 2020-6-3 23:47 | 只看该作者
分成两部分发送,再合成即可。

使用特权

评论回复
6
juventus9554| | 2020-6-3 23:52 | 只看该作者
后面经过反复修改,改成这样子,但只收到一个 个位数。其它都不显示

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;
}

使用特权

评论回复
7
renyaq| | 2020-6-3 23:55 | 只看该作者

这个接收部分的dat1不用左移8位吗?

使用特权

评论回复
8
houcs| | 2020-6-3 23:58 | 只看该作者
分两次发送8位数据,两次接收完成后进行一下数据整合成16bit

使用特权

评论回复
9
chenjunt|  楼主 | 2020-6-8 20:04 | 只看该作者

哦,那我就知道怎么回事了,多谢大家

使用特权

评论回复
10
coshi| | 2020-7-6 14:13 | 只看该作者
分两次就行吧

使用特权

评论回复
11
aoyi| | 2020-7-6 14:14 | 只看该作者
每次只能八位 分两次

使用特权

评论回复
12
drer| | 2020-7-6 14:14 | 只看该作者
是不是还需要自己校验一下

使用特权

评论回复
13
gwsan| | 2020-7-6 14:14 | 只看该作者
自己制定一下通讯协议

使用特权

评论回复
14
kxsi| | 2020-7-6 14:14 | 只看该作者
楼主怎么解决的啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

718

主题

7868

帖子

5

粉丝