感谢分享信息,非常有帮助。 看来时钟频率设置需要更改以匹配硬件规格。 |
![]() { _nop_();_nop_();_nop_();_nop_();_nop_(); } void IIC_Init() { P2M0&=0x3f; P2M1&=0x3f; SDA_GPIO=1; SCL_GPIO=1; } void IIC_Start()//IIC启动信号 { SDA_GPIO=1; SCL_GPIO=1; IIC_Delay(); SDA_GPIO=0; IIC_Delay(); SCL_GPIO=0; IIC_Delay(); } void IIC_Stop()//IIC停止信号 { SDA_GPIO=0; SCL_GPIO=1; SDA_GPIO=1; IIC_Delay(); } void IIC_Write_Byte(u8 IIC_Byte)//向总线发送一个字节 { u8 i; SCL_GPIO=0; SDA_GPIO=1; for(i=0;i<8;i++) { SDA_GPIO=(bit)(IIC_Byte&0x80); IIC_Byte<<=1; IIC_Delay(); SCL_GPIO=1; IIC_Delay(); SCL_GPIO=0; IIC_Delay(); } } u8 IIC_Read_Byte() { u8 i,Value; SCL_GPIO=0; SDA_GPIO=1; for(i=0;i<8;i++) { Value=(Value<<1)|SDA_GPIO; IIC_Delay(); SCL_GPIO=1; IIC_Delay(); SCL_GPIO=0; IIC_Delay(); } return Value; } u8 IIC_Read_Ack()//单片机检测IIC从机发来的应答信号 { u8 ack=1,i=0; SCL_GPIO=1; IIC_Delay(); while((ack)&&(i<5)) { ack=SDA_GPIO; i++; } SCL_GPIO=0; return ack; } void IIC_Write_Ack(bit ack)//单片机发送应答给从机 { SDA_GPIO=ack; IIC_Delay(); SCL_GPIO=1; IIC_Delay(); SCL_GPIO=0; IIC_Delay(); SDA_GPIO=1; IIC_Delay(); } |
求大神指点,感激不尽! |