51单片机模拟iic时发现用到psw寄存器的CY位,有些不懂请教一下
时间:10-02
整理:3721RD
点击:
这是模拟应答的程序:
bit I2C_RecvACK()//处理器检测到SDA拉低就能知道外接IIC设备数据已经收到
{
SCL = 1; //拉高时钟线
Delay5us(); //延时
CY = SDA; //读应答信号
SCL = 0; //拉低时钟线
Delay5us(); //延时
return CY;
}我查了下资料,说:CY表示了运算是否有进位(或借位)。如果操作结果在最高位有进位(加法)或者借位(减法),则该位为1,否则为0。我想问,
1.怎么才算借位?。
2.SDA只有1或0,那他最高位就只有1位,怎么都进不上去啊,那CY不就一直是0吗?。
3.能不能直接设个变量,如 uchar flag;flag=SDA;return flag;这样可以不?
bit I2C_RecvACK()//处理器检测到SDA拉低就能知道外接IIC设备数据已经收到
{
SCL = 1; //拉高时钟线
Delay5us(); //延时
CY = SDA; //读应答信号
SCL = 0; //拉低时钟线
Delay5us(); //延时
return CY;
}我查了下资料,说:CY表示了运算是否有进位(或借位)。如果操作结果在最高位有进位(加法)或者借位(减法),则该位为1,否则为0。我想问,
1.怎么才算借位?。
2.SDA只有1或0,那他最高位就只有1位,怎么都进不上去啊,那CY不就一直是0吗?。
3.能不能直接设个变量,如 uchar flag;flag=SDA;return flag;这样可以不?
你先看看iic的原理,他是位操作的,你在往下看你的代码就知道了,还有你弄一个uchar的变量叫他接收位变量怎么理解?
就是把SDA引脚1或0赋值给这个变量,我不知道这样可不可以,我想着可以判断引脚是0还是1,那应该也可以把引脚是0或1赋值给一个变量的吧...
是的,但是赋值给位变量