想寫個在給位址後能一直讀或寫的程式,因為郭天祥的教程裡只有單個位元組讀寫示例。可在網上找了好久沒找到合適的示例,只好自己看著手冊,慢慢摸索。皇天不負苦心人呀,終於出來了。
寫完程式的同時也學會了怎樣看手冊的時序圖。
還有此**只實現了同時寫讀兩個位元組,至於在未達到晶元頁面通訊量的最大值的範圍內都可以用for迴圈實現。下面就是**:
#include
#include
#define uchar unsigned char
sbit sda = p2^0;
sbit scl = p2^1;
delay()
init()
// sda = 1;
// delay();
// scl = 1;
// delay();
start()
sda = 1;
// delay();
scl = 1;
delay();
sda = 0;
delay();
stop()
sda = 0;
// delay();
scl = 1;
delay();
sda = 1;
delay();
respons_i2c()
uchar i;
scl = 1;
delay();
while((sda == 1) && (i < 250)) i++;
scl = 0;
delay();
void write_byte_i2c(uchar date)
uchar i;
for(i=0;i<8;i++)
date = date<<1;
scl = 0;
delay();
sda = cy;
delay();
scl = 1;
delay();
scl = 0;
delay();
sda = 1; //釋放匯流排以收應答訊號
delay();
void write_i2c(uchar maddr,uchar addr,uchar length,uchar date)
uchar i;
start();
write_byte_i2c(maddr);
respons_i2c();
write_byte_i2c(addr);
respons_i2c();
for(i = 0; iwrite_byte_i2c(date[i]);
respons_i2c();
stop();
void delay1(uchar x)
uchar a,b;
for(a=x;a>0;a--)
for(b=200;b>0;b--);
uchar read_byte_i2c()
uchar i,date;
scl = 0;
delay();
sda = 1; //釋放匯流排
delay();
for(i = 0; i<8; i++)
scl = 1;
delay();
date = (date<<1)|sda;
scl = 0;
delay();
return date;
uchar *read_i2c(uchar maddr,uchar addr,uchar length)
uchar i =0;
uchar date[2];
start();
write_byte_i2c(maddr&0xfe);
respons_i2c();
write_byte_i2c(addr);
respons_i2c();
start();
write_byte_i2c(maddr);
respons_i2c();
date[0] = read_byte_i2c();
// for(i = 1; iscl = 0;
delay();
sda = 0;
delay();
scl = 1;
delay();
date[1] = read_byte_i2c();
stop();
return date;
main()
uchar code a=;
uchar b[2];
init();
write_i2c(0xa0,0x0a,2,a);
delay1(100);
strcpy(b, read_i2c(0xa1,0x0a,1));
while(1)
p1 = 0xff;
p1 = b[1];
delay1(255);
p1 = 0xff;
p1 = b[0];
delay1(255);
【注釋】此**在tx-1c中通過
i2c連續讀寫間隔 I2C匯流排協議分析
i2c匯流排是由philips公司開發的一種簡單 雙向二線制同步序列匯流排。它只需要兩根線即可在連線於匯流排上的裝置之間通訊。i2c的兩根線sda 序列資料線 和scl 序列時鐘線 都是雙向i o線,介面電路為開漏輸出,需通過上拉電阻接電源vcc,當匯流排空閒時,兩根線都是高電平。常見的硬體結構圖 ...
SCCB 匯流排和I2C匯流排區別
sccb seriai camera controlbus 是簡化的i2c協議,sio l是序列時鐘輸入線,sio o是序列雙向資料線,分別相當於i2c協議的scl和sda。sccb的匯流排時序與i2c基本相同,它的響應訊號ack被稱為乙個傳輸單元的第9位,分為don t care和na。don t...
i2c匯流排時序
一心想踏入linux device driver的世界,想著i2c匯流排相對於usb等其他匯流排較為簡單,就以i2c作為切入點,希望可以逐步理解ldd的設計思想,並能理解其裝置模型的概念。在此對近期於i2c匯流排及驅動原始碼的理解做備忘,以免徒勞。平台友善之臂s70 tiny6410 cpusams...