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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > PIC單片機訪問鐵電存儲器的程序模塊

          PIC單片機訪問鐵電存儲器的程序模塊

          作者: 時間:2016-11-13 來源:網(wǎng)絡 收藏
          //此子程序用于PIC系列單片機鐵電存儲器FM24C04交換數(shù)據(jù)

          #define bitset(var,bitno) ((var)|=(1<<(bitno)))
          #define bitclr(var,bitno) ((var)&=((1<
          //定義鐵電的寫地址和讀地址
          //用高256字節(jié),則為A2 A3
          //用低256字節(jié),則為A0 A1

          #define WriteDeviceAdd 0xa2 //用高256字節(jié)
          #define ReadDeviceAdd 0xa3 //用高256字節(jié)

          #define SDA RC3
          #define SCL RC2

          /********************************************************************/
          void I2C_Start()
          {
          SDA=1;
          SCL=1;
          SDA=0;
          SCL=0;
          }

          /********************************************************************/
          void I2C_Stop()
          {
          SCL=0;
          SDA=0;
          SCL=1;
          SDA=1;
          }

          /********************************************************************/
          bit I2C_WaitAck()
          {
          uchar ErrorTime=255;
          SDA=1;
          SCL=1;
          bitset(TRISC,3);
          while(SDA)
          {
          ErrorTime--;
          if(ErrorTime==0)
          {
          bitclr(TRISC,3);
          I2C_Stop();
          return(0);
          }
          }
          bitclr(TRISC,3);
          SCL=0;
          return(1);
          }

          /********************************************************************/
          void I2C_SendNotAck()
          {
          SDA=1;
          SCL=1;
          SCL=0;
          }

          /*******************************************************************/
          void I2C_SendAck()
          {
          SDA=0;
          SCL=1;
          SCL=0;
          }

          /********************************************************************/
          void I2C_WriteByte(uchar input)
          {
          uchar i=8;
          while(i--)
          {
          SCL=0;
          if(input&0x80) SDA=1;
          else SDA=0;
          input=input<<1;
          SCL=1;
          }
          SCL=0;
          }

          /********************************************************************/
          uchar I2C_ReceiveByte()
          {
          uchar i=8,rbyte=0;
          SDA=1;
          bitset(TRISC,3);
          while(i--)
          {
          rbyte=rbyte<<1;
          SCL=1;
          if(SDA) rbyte++;
          SCL=0;
          }
          bitclr(TRISC,3);
          return(rbyte);
          }


          /********************************************************************/
          void I2C_Wr24c04(uchar *Wdata,uchar FmAdd,uchar bytes)
          {
          I2C_Start();
          I2C_WriteByte(WriteDeviceAdd);
          I2C_WaitAck();
          I2C_WriteByte(FmAdd);
          I2C_WaitAck();
          for(;bytes!=0;bytes--)
          {
          I2C_WriteByte(*Wdata);
          I2C_WaitAck();
          Wdata++;
          }
          I2C_Stop();
          }

          /********************************************************************/
          void I2C_Rd24c04(uchar *RamAdd,uchar FmAdd,uchar bytes)
          {
          I2C_Start();
          I2C_WriteByte(WriteDeviceAdd);
          I2C_WaitAck();
          I2C_WriteByte(FmAdd);
          I2C_WaitAck();
          I2C_Start();
          I2C_WriteByte(ReadDeviceAdd);
          I2C_WaitAck();
          while(bytes!=1)
          {
          *RamAdd=I2C_ReceiveByte();
          I2C_SendAck();
          RamAdd++;
          bytes--;
          }
          *RamAdd=I2C_ReceiveByte();
          I2C_SendNotAck();
          I2C_Stop();
          }


          評論


          技術專區(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); })();