<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > I2C總線協(xié)議(AT24c02)程序

          I2C總線協(xié)議(AT24c02)程序

          作者: 時間:2016-12-01 來源:網(wǎng)絡 收藏

          下面是代碼

          本文引用地址:http://www.ex-cimer.com/article/201612/324254.htm#include
          #define uchar unsigned char
          #define addr_x 0xae // 寫
          #define addr_d 0xaf// 讀
          sbit sda = P2^1; //數(shù)據(jù)管腳
          sbit scl = P2^0; //時鐘管腳
          bit ack;
          void DelayUs2x(unsigned char t) //延時1
          {
          while(--t);
          }
          void DelayMs(unsigned char t) //延時2
          {
          while(t--)
          {
          //大致延時1mS
          DelayUs2x(245);
          DelayUs2x(245);
          }
          }
          void delay() //延時大于4μs
          {;;}
          void i2_qs() //起始信號
          {
          sda = 1; //拉高數(shù)據(jù)
          scl = 1; //拉高時鐘
          delay(); //延時大于 4μs
          sda = 0; //拉低數(shù)據(jù)產(chǎn)生起始信號(下降沿)
          delay(); //延時大于 4μs
          scl = 0; //拉低時鐘
          delay(); //延時大于 4μs
          }
          void i2_tz() //停止信號
          {
          sda = 0; //拉低數(shù)據(jù)
          scl = 1; //拉高時鐘
          delay(); //延時大于 4μs
          sda = 1; //拉高時鐘產(chǎn)生結束信號(上升沿)
          delay(); //延時大于 4μs
          }
          void i2_ack(bit _ack) //入口產(chǎn)生 0 ack 1 nak
          {
          sda = _ack; //ack或者nak
          scl = 1; //拉高時鐘
          delay(); //延時大于 4μs
          scl = 0; //拉低時鐘
          delay(); //延時大于 4μs
          }
          void i2_fs(uchar Data) //發(fā)送8位數(shù)據(jù)
          {
          uchar i;
          for(i=0;i<8;i++) //8位計數(shù)
          {
          Data <<= 1; //把最高位移送到進制標志位中(CY)
          sda = CY; //把進制位中的數(shù)據(jù)賦值給數(shù)據(jù)線
          scl = 1; //拉高時鐘
          delay(); //延時大于 4μs
          scl = 0; //拉低時鐘
          //這里
          }
          //下面代碼是接收ACK的代碼
          delay();//延時大于 4μs
          sda = 1; //拉高數(shù)據(jù)準備接收ACK
          scl = 1; //拉高時鐘產(chǎn)生穩(wěn)定的有效的數(shù)據(jù)(相對的)
          if(sda==1) //確認接收的是ACK還是NAK
          ack = 0;//ack
          else
          ack = 1;//nak
          scl = 0; //拉低時鐘
          delay(); //延時大于 4us
          }
          uchar i2_js() //接收8位數(shù)據(jù)
          {
          uchar i,Data = 0;
          sda = 1; //使能內部上拉,準備讀取數(shù)據(jù)
          for(i=0;i<8;i++) //8位計數(shù)器
          {
          Data <<= 1; //移出數(shù)據(jù)的最高位
          scl = 1; //拉高時鐘
          delay(); //延時大于 4us
          Data |= sda;//接收數(shù)據(jù)
          scl = 0; //拉低時鐘
          delay(); //延時大于 4us
          }
          return Data;
          }
          void i2_sj_x(uchar addr,uchar Data) //往設備內寫入數(shù)據(jù)(參數(shù) 1、寄存器地址 2、寫入的數(shù)據(jù))
          {
          i2_qs(); //起始信號
          i2_fs(addr_x); //設備地址+寫信號
          i2_fs(addr); //寄存器內部地址
          i2_fs(Data); //寫入設備的數(shù)據(jù)
          i2_tz(); //停止信號
          }
          uchar i2_sj_d(uchar addr) //讀取數(shù)據(jù)(參數(shù) 寄存器地址)
          {
          uchar Data;
          i2_qs(); //起始信號
          i2_fs(addr_x); //設備地址+寫信號
          i2_fs(addr); //寄存器內部地址
          i2_qs(); //起始信號
          i2_fs(addr_d); //設備地址+讀信號
          Data = i2_js(); //讀取數(shù)據(jù)
          i2_ack(0); //ACK應答
          i2_tz(); //停止信號
          return Data; //返回讀取的數(shù)據(jù)
          }
          void main(void)
          {
          uchar dat;
          i2_sj_x(3,0x0f); //數(shù)據(jù)寫入24c02
          DelayMs(50);
          dat = i2_sj_d(3); //從24c02中讀取數(shù)據(jù)
          P1 = dat; //使用8個LED顯示讀出的數(shù)據(jù)
          while(1)
          {
          ;
          }
          }
          以上代碼只是簡單的實現(xiàn)I2C總線的讀寫

          上一頁 1 2 下一頁

          關鍵詞: I2C總線協(xié)議AT24c0

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();