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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > PIC單片機讀寫DS1302

          PIC單片機讀寫DS1302

          作者: 時間:2018-08-01 來源:網(wǎng)絡 收藏

          本文介紹了讀寫DS1302程序

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

          #i nclude

          #define uchar unsigned char

          #define T_CLK RC3

          #define T_IO RC4

          #define T_RST RC5

          unsigned char TDATA;

          int js;

          int Order[3];

          bit sci_sign=0;

          int buf[2];

          void Get1302(uchar *);

          void RTInputByte(uchar);

          uchar RTOutputByte(void) ;

          void W1302(uchar , uchar );

          uchar R1302(uchar);

          void Set1302(uchar*);

          void sciint(void);

          void sci(int);

          void int_to_asc(int);

          //*SCI部件接收初始化子程序*/

          void sciint()

          {

          TRISC7= 1 ;// |= 0xc0;//設置為輸入

          TRISC6= 0 ;

          BRGH = 1 ; //高波特率選擇位

          SPBRG = 25 ; //((20000000/9600)/16)-1

          SYNC = 0 ;//異步

          SPEN = 1 ;//串口使能

          RCIE = 1 ;// USART數(shù)據(jù)接收中斷使能位

          TXIE = 0 ;//USART數(shù)據(jù)發(fā)送中斷使能位

          TXEN = 1 ;//發(fā)送

          CREN = 1 ;//連續(xù)接收使能位

          RCIF=0;

          PEIE= 1 ; //開中斷

          GIE=1;

          }

          void sci(int tran)

          {

          while(!TXIF);

          TXREG=tran; //*發(fā)出一個字符*/

          TXIF=0;

          }

          void RTInputByte(uchar d)

          {

          uchar i;

          TDATA = d;

          for(i=8; i>0; i--)

          {

          T_IO =(bit)(TDATA0X80); //*相當于匯編中的 RRC

          T_CLK = 1;

          T_CLK = 0;

          TDATA = TDATA >> 1;

          }

          }

          uchar RTOutputByte(void)

          {

          uchar i;

          TRISC4=1;

          for(i=8; i>0; i--)

          {

          TDATA = TDATA >>1;

          if(T_IO)

          {

          TDATA=0X80;

          }

          T_CLK = 1;

          T_CLK = 0;

          }

          TRISC4=0;

          return(TDATA);

          }

          void W1302(uchar ucAddr, uchar ucDa)

          {

          T_RST = 0;

          T_CLK = 0;

          T_RST = 1;

          RTInputByte(ucAddr); //* 地址,命令

          RTInputByte(ucDa); //* 寫1Byte數(shù)據(jù)

          T_CLK = 1;

          T_RST = 0;

          }

          uchar R1302(uchar ucAddr)

          {

          uchar ucData;

          T_RST = 0;

          T_CLK = 0;

          T_RST = 1;

          RTInputByte(ucAddr); //* 地址,命令

          ucData = RTOutputByte(); //* 讀1Byte數(shù)據(jù)

          T_CLK = 1;

          T_RST = 0;

          return(ucData);

          }

          void Set1302(uchar *pClock)

          {

          uchar i;

          uchar ucAddr = 0x80;

          W1302(0x8e,0x00); //* 控制命令,WP=0,寫操作?

          for(i =7; i>0; i--)

          {

          W1302(ucAddr,*pClock); //* 秒 分 時 日 月 星期 年

          pClock++;

          ucAddr +=2;

          }

          W1302(0x8e,0x80); //* 控制命令,WP=1,寫保護

          }

          void Get1302(uchar *ucCurtime)

          {

          uchar i;

          uchar ucAddr = 0x81;

          for (i=0; i7; i++)

          {

          ucCurtime[i] = R1302(ucAddr);//*格式為: 秒 分 時 日 月 星期 年

          ucAddr += 2;

          }

          }

          void interrupt SCI_Admit(void)

          {

          if(RCIFRCIE) //判斷是否是接收中斷

          {

          if(Order[0]=='$')

          {

          js++;

          Order[js]=RCREG;

          if(js==2)

          sci_sign=1;

          }

          else

          {

          Order[0]=RCREG;

          sci_sign=0;

          js=0;

          }

          }

          }

          void int_to_asc(int dat)

          {

          buf[0]=(dat/10)+'0';

          buf[1]=(dat%10)+'0';

          }

          void main()

          {

          uchar str[]={30,10,9,20,8,1,7};

          uchar dtime[]={0,0,0,0,0,0,0};

          TRISC3=1;

          TRISC4=1;

          TRISC5=1;

          sciint();

          ei();

          // Get1302(st);

          // sci('E');

          while(1)

          {

          if(sci_sign)

          {

          Get1302(dtime);

          if(Order[1]=='R'Order[2]=='T')

          {

          sci('Y');

          int_to_asc(dtime[6]);

          sci(buf[0]);

          sci(buf[1]);

          sci('M');

          int_to_asc(dtime[4]);

          sci(buf[0]);

          sci(buf[1]);

          sci('T');

          int_to_asc(dtime[3]);

          sci(buf[0]);

          sci(buf[1]);

          sci('h');

          int_to_asc(dtime[2]);

          sci(buf[0]);

          sci(buf[1]);

          sci('m');

          int_to_asc(dtime[1]);

          sci(buf[0]);

          sci(buf[1]);

          sci('s');

          int_to_asc(dtime[0]);

          sci(buf[0]);

          sci(buf[1]);

          sci('W');

          int_to_asc(dtime[5]);

          sci(buf[0]);

          sci(buf[1]);

          sci(' ');

          }

          else if(Order[1]=='R'Order[2]=='S')

          {

          Set1302(str);

          }

          Order[0]=0;

          Order[1]=0;

          Order[2]=0;

          sci_sign=0;

          }

          }

          }



          關鍵詞: PIC單片機

          評論


          相關推薦

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