小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

單片機I2C通訊代碼詳解

 岐岐feng 2018-08-26

單片機I2C通訊代碼詳解

I2C協(xié)議標準代碼

1. 起始信號&停止信號

起始信號:當 SCL 線是高電平時 SDA 線從高電平向低電平切換。

停止信號:當 SCL 線是高電平時 SDA 線由低電平向高電平切換。

2. 起始信號代碼

void I2cstart() //起始信號

{

SDA=1;

Delay8us();

SCL=1;

Delay8us();

SDA=0;

Delay8us();

SCL=0;

Delay8us();

}

3. 停止信號代碼

void I2cstop() //停止信號

{

SDA=0;

Delay8us();

SCL=1;

Delay8us();

SDA=1;

Delay8us();

}

4.發(fā)送一個字節(jié)

unsigned char I2cSendByte(unsigned char dat) //CPU向設(shè)備發(fā)送一個字節(jié)

{

unsigned char a=0,b=0;

for(a=0;a<8;a++)

{

SDA=dat>>7;

dat=dat<<1;

Delay8us();

SCL=1;

Delay8us();

SCL=0;

Delay8us();

}

SDA=1;

Delay8us();

SCL=1;

while(SDA) //等待設(shè)備應(yīng)答

{

b++;

if(b>200)

{

SCL=0;

Delay8us();

return 0; //設(shè)備無應(yīng)答,返回0,并跳出此程序

}

}

SCL=0;

Delay8us();

return 1; //設(shè)備有應(yīng)答,返回1,并跳出此程序

}

5.讀取一個字節(jié)

unsigned char I2cReadByte() //CPU向設(shè)備讀取一個字節(jié)

{

unsigned char a=0,dat=0;

SDA=1;

Delay8us();

for(a=0;a<8;a++)

{

SCL=1;

Delay8us();

dat<<=1;

dat|=SDA;

Delay8us();

SCL=0;

Delay8us();

}

return dat; //返回dat,并跳出此程序

}

6. 向24C02地址addr,寫數(shù)據(jù)dat

void At24c02Write(unsigned char addr,unsigned char dat) //向24C02地址addr,寫數(shù)據(jù)dat

{

I2cstart(); //啟動

I2cSendByte(0xa0); //發(fā)送24C02設(shè)備地址

I2cSendByte(addr); //發(fā)送24C02寄存器地址

I2cSendByte(dat); //發(fā)送數(shù)據(jù)

I2cstop(); //停止

}

7. 讀取24C02寄存器addr中的數(shù)據(jù)

unsigned char At24c02Read(unsigned char addr) //讀取24C02寄存器addr中的數(shù)據(jù)

{

unsigned char num;

I2cstart(); //開始

I2cSendByte(0xa0); //發(fā)送24C02設(shè)備地址-寫

I2cSendByte(addr); //發(fā)送24C02寄存器地址

I2cstart(); //改變傳輸方式,重新開始

I2cSendByte(0xa1); //發(fā)送24C02設(shè)備地址-讀

num=I2cReadByte(); //接收數(shù)據(jù)并保存至num

I2cstop(); //停止

return num; //返回讀取值num

}

8.I2C寫數(shù)據(jù)八個步驟

第一步,發(fā)送一個起始信號。

第二步,發(fā)送7bit從機地址,即24C02的地址。此處需要注意,發(fā)送數(shù)據(jù)時,無法發(fā)送7bit數(shù)據(jù),此處發(fā)送了7bit地址+1bit讀寫選擇位,即發(fā)送7bit+r/w。最低位為1表示讀,為0表示寫。

第三步,產(chǎn)生一個ACK應(yīng)答信號,此應(yīng)答信號為從機器件產(chǎn)生的應(yīng)答。

第四步,發(fā)送寄存器地址,8bit數(shù)據(jù)。

第五步,產(chǎn)生一個ACK應(yīng)答信號,此應(yīng)答信號為從機器件產(chǎn)生的應(yīng)答。

第六步,發(fā)送一個數(shù)據(jù),8bit數(shù)據(jù)。

第七步,產(chǎn)生一個ACK應(yīng)答信號,此應(yīng)答信號為從機器件產(chǎn)生的應(yīng)答信號。

第八步,發(fā)送一個停止信號。

9. I2C讀數(shù)據(jù)十一個步驟

第一步,發(fā)送一個起始信號。

第二步,發(fā)送7bit從機地址,即24C02的地址。此處需要注意,發(fā)送數(shù)據(jù)時,無法發(fā)送7bit數(shù)據(jù),此處發(fā)送了7bit地址+1bit讀寫選擇位,即發(fā)送7bit+r/w。最低位為1表示讀,為0表示寫。

第三步,產(chǎn)生一個ACK應(yīng)答信號,此應(yīng)答信號為從機器件產(chǎn)生的應(yīng)答。

第四步,發(fā)送寄存器地址。

第五步,產(chǎn)生一個ACK應(yīng)答信號,此應(yīng)答信號為從機器件產(chǎn)生的應(yīng)答。

第六步,再次發(fā)送一個起始信號。

第七步,發(fā)送7bit從機地址,即24C02的地址。此處需要注意,發(fā)送數(shù)據(jù)時,無法發(fā)送7bit數(shù)據(jù),此處發(fā)送了7bit地址+1bit讀寫選擇位,即發(fā)送7bit+r/w。最低位為1表示讀,為0表示寫。

第八步,產(chǎn)生一個ACK應(yīng)答信號,此應(yīng)答信號為從機器件產(chǎn)生的應(yīng)答。

第九步,讀取一個字節(jié)(8bit)的數(shù)據(jù)。

第十步,產(chǎn)生一個ACK應(yīng)答信號,此應(yīng)答信號為CPU產(chǎn)生。

第十一步,產(chǎn)生一個停止信號。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多