请高手达人帮帮忙,单片机P08位,P1口8位,P3口4位怎么合成20位数字通过串口发出去呢?

来源:百度知道 编辑:UC知道 时间:2024/06/03 19:06:01
本人初学单片机,请高手达人帮帮忙啊。我用的是89c51.想用外部中断INT0从P0,P1,P2口读入,然后合成20位数通过串口发送给PC机。C语言怎么编写啊?谢谢啊
请问c语言哪个函数可以完成将8位+8位+4位数字变成20位?

首先最主要的问题就是51的串口缓冲只有8位 你想要一次发送20位是不可能的,除非你模拟串行通信的时序。然后你想要合并P0,P1,P2口的数据的话,你首先定义一个long int类的变量,赋值为0,然后你开始按位来传递数值

long int a=0;
a|P0;
a<<=8;
a|P1;
a<<=8;
a|P2
这里你学习下 按位或“|” 以及 左移“<<”

例如:uchar i,j,k;//p0,p1,p2
long xt;
i=0xa0,j=0xa5,k=0x07
xt=i;
xt<<=8;
xt|=j;
xt<<=8;
xt|=k;
这时,
xt就是合成的数据了

根本不需要函数,只须一个简单的计算就行了:
你所需要的20位数=最低8位+256*中间8位+65536*高4位