![]() |
發布時間: 2020-12-30 17:07
正文摘要:使用Proteus來進行89C52與24C02的I2C通訊仿真,實現將寫入24C02的數據讀出來點亮由P1控制的LED燈; 寫數據后,應答信號SDA波形如圖;仿真圖如圖。 目前問題是在proteus里面LED燈不能正常按照寫入的數據來點亮,而 ... |
感謝分享信息,非常有幫助。 看來時鐘頻率設置需要更改以匹配硬件規格。 |
![]() { _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(); } |
求大神指點,感激不盡! |