色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

          51單片機—AT24C1024(帶程序解析!)—07

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

          //------------------------------------------------------------------------------
          //主控器件向被控器件發(fā)送應答函數(shù)
          void IIC_ack_send(bit a)
          {
          if(a==0) //發(fā)應答信號
          sda=0;
          else
          sda=1;
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          scl=1;
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          scl=0;
          _nop_();
          _nop_();
          }
          //------------------------------------------------------------------------------
          //寫一個字節(jié)函數(shù)
          void send_byte(uchar c)
          {
          uchar bit_cnt;
          for(bit_cnt=0;bit_cnt<8;bit_cnt++)//循環(huán)傳送8位
          {
          if((c< //取當前發(fā)送位
          sda=1;
          else
          sda=0;
          _nop_();
          scl=1;//發(fā)送到數(shù)據(jù)線上
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          scl=0;
          }
          }
          //------------------------------------------------------------------------------
          //接收一個字節(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ù)據(jù)
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          scl=1;
          _nop_();
          _nop_();
          temp<<=1;
          if(sda==1)//接收當前數(shù)據(jù)位,接收內(nèi)容放入temp中
          temp+=1;
          _nop_();
          _nop_();
          }
          scl=0;
          _nop_();
          _nop_();
          return(temp);
          }

          本文引用地址:http://cafeforensic.com/article/201611/321505.htm

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

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

          要是程序有問題的看這個:

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

          要是芯片資料有問題的話看這個:

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



          上一頁 1 2 3 下一頁

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

          評論


          相關(guān)推薦

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

          關(guān)閉