往at24c02裡寫入資料,再讀出來,賦給p1口,點亮led燈
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit sda = p2^0;
sbit scl = p2^1;
void delay_5us()//5us延時
void delay(uint z) //1ms延時
void i2c_init() //初始化i2c
void i2c_start() //起始訊號
void i2c_stop() //終止訊號
void i2c_send(uchar a) //傳送乙個位元組
else
scl = 1; //拉高scl,讓從機讀走資料
_nop_();
a = a << 1;
}scl = 0; //拉低scl,防止scl高電平時,sda波動觸發其他命令
_nop_();
sda = 1; //釋放sda匯流排
_nop_();
}bit i2c_ack() // 從機應答
else
}uchar i2c_read() //讀取乙個位元組
else
_nop_();
scl = 0 ;
_nop_();
if(i < 7) //接收第八位後,不用再左移
}return (dat);
}void master_ack(bit i) //主機應答
else
_nop_();
scl = 1;//拉高時鐘匯流排 讓從機從sda線上讀走主機的應答訊號
delay_5us();
scl = 0;
_nop_();
sda = 1;
_nop_();
}int main()
I2C驅動(2) 讀寫eeprom
include include include include include include include include include static unsigned short ignore static unsigned short normal addr 位址值是7位 改為0x60的話...
I2C外掛程式eeprom的讀寫
i2c簡介 i2c匯流排通訊是一種通訊協,用於連線微控制器及其外圍裝置,由兩根線組成,時鐘線sda和資料線scl。如圖所示,外掛程式裝置接到相應的線上就可以被i2c識別到,另外關於scl,sda以怎麼樣的波形去傳送訊息,以及裝置的應答波紋就不在詳細介紹了,這個對於不是直接寫驅動的開發人員來說沒有必要...
I2C與EEPROM通訊 上電時SDA為0
在自己寫stm32模擬i2c中,寫到向eeprom進行page write,然後random read讀出所寫內容.發現復位6次中,5次會讀寫失敗,1次會成功.失敗的原因是 傳送起始訊號前檢測到sda被拉低,認為匯流排被占用.於是我認為有2種情況 第一種是eeprom自己將sda拉低 第二種是電路接...