单片机AD(TLC549)转换for(i=0;i<8;i )if(AD_DAT)value |= (0x80)>>i 怎么理解?!
1个回答
展开全部
value 丨=0x80》i
即 value=value丨(0x80》i)
"或"操作可以将相应位置1(其余位不变)
AD模块串行输出,每个脉冲输出一位二进制数,高位在前
Value的各位原来均为0
例如第一次输出时i=0
如果 ADDAT是1,0x80最高位是1(二进制为1000 0000),右移0位仍然是0x80,Value与它"或"运算后最高位变为1(其它位不变),如果ADDAT是0就不用管它,Value的最高位仍然保特为0
第二次输出时 i=1
如果ADDAT是1,0x80右移1位变成二进制0100 0000,Value与它"或"运算后,次高位被置1,同样如果ADDAT是0还不用管它,value的次高位也保持为0
依次第3个脉冲至第8个脉冲,ADDAT端口上输出的8位二进制数就保存在Value这个变量中了
如果AD输出低位在前的话,可以这样写
value丨=0x01巜i
普通IO引脚模拟串口进行数据的接收和发送都是这个原理
即 value=value丨(0x80》i)
"或"操作可以将相应位置1(其余位不变)
AD模块串行输出,每个脉冲输出一位二进制数,高位在前
Value的各位原来均为0
例如第一次输出时i=0
如果 ADDAT是1,0x80最高位是1(二进制为1000 0000),右移0位仍然是0x80,Value与它"或"运算后最高位变为1(其它位不变),如果ADDAT是0就不用管它,Value的最高位仍然保特为0
第二次输出时 i=1
如果ADDAT是1,0x80右移1位变成二进制0100 0000,Value与它"或"运算后,次高位被置1,同样如果ADDAT是0还不用管它,value的次高位也保持为0
依次第3个脉冲至第8个脉冲,ADDAT端口上输出的8位二进制数就保存在Value这个变量中了
如果AD输出低位在前的话,可以这样写
value丨=0x01巜i
普通IO引脚模拟串口进行数据的接收和发送都是这个原理
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询