单片机液晶串行接受数据的程序

来源:百度知道 编辑:UC知道 时间:2024/06/01 07:10:13
串行接收一字节数据
unsigned char ReceieveByte(void)
{
unsigned char i,d1,d2;
for(i=0;i<8;i++)
{
E_CLK=0;delay(100);
E_CLK=1;
if(RW_SID)d1++;
d1=d1<<1;
}
for(i=0;i<8;i++)
{
E_CLK=0;delay(100);
E_CLK=1;
if(RW_SID)d2++;
d2=d2<<1;
}
return (d1&0xF0+d2&0x0F);
}
请问程序中的,if(RW_SID)d1++;
d1=d1<<1;
在程序里面作何解释?

这两句就是在接收数据啊,
过程是当RW_SID为高时,d1的最低位置高,然后左移进入下一位的接收
当RW_SID为低时,d1的最低位置低,然后左移进入下一位的接收,由于d1的最低位本来就是低,因此直接左移

d1++就是将d1的最低位由0变为1,而其他7位不变

还是不懂的话,那麻烦你算下,开始d1=0,假设8次采集的RW_SID依次为11011011,你算下最后d1里是不是11011011

串行接受数据时,数据是一位一位进入的,单片机要将各位数据,依次排在一个字节中。

d1(或d2)是一个字节,其中有 8 位存储空间;

语句 if(RW_SID)d1++;
是说:如果收到串行数据为 1,就在 d1 的末位写个 1,
反之则不写,d1 的末位就是 0,
语句 d1 = d1 << 1;
是说:写完 1(或0)之后,8 位数一齐向左移动一位;右边填入 0,准备继续存放接收数据。

if(RW_SID)d1++; //如果RW_SID为真,则d1增加1;即上次的移位时低位补的0改成1;
d1=d1<<1;//d1中的各位数据左移一位,最低位补0.