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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)—AT24C1024(帶程序解析?。?7

          51單片機(jī)—AT24C1024(帶程序解析?。?7

          作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏

          //------------------------------------------------------------------------------
          //主控器件向被控器件發(fā)送應(yīng)答函數(shù)
          void IIC_ack_send(bit a)
          {
          if(a==0) //發(fā)應(yīng)答信號(hào)
          sda=0;
          else
          sda=1;
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          scl=1;
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          scl=0;
          _nop_();
          _nop_();
          }
          //------------------------------------------------------------------------------
          //寫(xiě)一個(gè)字節(jié)函數(shù)
          void send_byte(uchar c)
          {
          uchar bit_cnt;
          for(bit_cnt=0;bit_cnt<8;bit_cnt++)//循環(huán)傳送8位
          {
          if((c< //取當(dāng)前發(fā)送位
          sda=1;
          else
          sda=0;
          _nop_();
          scl=1;//發(fā)送到數(shù)據(jù)線上
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          scl=0;
          }
          }
          //------------------------------------------------------------------------------
          //接收一個(gè)字節(jié)函數(shù)
          //返回接收的8位數(shù)據(jù)
          uchar receive_byte()
          {
          uchar temp;
          uchar bit_cnt;
          temp=0;
          sda=1; //置數(shù)據(jù)線為輸入方式
          for(bit_cnt=0;bit_cnt<8;bit_cnt++)
          {
          _nop_();
          scl=0; //置時(shí)鐘線為低電平,準(zhǔn)備接收數(shù)據(jù)
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          scl=1;
          _nop_();
          _nop_();
          temp<<=1;
          if(sda==1)//接收當(dāng)前數(shù)據(jù)位,接收內(nèi)容放入temp中
          temp+=1;
          _nop_();
          _nop_();
          }
          scl=0;
          _nop_();
          _nop_();
          return(temp);
          }

          本文引用地址:http://www.ex-cimer.com/article/201611/321505.htm

          AT24C1024.c(這個(gè)才是壓軸的哦~~

          //------------------------------------------------------------------------------
          //AT24C1024文件的函數(shù),便于以后調(diào)用
          //用的1M的EEPROM
          #include"reg52.h"
          #include"IIC.h"
          #include"MacroAndConst.h"
          #include"intrins.h"
          //------------------------------------------------------------------------------
          //器件當(dāng)前地址寫(xiě)字節(jié)數(shù)據(jù)
          //入口參數(shù):器件地址碼和傳送的數(shù)據(jù)
          //返回一位,1表示成功,否則有誤,使用后必須結(jié)束總線
          bit mcu_send_byte(uchar add,uchar dat)
          {
          IIC_start();//發(fā)開(kāi)始信號(hào)
          send_byte(add);//寫(xiě)器件地址碼到IIC總線
          IIC_ack_acc();//其實(shí)我感覺(jué)應(yīng)該把這個(gè)程序固化到發(fā)送字節(jié),省得寫(xiě)一遍又一遍~~~~
          if(ack==0)
          return(0);
          send_byte(dat);//如果接收到應(yīng)答信號(hào),則發(fā)送一個(gè)字節(jié)數(shù)據(jù)
          IIC_ack_acc();
          if(ack==0)
          return(0);
          IIC_stop();//正常結(jié)束,發(fā)送結(jié)束信號(hào),返回1
          return(1);
          }
          //------------------------------------------------------------------------------
          //向器件指定地址按頁(yè)寫(xiě)函數(shù)
          //入口參數(shù)有4個(gè):器件地址碼、器件單元地址、寫(xiě)入的數(shù)據(jù)串的指針、寫(xiě)入的字節(jié)個(gè)數(shù)
          //寫(xiě)入成功,返回1;不成功,返回0,使用后必須結(jié)束總線
          bit mcu_send_string(uchar add,uchar rom_add_h,uchar rom_add_l,uchar *s,uchar num)
          {
          uchar i;
          IIC_start();
          send_byte(add);//發(fā)送器件地址碼
          IIC_ack_acc();
          if(ack==0)
          return(0);
          send_byte(rom_add_h); //有應(yīng)答,發(fā)送ROM的單元地址的高8位
          IIC_ack_acc();
          if(ack==0)
          return(0);
          send_byte(rom_add_l); //有應(yīng)答,發(fā)送ROM的單元地址的低8位
          IIC_ack_acc();
          if(ack==0)
          return(0);
          for(i=0;i //連續(xù)發(fā)送num個(gè)字節(jié)數(shù)據(jù)
          {
          send_byte(*s);
          IIC_ack_acc();
          if(ack==0)
          return(0);
          s++;
          }
          IIC_stop();
          return(1);
          }
          //------------------------------------------------------------------------------
          //讀器件當(dāng)前地址單元數(shù)據(jù)函數(shù)
          //入口參數(shù)兩個(gè):器件的地址碼、讀入位置,讀成功返回1,否則返回0
          //在對(duì)AT24C1024芯片寫(xiě)操作之前,需要將WP置0,允許寫(xiě),寫(xiě)操作完成后,WP置1,禁止對(duì)AT24C1024改寫(xiě)
          bit mcu_receive_byte(uchar add,uchar *c)
          {
          IIC_start();
          send_byte(add);
          IIC_ack_acc();
          if(ack==0)
          return(0);
          *c=receive_byte();//讀入字節(jié)送目的位置
          IIC_ack_send(1);//送非應(yīng)答信號(hào):1
          IIC_stop();
          return(1);
          }
          //------------------------------------------------------------------------------
          //從器件指定地址讀多個(gè)字節(jié)
          //入口參數(shù)有4個(gè):器件地址碼、器件單元地址、讀出的數(shù)據(jù)串、讀出的字節(jié)個(gè)數(shù),寫(xiě)入成功返回1,不成功返回0
          bit mcu_receive_string(uchar add,uchar rom_add_h,uchar rom_add_l,uchar *s,uchar num)
          {
          uchar i;
          IIC_start();
          send_byte(add); //發(fā)送器件的地址碼,這里最低位為0,寫(xiě)
          IIC_ack_acc();
          if(ack==0)
          return(0);
          send_byte(rom_add_h);//發(fā)送器件單元地址的高字節(jié)
          IIC_ack_acc();
          if(ack==0)
          return(0);
          send_byte(rom_add_l);//發(fā)送器件單元地址的低字節(jié)
          IIC_ack_acc();
          if(ack==0)
          return(0);
          //------------------------------------------------------------------------------
          IIC_start(); //重新發(fā)送開(kāi)始信號(hào),開(kāi)始讀取數(shù)據(jù)
          send_byte(add+1);//發(fā)送器件的地址碼,這里最后一位為1,讀
          IIC_ack_acc();
          if(ack==0)
          return(0);
          for(i=0;i{
          *s=receive_byte();
          IIC_ack_send(0); //送應(yīng)答信號(hào)
          s++;
          }
          *s=receive_byte();
          IIC_ack_send(1); //送非應(yīng)答信號(hào)
          IIC_stop();
          return(1);
          }

          要是程序有問(wèn)題的看這個(gè):

          http://blog.sina.com.cn/s/blog_7ec8fc2c01012pla.html

          要是芯片資料有問(wèn)題的話看這個(gè):

          http://blog.sina.com.cn/s/blog_7ec8fc2c01012ksx.html



          上一頁(yè) 1 2 3 下一頁(yè)

          關(guān)鍵詞: 51單片機(jī)AT24C102程序解

          評(píng)論


          相關(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); })();