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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > I2C實時時鐘/日歷芯片在8051系統(tǒng)中的應用

          I2C實時時鐘/日歷芯片在8051系統(tǒng)中的應用

          作者: 時間:2012-03-07 來源:網(wǎng)絡 收藏

          3 概述

          圖7所示為PCF8563的具體電路圖,對圖中石英晶片頻率的調(diào)整,筆者給出3種可行性方法,供參考:

          51.gif

          方法1:定值OSCI電容。計算所需的電容平均值,用此值的定值電容,通電后在CLKOUT管腳上測出的頻率應為32.768kHz,測出的頻率值偏差取決于石英晶片本身,電容偏差和器件之間的偏差平均為±5×10 -6。平均偏差可達5分鐘/年。

          方法2:OSCI微調(diào)電容。可通過調(diào)整OSCI管腳的微調(diào)電容式振蕩器的頻率來獲得更高的精度,此時可測出通電時管腳CLKOUT上的信號頻率為32.768kHz。

          方法3:OSCI輸出。直接測量管腳OSCI的輸出。

          4 程序范例

          以下的C語言源程序是用8051單片機的普通I/O口(如P0.0/P0.4)模擬實現(xiàn) PCF8563的/的操作,有字節(jié)寫/讀兩種狀態(tài)。程序中從地址的讀地址為0A3H,寫地址為0A2H.所發(fā)送的數(shù)據(jù)字節(jié)為9個,發(fā)送的初始數(shù)據(jù)在rom_sed[9]中,rom_sed[9]定義了寄存器中當前發(fā)送的值:控制/狀態(tài)寄存器1為0,控制/狀態(tài)寄存器2為0,秒寄存器為 0,分鐘寄存器55,小時寄存器為23,日寄存器為31,星期寄存器為6,月/世紀寄存器為0x12,年寄存器為0x99(即1999年12月31日23 點55分0秒),當程序運行一段時間(5分鐘)后,從地址寄存器 02H開始讀數(shù)據(jù),數(shù)據(jù)存放在rom_rec7中,發(fā)現(xiàn)變量rom_rec7變?yōu)?000年1月1日0點0分。若外轉(zhuǎn)帳電路有顯示,則時間可以顯示在面板上。
          #included:.h>
          #define byte unsigned char
          sbit scl=0x81; //定義串行I/O口
          sbit sda=0x80;
          idata byte rom_sed[9];
          idata byte rom_rec[7];
          idata byte j,k;
          bit flag,flag1;
          void delay(void) //延時子程序
          {data byte i;
          for(i=0;i6;i++);
          }
          void I_start(void) //發(fā)送總線起始條件子程序
          {sda=1;
          ;
          scl=1;
          delay();
          sda=0;
          delay();
          scl=0;
          ;
          }



          評論


          相關推薦

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