单片机怎么用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);
}
谢谢你们的解答;但现在四个灯亮一样(可能是最后一个字节)!不是对应的亮 展开
第二个字节数据点亮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);
}
谢谢你们的解答;但现在四个灯亮一样(可能是最后一个字节)!不是对应的亮 展开
6个回答
展开全部
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);
}
我不知道你问的是不是接受机的代码,这个用的是查询实现的。
如果你还需要干别的,换中断实现比较合适。
{
//初始化串口
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);
}
我不知道你问的是不是接受机的代码,这个用的是查询实现的。
如果你还需要干别的,换中断实现比较合适。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主意思估计是单片机双机232通信吧。
单片机串口缓冲寄存器SBUF是读写复用的,当接收中断的时候在中断程序里处理一次SBUF,就是读取一次SBUF的内容,缓冲寄存器SBUF就变空了,除非接收到下一个数据。
你程序里面接收中断处理有点语意上的问题吧,led[i] = SBUF; 这句已经把SBUF的内容读走了,又没有接收到下一个数据,所以你再判断SBUF则一直是空,就是SBUF内容是0,这样你的if语句就不会执行 i++ 操作,所以程序的表现是不是只有P0口的灯有变化?
单片机串口缓冲寄存器SBUF是读写复用的,当接收中断的时候在中断程序里处理一次SBUF,就是读取一次SBUF的内容,缓冲寄存器SBUF就变空了,除非接收到下一个数据。
你程序里面接收中断处理有点语意上的问题吧,led[i] = SBUF; 这句已经把SBUF的内容读走了,又没有接收到下一个数据,所以你再判断SBUF则一直是空,就是SBUF内容是0,这样你的if语句就不会执行 i++ 操作,所以程序的表现是不是只有P0口的灯有变化?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
串转并,8字节一提取,分别送1,2,3口,搞定~~~
参考资料: 单片机原理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看着好像是没什么错误的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询