乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      單片機(jī)I2C通訊代碼詳解

       岐岐feng 2018-08-26

      單片機(jī)I2C通訊代碼詳解

      I2C協(xié)議標(biāo)準(zhǔn)代碼

      1. 起始信號(hào)&停止信號(hào)

      起始信號(hào):當(dāng) SCL 線是高電平時(shí) SDA 線從高電平向低電平切換。

      停止信號(hào):當(dāng) SCL 線是高電平時(shí) SDA 線由低電平向高電平切換。

      2. 起始信號(hào)代碼

      void I2cstart() //起始信號(hào)

      {

      SDA=1;

      Delay8us();

      SCL=1;

      Delay8us();

      SDA=0;

      Delay8us();

      SCL=0;

      Delay8us();

      }

      3. 停止信號(hào)代碼

      void I2cstop() //停止信號(hào)

      {

      SDA=0;

      Delay8us();

      SCL=1;

      Delay8us();

      SDA=1;

      Delay8us();

      }

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

      unsigned char I2cSendByte(unsigned char dat) //CPU向設(shè)備發(fā)送一個(gè)字節(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è)備無(wú)應(yīng)答,返回0,并跳出此程序

      }

      }

      SCL=0;

      Delay8us();

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

      }

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

      unsigned char I2cReadByte() //CPU向設(shè)備讀取一個(gè)字節(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,寫(xiě)數(shù)據(jù)dat

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

      {

      I2cstart(); //啟動(dòng)

      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(); //開(kāi)始

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

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

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

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

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

      I2cstop(); //停止

      return num; //返回讀取值num

      }

      8.I2C寫(xiě)數(shù)據(jù)八個(gè)步驟

      第一步,發(fā)送一個(gè)起始信號(hào)。

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

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

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

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

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

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

      第八步,發(fā)送一個(gè)停止信號(hào)。

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

      第一步,發(fā)送一個(gè)起始信號(hào)。

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

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

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

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

      第六步,再次發(fā)送一個(gè)起始信號(hào)。

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

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

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

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

      第十一步,產(chǎn)生一個(gè)停止信號(hào)。

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多