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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > SPI時(shí)鐘芯片DS1302的應(yīng)用

          SPI時(shí)鐘芯片DS1302的應(yīng)用

          作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
          DS1302 是美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進(jìn)行同步通信,并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。采用普通32.768kHz晶振!RST是復(fù)位/片選線,通過(guò)把RST輸入驅(qū)動(dòng)置高電平來(lái)啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302進(jìn)行操作。如果在傳送過(guò)程中RST置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc≥2.5V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端(雙向),在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位到高位7。SCLK始終是輸入端。

          //======================================驅(qū)動(dòng)
          sbit SDA_1302=P1^0;//數(shù)據(jù)輸入輸出腳
          sbit SCL_1302=P1^1;//串行時(shí)鐘輸入
          sbit RST =P1^2;//復(fù)位腳
          void send_data(unsigned char ch)
          {
          unsigned char i;
          SCL_1302=0;
          _nop_();
          RST=1;
          for(i=0;i<8;i++)
          {
          SCL_1302=0;
          SDA_1302=(bit)(ch&0x01);
          SCL_1302=1;
          ch=ch>>1;
          }
          SCL_1302=0;
          RST=0;
          }
          unsigned char receive_data()
          {
          unsigned char i,data;
          SCL_1302=0;
          _nop_();
          RST=1;
          for(i=0;i<8;i++)
          {
          data>>=1;
          SCL_1302=0;
          if(SDA_1302) data|=0x80;
          elsedata&=0x7f;
          SCL_1302=1;
          }
          SCL_1302=0;
          RST=0;
          return data;
          }
          ================================================//
          //=======================================應(yīng)用
          sbit SDA_1302=P1^0;
          sbit SCL_1302=P1^1;
          sbit RST=P1^2;
          #define WSEC0x80
          #define RSEC0x81
          #define WMIN0x82
          #define RMIN0x83
          #define WHOU0x84
          #define RHOU0x85
          #define WDAY0x86
          #define RDAY0x87
          #define WMON0x88
          #define RMON0x89
          #define WWEEK 0X8a
          #define RWEEK 0X8b
          #define WYEAR 0x8c
          #define RYEAR 0x8d
          #define EWOK0X8e //
          #define EW0X8F //
          #define CDOK0X90 // 涓流充電寫
          #define CD0X91 // 讀

          void delay(void)
          {
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          }
          void write_ds1302(unsigned char addr,unsigned char tempdata)
          {
          unsigned char i=0;
          SCL_1302=0;
          delay();
          RST=1;
          delay();
          for(i=0;i<8;i++)
          {
          SCL_1302=0;
          SDA_1302=(bit)(addr&0x01);
          SCL_1302=1;
          addr>>=1;
          }
          for(i=0;i<8;i++)
          {
          SCL_1302=0;
          SDA_1302=(bit)(tempdata&0x01);
          SCL_1302=1;
          addr>>=1;
          }
          RST=0;
          delay();
          SCL_1302=0;
          }
          unsigned char read_ds1302(unsigned char addr)
          {
          unsigned char i=0;
          unsigned char temp=0;
          SCL_1302=0;
          delay();
          RST=1;
          delay();
          for(i=0;i<8;i++)
          {
          SCL_1302=0;
          SDA_1302=(bit)(addr&0x01);
          SCL_1302=1;
          addr>>=1;
          }
          SDA_1302=1;
          for(i=0;i<8;i++)
          {
          temp>>=1;
          SCL_1302=1;
          if(SDA_1302)
          temp|=0x80;
          else
          temp&=0x7f;
          SCL_1302=0;
          }
          RST=0;
          delay();
          SCL_1302=0;
          return (temp);
          }
          void write_initial(void) //寫入初始時(shí)間 2009年 1月1日1時(shí)0分0秒
          {
          SCL_1302=0;
          RST=0;
          write_ds1302(EWOK,0x00);
          write_ds1302(WSEC,0X00);
          write_ds1302(WMIN,0X00);
          write_ds1302(WHOU,0X81);
          write_ds1302(WDAY,0X01);
          write_ds1302(WMON,0X01);
          write_ds1302(WWEEK,0X04);
          write_ds1302(WYEAR,0X09);
          }
          void read(void)
          {
          DAY=read_ds1302(RDAY);
          MONTH=read_ds1302(RMON);
          YEAR=read_ds1302(RYEAR);
          }


          關(guān)鍵詞: SPI時(shí)鐘芯片DS130

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