|
发表于 2021-9-19 11:16:39
|
显示全部楼层
本帖最后由 jhq999 于 2021-9-19 12:04 编辑
我猜关键控制的地方在 i2c_Delay();函数里,我理解:
- /*
- *********************************************************************************************************
- * 函 数 名: i2c_SendByte
- * 功能说明: CPU向I2C总线设备发送8bit数据
- * 形 参: _ucByte : 等待发送的字节
- * 返 回 值: 无
- *********************************************************************************************************
- */
- void i2c_SendByte(unsigned char _ucByte)
- {
- unsigned char i; //其实信号开始后SCL是被拉低的
- for(i = 0; i < 8; i++)
- {
- if(_ucByte & 0x80)
- SDA = 1;
- else
- SDA = 0;
- SCL = 1;
- i2c_Delay();/////////////////////////////////////第一次SCL = 1,i2c_Delay()函数干了什么不知道继续运行,可能进行初始化;第四次再次初始化。。。。。。。。。。
- SCL = 0; //SCL等于0的时候写数据
- if(i == 7) //最后一次时释放总线
- {
- SDA = 1;
- }
- _ucByte<<=1; //左移一位
- i2c_Delay();///////////////////////////////////////第二次 SCL = 0;中断等,i2c_Delay()函数启动 i2c_ReadByte函数;第三次i2c_ReadByte里i2c_Delay()给的信号继续运行,第五次解除i2c_ReadByte的中断。。。。。。。
- }
- }
- /*
- *********************************************************************************************************
- * 函 数 名: i2c_ReadByte
- * 功能说明: CPU从I2C总线设备读取8bit数据
- * 形 参: 无
- * 返 回 值: 读到的数据
- *********************************************************************************************************
- */
- unsigned char i2c_ReadByte(void)
- {
- unsigned char i;
- unsigned char value = 0;
- for(i = 0; i < 8; i++)
- {
- value<<=1;
- SCL = 1; //稳定状态的时候读数据
- if(SDA == 1)
- value++;
- SCL = 0; //允许数据变化
- i2c_Delay();///////////////////////////第三次,已经读取了第一位,中断等,SCL = 0;i2c_SendByte里i2c_Delay();中断结束继续运行。。。。。。。
- }
- return value;
- }
- ————————————————
- 版权声明:本文为CSDN博主「本_末」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
- 原文链接:https://blog.csdn.net/hu_junhua/article/details/79269891
复制代码
|
|