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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STC12C5A60S2控制AT24C04 C程序

          STC12C5A60S2控制AT24C04 C程序

          作者: 時(shí)間:2013-05-11 來源:網(wǎng)絡(luò) 收藏
          /**************************************
          主芯片:(1T)
          工作頻率:12.000MHz
          **************************************/ #include"REG51.H"
          #include"INTRINS.H"
          typedefunsignedcharBYTE;
          typedefunsignedshortWORD; sbitSCL=P3^4;//的時(shí)鐘
          sbitSDA=P3^5;//的數(shù)據(jù) BYTEBUF[16];//數(shù)據(jù)緩存區(qū) BYTEcodeTESTDATA[]=
          {
          0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,
          0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF
          }; voidDelay5us();
          voidDelay5ms();
          void_Start();
          voidAT24C04_Stop();
          voidAT24C04_SenDACK(bitack);
          bitAT24C04_RecvACK();
          voidAT24C04_SendByte(BYTEdat);
          BYTEAT24C04_RecvByte();
          voidAT24C04_ReadPage();
          voidAT24C04_WritePage(); voidmain()
          {
          AT24C04_WritePage();
          Delay5ms();
          AT24C04_ReadPage(); while(1); } /**************************************
          向AT24C04寫1頁(16字節(jié))數(shù)據(jù)
          將TESTDATA開始的16個(gè)測試數(shù)據(jù)寫如設(shè)備的00~0F地址中
          **************************************/
          voidAT24C04_WritePage()
          {
          BYTEi; AT24C04_Start();//起始信號
          AT24C04_SendByte(0xa0);//發(fā)送設(shè)備地址+寫信號
          AT24C04_SendByte(0x00);//發(fā)送存儲(chǔ)單元地址
          for(i=0;i16;i++)
          {
          AT24C04_SendByte(TESTDATA[i]);
          }
          AT24C04_Stop();//停止信號
          } /**************************************
          從AT24C04讀取1頁(16字節(jié))數(shù)據(jù)
          將設(shè)備的00~0F地址中的數(shù)據(jù)讀出存放在DATA區(qū)的BUF中
          **************************************/
          voidAT24C04_ReadPage()
          {
          BYTEi; AT24C04_Start();//起始信號
          AT24C04_SendByte(0xa0);//發(fā)送設(shè)備地址+寫信號
          AT24C04_SendByte(0x00);//發(fā)送存儲(chǔ)單元地址
          AT24C04_Start();//起始信號
          AT24C04_SendByte(0xa1);//發(fā)送設(shè)備地址+讀信號
          for(i=0;i16;i++)
          {
          BUF[i]=AT24C04_RecvByte();
          if(i==15)
          {
          AT24C04_SendACK(1);//最后一個(gè)數(shù)據(jù)需要會(huì)NAK
          }
          else
          {
          AT24C04_SendACK(0);//回應(yīng)ACK
          }
          }
          AT24C04_Stop();//停止信號
          } /**************************************
          延時(shí)5微秒(@12M)
          不同的工作環(huán)境,需要調(diào)整此函數(shù)
          此延時(shí)函數(shù)是使用1T的指令周期進(jìn)行計(jì)算,與傳統(tǒng)的12T的MCU不同
          **************************************/
          voidDelay5us()
          {
          BYTEn=4; while(n--)
          {
          _nop_();
          _nop_();
          }
          } /**************************************
          延時(shí)5毫秒(@12M)
          不同的工作環(huán)境,需要調(diào)整此函數(shù)
          此延時(shí)函數(shù)是使用1T的指令周期進(jìn)行計(jì)算,與傳統(tǒng)的12T的MCU不同
          **************************************/
          voidDelay5ms()
          {
          WORDn=2500; while(n--)
          {
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          }
          } /**************************************
          起始信號
          **************************************/
          voidAT24C04_Start()
          {
          SDA=1;//拉高數(shù)據(jù)線
          SCL=1;//拉高時(shí)鐘線
          Delay5us();//延時(shí)
          SDA=0;//產(chǎn)生下降沿
          Delay5us();//延時(shí)
          SCL=0;//拉低時(shí)鐘線
          } /**************************************
          停止信號
          **************************************/
          voidAT24C04_Stop()
          {
          SDA=0;//拉低數(shù)據(jù)線
          SCL=1;//拉高時(shí)鐘線
          Delay5us();//延時(shí)
          SDA=1;//產(chǎn)生上升沿
          Delay5us();//延時(shí)
          } /**************************************
          發(fā)送應(yīng)答信號
          入口參數(shù):ack(0:ACK1:NAK)
          **************************************/
          voidAT24C04_SendACK(bitack)
          {
          SDA=ack;//寫應(yīng)答信號
          SCL=1;//拉高時(shí)鐘線
          Delay5us();//延時(shí)
          SCL=0;//拉低時(shí)鐘線
          Delay5us();//延時(shí)
          } /**************************************
          接收應(yīng)答信號
          **************************************/
          bitAT24C04_RecvACK()
          {
          SCL=1;//拉高時(shí)鐘線
          Delay5us();//延時(shí)
          CY=SDA;//讀應(yīng)答信號
          SCL=0;//拉低時(shí)鐘線
          Delay5us();//延時(shí) returnCY;
          } /**************************************
          向IIC總線發(fā)送一個(gè)字節(jié)數(shù)據(jù)
          **************************************/
          voidAT24C04_SendByte(BYTEdat)
          {
          BYTEi; for(i=0;i8;i++)//8位計(jì)數(shù)器
          {
          dat=1;//移出數(shù)據(jù)的最高位
          SDA=CY;//送數(shù)據(jù)口
          SCL=1;//拉高時(shí)鐘線
          Delay5us();//延時(shí)
          SCL=0;//拉低時(shí)鐘線
          Delay5us();//延時(shí)
          }
          AT24C04_RecvACK();
          } /**************************************
          從IIC總線接收一個(gè)字節(jié)數(shù)據(jù)
          **************************************/
          BYTEAT24C04_RecvByte()
          {
          BYTEi;
          BYTEdat=0; SDA=1;//使能內(nèi)部上拉,準(zhǔn)備讀取數(shù)據(jù)
          for(i=0;i8;i++)//8位計(jì)數(shù)器
          {
          dat=1;
          SCL=1;//拉高時(shí)鐘線
          Delay5us();//延時(shí)
          dat|=SDA;//讀數(shù)據(jù)
          SCL=0;//拉低時(shí)鐘線
          Delay5us();//延時(shí)
          } returndat;
          }


          關(guān)鍵詞: STC12C5A60S2 AT24C04 C程序

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();