⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1302.lst

📁 本程序是基于T6963C的程序 好用 欢迎下载
💻 LST
字号:
C51 COMPILER V8.09   DS1302                                                                05/07/2009 17:12:25 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS1302.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include        <reg52.h>               
   2          #define uchar unsigned char
   3          sbit SCLK = P1^3;
   4          sbit IO   = P1^4;
   5          sbit RSTB = P1^5;
   6          /**************************** 函数原型说明 ****************************/
   7          void    clkwritebyte();                 // 时钟字节写入函数
   8          void    ramwritebyte();                 // RAM字节写入函数
   9          uchar   rbyte_3w();                             // 字节读取函数
  10          void    reset_3w();                             // 复位函数
  11          void    wbyte_3w(uchar);                // 字节写入函数
  12          void    initialize_DS1302();    // DS1302初始化函数
  13          void    disp_clk_regs(uchar);   // 显示时钟寄存器内容函数
  14          void    burstramrd();                   // 多字节突发方式读取RAM函数
  15          void    burstramwr();                   // 多字节突发方式写入RAM函数
  16          
  17          uchar sec, min, hrs, dte, mon, day, yr;
  18          
  19          /***************************** 复位函数 ******************************/
  20          void reset_3w() {
  21   1         SCLK = 0;
  22   1         RSTB = 0;
  23   1         RSTB = 1;
  24   1      }
  25          
  26          /****************************** 字节写入函数 ***************************/
  27          void wbyte_3w(uchar W_Byte) {
  28   1      uchar i;
  29   1              for(i = 0; i < 8; ++i) {
  30   2                      IO = 0;
  31   2                      if(W_Byte & 0x01) IO = 1;
  32   2                      SCLK = 0;
  33   2                      SCLK = 1;
  34   2                      W_Byte >>= 1;
  35   2          }
  36   1      }
  37          
  38          /****************************** 字节读取函数 ****************************/
  39          uchar rbyte_3w() {
  40   1      uchar i;
  41   1      uchar R_Byte;
  42   1      uchar TmpByte;
  43   1      
  44   1              R_Byte = 0x00;
  45   1              IO = 1;
  46   1              for(i=0; i<8; ++i) {
  47   2                      SCLK = 1;
  48   2                      SCLK = 0;
  49   2                      TmpByte = (uchar)IO;
  50   2                      TmpByte <<= 7;
  51   2                      R_Byte >>= 1;
  52   2                      R_Byte |= TmpByte; 
  53   2              }
  54   1              return R_Byte;
  55   1      }
C51 COMPILER V8.09   DS1302                                                                05/07/2009 17:12:25 PAGE 2   

  56          
  57          /**************************** 时钟字节写入函数 *************************/
  58          void clkwritebyte() {
  59   1      uchar ClkAdd;
  60   1      uchar ClkData;  
  61   1      
  62   1      //      printf("\nWrite Clock ADDRESS:");  
  63   1      //      scanf("%bu", &ClkAdd);                          // 输入时钟地址
  64   1      //      printf("\nWrite Clock DATA:");
  65   1      //      scanf("%bx", &ClkData);                         // 输入时钟数据
  66   1              
  67   1              ClkAdd = ((ClkAdd * 2) | 0x80);         // 时钟数据写入命令
  68   1              reset_3w();
  69   1              wbyte_3w(ClkAdd);
  70   1              wbyte_3w(ClkData);
  71   1              reset_3w();
  72   1      }
  73          
  74          /* ************************** RAM字节写入函数 **************************/
  75          void ramwritebyte() {
  76   1      uchar ramadd;
  77   1      uchar ramdata;
  78   1      
  79   1      //      printf("\nWrite Ram ADDRESS (HEX):");
  80   1      //      scanf("%bx", &ramadd);                                  // 输入RAM地址
  81   1      //      printf("\nWrite Ram DATA (HEX):");
  82   1      //      scanf("%bx", &ramdata);                                 // 输入RAM数据
  83   1      
  84   1              ramadd = ((ramadd * 2) | 0xC0);                 // RAM数据写入命令
  85   1              reset_3w();
  86   1              wbyte_3w(ramadd);
  87   1              wbyte_3w(ramdata);
  88   1              reset_3w();
  89   1      }
  90          
  91          /************************* 显示时钟寄存器内容函数 ***********************/
  92          void disp_clk_regs() 
  93          {//uchar loop
*** ERROR C236 IN LINE 93 OF DS1302.C: '_disp_clk_regs': different length of parameter lists
  94   1      
  95   1      
  96   1      //do    {                                       // 读取并显示时钟寄存器的内容
  97   1                      reset_3w();
  98   1                      wbyte_3w(0xBF);         // 以多字节突发方式读取时钟数据
  99   1                      sec = rbyte_3w();       // 秒
 100   1                      min = rbyte_3w();       // 分
 101   1                      hrs = rbyte_3w();       // 小时
 102   1                      dte = rbyte_3w();       // 日期
 103   1                      mon = rbyte_3w();       // 月份
 104   1                      day = rbyte_3w();       // 星期
 105   1                      yr  = rbyte_3w();       // 年
 106   1                      reset_3w();
 107   1              /*      if(sec != lsec || !loop) {      // 每秒显示一次         
 108   1                              printf("\nYr   Day  Mon  Dte  Hrs  Min  Sec");
 109   1                              printf("\n%2.bX   %2.bX   %2.bX   %2.bX", yr, day, mon, dte);
 110   1                              printf("   %2.bX   %2.bX   %2.bX", hrs, min, sec);
 111   1                              lsec = sec;
 112   1                      }
 113   1                      if(!loop)       break;*/
 114   1      //      }       while(1);   //!RI
 115   1              //if(loop)   _getkey();
 116   1      }
C51 COMPILER V8.09   DS1302                                                                05/07/2009 17:12:25 PAGE 3   

 117          
 118          /************************ 多字节突发方式读取RAM函数 *********************/
 119          void burstramrd() {
 120   1      uchar rmary[31];
 121   1      uchar i;
 122   1      
 123   1              reset_3w();
 124   1              wbyte_3w(0xFF);                 // 以多字节突发方式读取RAM
 125   1              for (i=0; i<31; ++i) {
 126   2                      rmary[i] = rbyte_3w();
 127   2              }
 128   1              reset_3w();
 129   1      
 130   1      /*      printf("\nDS1302 Ram");
 131   1      
 132   1              printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",     rmary[0], rmary[1], rmary[2], rmary[3], rmary
             -[4], rmary[5], rmary[6], rmary[7]);
 133   1              printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",     rmary[8], rmary[9], rmary[10], rmary[11],rmar
             -y[12], rmary[13], rmary[14], rmary[15]);
 134   1              printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",rmary[16], rmary[17], rmary[18], rmary[19],rma
             -ry[20], rmary[21], rmary[22], rmary[23]);
 135   1              printf("\n%2.bX %2.bX %2.bX %2.bX %2.bX %2.bX %2.bX",rmary[24], rmary[25], rmary[26], rmary[27],rmary[28]
             -, rmary[29], rmary[30]);
 136   1      */
 137   1              }
 138          
 139          /************************ 多字节突发方式写入RAM函数 *********************/
 140          void burstramwr() {
 141   1      uchar ramdata;
 142   1      uchar   i;
 143   1      
 144   1              //printf("\nWrite Ram DATA (HEX):");
 145   1              //scanf("%bx", &ramdata);                               // 输入RAM数据
 146   1      
 147   1              reset_3w();
 148   1              wbyte_3w(0xfe);                                         // 以多字节突发方式写入RAM 
 149   1              for (i=0; i<31; ++i) {
 150   2                      wbyte_3w(ramdata);
 151   2              }
 152   1              reset_3w();
 153   1      }
 154          
 155          /**************************** DS1302初始化函数 **************************/
 156          void initialize_DS1302() {
 157   1      uchar   yr, mn, date, dy, hr, min, sec;
 158   1      
 159   1      /*      printf("\nEnter the year (0-99): ");
 160   1              scanf("%bx", &yr);
 161   1              printf("\nEnter the month (1-12): ");
 162   1              scanf("%bx", &mn);
 163   1              printf("\nEnter the date (1-31): ");
 164   1              scanf("%bx", &date);
 165   1              printf("\nEnter the day (1-7): ");
 166   1              scanf("%bx", &dy);
 167   1              printf("\nEnter the hour (1-24): ");
 168   1              scanf("%bx", &hr);
 169   1              hr = hr & 0x3f;                         // 设置时钟为24小时方式
 170   1              printf("\nEnter the minute (0-59): ");
 171   1              scanf("%bx", &min);
 172   1              printf("\nEnter the second (0-59): ");
 173   1              scanf("%bx", &sec);
 174   1      */
C51 COMPILER V8.09   DS1302                                                                05/07/2009 17:12:25 PAGE 4   

 175   1              reset_3w();
 176   1              wbyte_3w(0x8e);                         // 写保护控制寄存器
 177   1              wbyte_3w(0);                            // 允许写入
 178   1              reset_3w();
 179   1              wbyte_3w(0x90);                         // 涓流充电控制寄存器
 180   1              wbyte_3w(0xab);                         // 允许充电, 双二极管, 8K 电阻
 181   1              reset_3w();
 182   1              wbyte_3w(0xbe);                         // 以多字节突发方式写入时钟数据(8个字节)
 183   1              wbyte_3w(sec);
 184   1              wbyte_3w(min);
 185   1              wbyte_3w(hr);
 186   1              wbyte_3w(date);
 187   1              wbyte_3w(mn);
 188   1              wbyte_3w(dy);
 189   1              wbyte_3w(yr);
 190   1              wbyte_3w(0);                            // 以多字节突发方式写入时钟数据时
 191   1      // 必须对写保护控制寄存器写入0值
 192   1              reset_3w();
 193   1      }
 194          
 195          /****************************** 主函数 ********************************
 196          main (void)     {
 197          uchar M, M1;
 198              SCON  = 0x50;               // 设置串行口: 方式 1, 8位UART, 允许接收
 199              TMOD |= 0x20;       // 设置定时器T1, 方式 2, 8位自动重装
 200              TH1   = 221;        // 设置串行口波特率:  1200 @ 16MHz 
 201              TR1   = 1;          
 202              TI    = 1;      
 203          }
 204          */

C51 COMPILATION COMPLETE.  0 WARNING(S),  1 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -