/* 51系列單片機在使用時,有時需要模擬I2C匯流排, */ /* 這裡舉出一個實例(讀寫串列EEPROM晶元at2402) */ /************************************************************************/ /* Name:AT24C02存儲器的讀寫程序,用到I2C匯流排,含相對獨立的I2C匯流排讀寫函數 */ /* Language: C51單片機編程語言 */ */ /* Date: 2003年5月21日,5月22日,5月29日 */ /* Version: 1.1.1 */ /* Others: None */ /************************************************************************/ #include<string.h> #include<reg52.h> #include<intrins.h> #define DELAY_TIME 60 /*經實驗,不要小於50!否則可能造成時序混亂*/ #define TRUE 1 #define FALSE 0 sbit SCL=P1^7;/*假設由P1.7和P1.6控制*/ sbit SDA=P1^6; /********** Function Definition 函數定義 ************/ void DELAY(unsigned int t) /*延時函數*/ { while(t!=0) t--; } void I2C_Start(void) { /*啟動I2C匯流排的函數,當SCL為高電平時使SDA產生一個負跳變*/ SDA=1; SCL=1; DELAY(DELAY_TIME); SDA=0; DELAY(DELAY_TIME); SCL=0; DELAY(DELAY_TIME); } void I2C_Stop(void) { /*終止I2C匯流排,當SCL為高電平時使SDA產生一個正跳變*/ SDA=0; SCL=1; DELAY(DELAY_TIME); SDA=1; DELAY(DELAY_TIME); |