if(input & 0x80)在I2C中是怎么样一步步写入数据的?

input & 0x80判断真假过程

我们先放一段if(input & 0x80)在I2C写字节的代码

/************************************************
*函数名称 : void I2C_WriteByte
*功    能 : I2C写一个字节
*参    数 : dat:传输数据
*返 回 值 : 无
*************************************************/
void I2C_WriteByte(uint8_t  input)
{
	uint8_t  i;
	SDA_OUT();
	for(i=0; i<8; i++)
	{
		IIC_SCL = 0;
		delay_ms(5);

		if(input & 0x80)
		{
			IIC_SDA = 1;
			//delaymm(10);
		}
		else
		{
			IIC_SDA = 0;
			//delaymm(10);
		}

		IIC_SCL = 1;
		delay_ms(5);

		input = (input<<1);
	}

	IIC_SCL = 0;
	delay_us(4);

	SDA_IN();
	delay_us(4);
}	

调用这个函数需要导入一个uint8_t input参数
我们假设我们导入的参数是0x71
下面记录一下I2C_WriteByte写入数据的过程
在这里插入图片描述
最主要的就是上面的过程
在代码中的if(input & 0x80)
也有些代码写的是if(input & 0x80 == 0x80)
我在上面的代码I2C_WriteByte测试过,实际上他们的效果都是一样的
都是判断最高位是不是为1

到这里就结束了,如果有错误或者有更好的补充可以在评论留言
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值