单片机怎么用C语言处理接收的数据 20

两个单片机用串口通信,甲机连续发4个字节的数据,乙机接收甲机的数据;怎么使乙机接收的第一个字节数据点亮P0口灯(灯是乙机的灯)第二个字节数据点亮P1口灯第三个字节数据点亮... 两个单片机用串口通信,甲机连续发4个字节的数据,乙机接收甲机的数据;怎么使乙机接收的第一个字节数据点亮P0口灯(灯是乙机的灯)

第二个字节数据点亮P1口灯

第三个字节数据点亮P2口灯

第四个字节数据点亮P3口灯

(52单片机,用C 语言编写)
main()
{
//初始化串口

for(i=0;i<4;i++)
{ while(!RI);
RI = 0;
_nop_();
led[i]=SBUF;
}

P0=led[0];
P1=led[1];
P2=led[2];
P3=led[3];
while(1);
}
谢谢你们的解答;但现在四个灯亮一样(可能是最后一个字节)!不是对应的亮
展开
 我来答
衣冠甲双双b
2019-11-30 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.4万
采纳率:31%
帮助的人:695万
展开全部
处理接收的数据可以先建立一个数组recv[4];
把接收到的数据放里面,recv[0]对应第一个数据recv[1]对应第2个数据一次类推。
然后电灯可以这样
P0=recv[0];P1=recv[1];P2=recv[2];P3=recv[3];
l1...5@yeah.net
2010-08-18 · TA获得超过468个赞
知道答主
回答量:182
采纳率:0%
帮助的人:187万
展开全部
main()
{
//初始化串口

for(i=0;i<4;i++)
{ while(!RI);
RI = 0;
_nop_();
led[i]=SBUF;
}

P0=led[0];
P1=led[1];
P2=led[2];
P3=led[3];
while(1);
}

我不知道你问的是不是接受机的代码,这个用的是查询实现的。
如果你还需要干别的,换中断实现比较合适。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阿呖噶祷honey
2010-08-18 · TA获得超过222个赞
知道小有建树答主
回答量:275
采纳率:90%
帮助的人:180万
展开全部
楼主意思估计是单片机双机232通信吧。

单片机串口缓冲寄存器SBUF是读写复用的,当接收中断的时候在中断程序里处理一次SBUF,就是读取一次SBUF的内容,缓冲寄存器SBUF就变空了,除非接收到下一个数据。

你程序里面接收中断处理有点语意上的问题吧,led[i] = SBUF; 这句已经把SBUF的内容读走了,又没有接收到下一个数据,所以你再判断SBUF则一直是空,就是SBUF内容是0,这样你的if语句就不会执行 i++ 操作,所以程序的表现是不是只有P0口的灯有变化?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友23e6e38
2010-08-18 · 超过11用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:31.1万
展开全部
串转并,8字节一提取,分别送1,2,3口,搞定~~~

参考资料: 单片机原理

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lzfpw
2010-08-28 · TA获得超过513个赞
知道小有建树答主
回答量:313
采纳率:100%
帮助的人:243万
展开全部
看着好像是没什么错误的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式