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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 利用E2PROM寫的一個(gè)時(shí)鐘

          利用E2PROM寫的一個(gè)時(shí)鐘

          作者: 時(shí)間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          E2PROM是基于I2C總線的數(shù)據(jù)存儲(chǔ)器,網(wǎng)上很容易查到I2C總線協(xié)議的相關(guān)資料。

          本實(shí)驗(yàn)主要是實(shí)驗(yàn)的E2PROM的型號(hào)是AD24C02,其存儲(chǔ)容量為2K??芍貜?fù)擦寫1,000,000次,數(shù)據(jù)可以保存100年。其引腳圖如下:

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

          其芯片固定的地址高四位為1010,由于此處僅僅使用了一塊,因此A0,A1,A2均接地。此處在讀寫E2PROM的程序主要是采用祥哥的思想,加以改進(jìn)后的一個(gè)時(shí)鐘。程序如下:

          =================================================================================================
          #include
          #define uchar unsigned char
          #define uint unsigned int
          sbit sda=P3^7; //端口定義
          sbit scl=P3^6;
          int t;
          uchar code table[]={
          0x3F, //"0" //數(shù)碼管顯示字庫
          0x06, //"1"
          0x5B, //"2"
          0x4F, //"3"
          0x66, //"4"
          0x6D, //"5"
          0x7D, //"6"
          0x07, //"7"
          0x7F, //"8"
          0x6F, //"9"
          };
          void delay()
          { ; ;}
          void delay1(uint z)
          {
          uint x,y;
          for(x=z;x>0;x--)
          for(y=110;y>0;y--);
          }
          void start() //起始信號(hào)
          {
          sda=1;
          delay();
          scl=1;
          delay();
          sda=0;
          delay();

          }
          void stop()//終止信號(hào)
          {
          sda=0;
          delay();
          scl=1;
          delay();
          sda=1;
          delay();
          }

          void respons() //應(yīng)答信號(hào)
          {
          uchar i;
          scl=1;
          delay();
          while((sda==1) && (i<250))i++;//二者如果同時(shí)成立,則等待,如果有一個(gè)不成立則退出。
          scl=0;
          delay();
          }
          void init()
          {
          sda=1;
          delay();
          scl=1;
          delay();

          }
          void write_byte(uchar dat)//寫一個(gè)字節(jié)
          {
          uchar i,temp;
          temp=dat;

          for(i=0;i<8;i++)
          {
          temp=temp<<1;
          scl=0;
          delay();
          sda=CY;//將溢出位送走 ,高位送走,溢出位在CY寄存器中
          delay();
          scl=1;
          delay(); //高電平時(shí)數(shù)據(jù)保持穩(wěn)定
          }
          scl=0;
          delay();
          sda=1;//釋放總線,方便讀取應(yīng)答信號(hào)
          delay();
          }

          uchar read_byte() //讀取一個(gè)字節(jié)數(shù)據(jù)
          {
          uchar i,k;
          scl=0;
          delay();
          sda=1;
          delay();
          for(i=0;i<8;i++) //高位在前
          {
          scl=1;
          delay();
          k=(k<<1)|sda;
          scl=0;
          delay();
          }
          return k;
          }

          void write_add(uchar datadd,uchar date)//寫存儲(chǔ)器地址和數(shù)據(jù)
          {
          start();
          write_byte(0xa0);//寫芯片地址
          respons();
          write_byte(datadd);//向第三個(gè)存儲(chǔ)器地址寫數(shù)據(jù)
          respons();
          write_byte(date);
          respons();
          stop();

          }
          uchar read_date(uchar datadd)//讀取存儲(chǔ)器中的數(shù)據(jù),參數(shù)為存儲(chǔ)器的地址
          {
          uchar dat;
          start();
          write_byte(0xa0); //寫芯片地址
          respons();
          write_byte(datadd);//寫存儲(chǔ)器地址
          respons();
          start();
          write_byte(0xa1); //再次寫芯片地址,改變數(shù)據(jù)方向
          respons();
          dat=read_byte();
          stop();
          return(dat);

          }
          void display(int shi,int fen,int miao) //顯示時(shí)間
          {
          int a,b,c,d,e,f;
          a=shi/10;
          b=shi;
          c=fen/10;
          d=fen;
          e=miao/10;
          f=miao;

          P2=read_date(a);//讀取相應(yīng)數(shù)字的地址
          P1=0xf0;
          delay1(1);
          P2=read_date(b);
          P1=0xf1;
          delay1(1);
          P2=0x40;
          P1=0xf2;
          delay1(1);
          P2=read_date(c);
          P1=0xf3;
          delay1(1);
          P2=read_date(d);
          P1=0xf4;
          delay1(1);
          P2=0x40;
          P1=0xf5;
          delay1(1);
          P2=read_date(e);
          P1=0xf6;
          delay1(1);
          P2=read_date(f);
          P1=0xf7;
          delay1(1);

          }
          void main()
          {
          int num;
          int i;
          int shi,fen,miao;
          TMOD=0x01;//定時(shí)器0為工作方式1
          TH0=(65535-50000)/256;
          TL0=(65535-50000)%6;
          EA=1; //開總中斷
          ET0=1;//開定時(shí)器0中斷
          TR0=1;//啟動(dòng)定時(shí)器0
          //*******此處運(yùn)行一次即可*********
          init();
          for(i=0;i<10;i++)
          {
          write_add(i,table[i]);//依次寫進(jìn)數(shù)碼管要顯示的數(shù)據(jù) ,存到E2P的前10個(gè)地址中
          delay1(50);
          }
          //******************************
          while(1)
          {
          if(t==20)
          {
          t=0;
          miao++;
          if(miao==60)
          {
          miao=0;
          fen++;
          if(fen==60)
          {
          fen=0;
          shi++;
          if(shi==24)
          shi=0;
          }
          }
          }
          display(shi,fen,miao);//顯示時(shí)間
          }


          }

          void timer_0() interrupt 1 //定時(shí)器0中斷
          {
          TH0=(65535-50000)/256;
          TL0=(65535-50000)%6;
          t++;
          }



          關(guān)鍵詞: E2PROM時(shí)

          評(píng)論


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