1. 先拉低SDA (因为SDA在WaitACK最后状态是高) 2. 拉高SCL (无论Start, WriteBit, WaitAck等SCL的最后状态都是低) tick 3. 拉高SDA tick voidIIC_Stop(void){ SDA_L; SCL_H; IIC_Tick(); SDA_H; IIC_Tick();// PS: 消耗一个SCL周期}// 总结: Start消耗1.5个SCL周期// n个data消耗 n * (...
return 用法求助bit I2CWaitAck(void) //返回为:1=有ACK,0=无ACK{ SCL=0; SDA=1; //设置SDA为输入 I2CWait(); SCL=1; I2CWait(); while(SDA) { SCL=0; return false; } SCL=0; return true;}以上是一个IIC等待应答的程序,ture 1.不太明白里面return的用法,请高手讲一下,谢谢! 答案 I2CS...
在I2C等待应答信号代码中u8 IIC_Wait_Ack(void){ u8 ucErrTime=0; SDA_IN(); //SDA设置为输入 IIC_SDA=1;delay_us(1); & ...
void IIC_Start(void); void IIC_Stop(void); void IIC_Send_Byte(uint8_t d); uint8_t IIC_Wait_Ack(void); uint8_t IIC_Read_Byte(void); void IIC_Ack(uint8_t ack); #endif //IIC_H 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. // // Created ...
unsigned char i2c_wait_ack(void); void i2c_ack(void); void i2c_nack(void); #endif include/si7006.h #ifndef __SI7006_H__ #define __SI7006_H__ #include "iic.h" #define SI7006_SLAVE 0x40 void si7006_init(void); unsigned short si7006_read_hum_data(unsigned char slave_addr, unsi...
uint8_t i2c_wait_ack(void) { uint8_t ret; SDA_H(); SCL_H();//确保 master 让出总线; i2c_send_byte 最后1bit会释放总线,这2行也可考虑删除.udelay(5);//给足 slave 反应时间, 等待 ackif(SDA_R()) ret=1;elseret=0;//ACKSCL_L();//1.时序; 2.通知 slave,释放 SDA; 3.master ...
int IIC_Wait_Ack(void); //IIC等待ACK信号 void IIC_Ack(void); //IIC发送ACK信号 void IIC_NAck(void); //IIC不发送ACK信号 void IIC_Write_One_Byte(u8 daddr,u8 addr,u8 data); //将一个字节写入指定设备,指定寄存器 u8 IIC_Read_One_Byte(u8 daddr,u8 addr); //读取指定设备,指定寄存器中...
return 用法求助bit I2CWaitAck(void) //返回为:1=有ACK,0=无ACK{ SCL=0; SDA=1; //设置SDA为输入 I2CWait(); SCL=1; I2CWait(); while(SDA) { SCL=0; return false; } SCL=0; return true;}以上是一个IIC等待应答的程序,ture 1.不太明白里面return的用法,请高手讲一下,谢谢! 扫码下载作业...
#define I2C_SDA_READ() (GPIOB->IDR & GPIO_Pin_7)// 读取SDA电平状态/*** @brief CPU产生一个时钟,读取应答信号ACK* @param 无* @retval 返回0表示应答信号,返回1表示非应答信号*/uint8_ti2c_WaitAck(void){uint8_tre;I2C_SDA_1();// CPU释放SDA总线Delay();I2C_SCL_1();// CPU拉高SCL电...