//iic時序
#if 1
void iic_start()
void iic_stop(void)
void iic_send_byte(u8 txd)
iic_scl=0;
delay_ms(5); }
u8 iic_wait_ack()
} delay_ms(5);
return 0;
}u8 iic_read_byte(unsigned char ack)
if(ack)
else
return rec;
}void iic_ack(void)
//不產生ack應答
void iic_nack(void)
#endif
iic_start();
iic_send_byte(0xa0); //傳送寫命令
while(iic_wait_ack());
iic_send_byte(0x00); //addr high
while(iic_wait_ack());
iic_send_byte(0x00); //addr low
while(iic_wait_ack());
iic_send_byte(0xa8) ;
while(iic_wait_ack());
delay_ms(100);
iic_stop();
delay_ms(1000); //(must)
//write
iic_start();
iic_send_byte(0xa0); //傳送寫命令
// delay_ms(10);
while(iic_wait_ack());
iic_send_byte(0x00); //addr high
while(iic_wait_ack());
iic_send_byte(0x00); //addr low
while(iic_wait_ack());
iic_start();
iic_send_byte(0xa1); //傳送du命令
while(iic_wait_ack());
printf("\r\nstr is :%x\r\n" ,iic_read_byte(1));
iic_stop();
以上主函式實現了:
寫操作:起市時序-----發器件位址------等從機ack---------發儲存器記憶體位址-------等ack---發資料----等ack--stop 。
讀操作 :起市時序-----發器件位址------等從機ack---------發儲存器記憶體位址-------等ack-----發起市時序---發讀指令----等ack------發讀指令----讀資料(帶ack)-----stop 。
最後特別注意讀取資料暫存器的延遲,否則讀數錯誤。
IIC實現對EEPROM(24C02)的讀寫
概述 eeprom晶元型號為24c02,該晶元的總容量是256個位元組,該晶元通過iic匯流排與外部連線。實驗功能 通過key1按鍵來控制24c02的寫入,通過另外乙個按鍵key0來控制24c02的讀取。硬體電路 iic配置 初始化iic void iic init void 產生iic起始訊號 v...
IIC介面下的24C02 驅動分析
come from 本節來學習iic介面下的24c02 驅動分析,本節學完後,再來學習linux下如何使用iic操作24c02 1.i2c通訊介紹 它是由資料線sda和時鐘scl構成的序列匯流排,可傳送和接收資料,是乙個多主機的半雙工通訊方式 每個掛接在匯流排上的器件都有個唯一的位址 位速在標準模式...
基於51微控制器IIC通訊的AT24C02學習筆記
最近在學習幾種序列通訊協議,感覺收穫很多,這篇文章是學習iic匯流排協議的第一篇文章,以後還會再寫一篇關於pcf8591 iic通訊的adda轉換晶元的文章.iic 即inter integrated circuit 積體電路匯流排 這種匯流排型別是由飛利浦半導體公司在八十年代初設計出來的一種簡單 ...