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

📄 gsm-

📁 GSM室温监控系统
💻
字号:
C51 COMPILER V7.06   DS1302                                                                06/13/2010 15:40:38 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.OBJ
COMPILER INVOKED BY: E:\WorkSpace\Keil\C51\BIN\C51.EXE ds1302.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #ifndef DS1302_H
   2          #define DS1302_H
   3          #include "common.h"
   4          //设置时间,time[0]-time[6]数据存放顺序为:秒,分,时,日,月,星期,年
   5          unsigned char times[7]={00,30,23,12,6,6,10};
   6          sbit SCLK=P2^5;
   7          sbit IO=P2^6;
   8          sbit RST=P2^7;
   9          sbit ACC7=ACC^7;
  10          sbit ACC0=ACC^0;
  11          
  12          /*================================================================*/
  13          /*                      向1302当前地址处写入1字节数据                 */
  14          /*================================================================*/
  15          void write_1302_byte(unsigned char d)
  16          {
  17   1          unsigned char i;
  18   1          ACC=d;              //将8位数据写入ACC
  19   1          for(i=8;i>0;i--)    //循环8次将ACC8位数据从低位到高位写入1302
  20   1          {   
  21   2              IO=ACC0;            //将ACC的最低位转送到IO口
  22   2              SCLK=1;         //上升沿写入1位数据
  23   2              SCLK=0;
  24   2              ACC=ACC>>1;         //将ACC次低位变为最低位
  25   2          }
  26   1      }
  27          /*=================================================================*/
  28          
  29          /*=================================================================*/
  30          /*                  从1302的当前地址处读出1字节数据                        */
  31          /*=================================================================*/
  32          unsigned char read_1302_byte(void)
  33          {
  34   1          unsigned char i;
  35   1          for(i=8;i>0;i--)
  36   1          {
  37   2              ACC=ACC>>1;
  38   2              ACC7=IO;
  39   2              SCLK=1; //时钟下降沿读1位数据
  40   2              SCLK=0;
  41   2              
  42   2          }
  43   1          return (ACC);
  44   1      }
  45          /*=================================================================*/
  46          
  47          /*================================================================*/
  48          /*                      将数据Data写入1302寄存器add处                 */
  49          /*================================================================*/
  50          void write_1302_reg(unsigned char add,unsigned char d)
  51          {
  52   1          RST= 0;
  53   1          SCLK=0;
  54   1          RST= 1;
  55   1          write_1302_byte(add);       //将1302的指针移到add处
C51 COMPILER V7.06   DS1302                                                                06/13/2010 15:40:38 PAGE 2   

  56   1          write_1302_byte(d);     //往add处写入数据
  57   1          SCLK=1;
  58   1          RST=0;              //停止写数据
  59   1      }
  60          /*=================================================================*/
  61          
  62          /*==================================================================*/
  63          /*                          读寄存器add处的值                           */
  64          /*==================================================================*/
  65          unsigned char read_1302_reg(unsigned char add)
  66          {
  67   1          unsigned char d;
  68   1          RST=0;
  69   1          SCLK=0;
  70   1          RST=1;
  71   1          write_1302_byte(add);
  72   1          d=read_1302_byte();
  73   1          SCLK=1;
  74   1          RST=0;
  75   1          return (d);
  76   1      }
  77          /*=================================================================*/
  78          
  79          /*===========================================================================================*/
  80          /*                  设置时间,time[0]-time[6]数据存放顺序为:秒,分,时,日,月,星期,年                    */
  81          /*===========================================================================================*/
  82          void write_1302_time(unsigned char *time)
  83          {
  84   1          unsigned char add=0x80;         //地址add初值(秒),偶数地址为只写
  85   1          unsigned char i;
  86   1          unsigned char timeBCD[7];   //用以存放time数据的BCD码值
  87   1          bdata unsigned char l,h;    //单位变量,分别存放时间数据(8421BCD码)的低4位和高4位
  88   1          for(i=0;i<7;i++)            //将时间数据转为BCD码放入timeBCD中
  89   1          {
  90   2              l=time[i]%10;
  91   2              h=time[i]/10;
  92   2              timeBCD[i]=h*16+l;
  93   2          }    
  94   1          write_1302_reg(0x8e,0x00);      //禁止写
  95   1          for(i=0;i<7;i++)
  96   1          {
  97   2              write_1302_reg(add,timeBCD[i]); //将时间数据写入1302对应的寄存器
  98   2              add+=2;                         //地址移动,确保地址为偶数
  99   2          }
 100   1          write_1302_reg(0x8e,0x80);          //允许写
 101   1      }
 102          /*===========================================================================================*/
 103          
 104          /*=================================================================================================*/
 105          /*                                              读取当前时间                                           */
 106          /*=================================================================================================*/
 107          void read_1302_time(unsigned char time[])
 108          {
 109   1          unsigned char i;
 110   1          unsigned char add=0x81;         //设置地址add初值(秒),奇数为只读
 111   1          bdata unsigned char l,h;        //单位变量,分别存放时间数据(8421BCD码)的低4位和高4位,用以进行十进制转换
 112   1              write_1302_reg(0x8e,0x00);  //禁止写
 113   1          for(i=0;i<7;i++)
 114   1          {
 115   2              time[i]=read_1302_reg(add);     //将时间数据(8421BCD码)从1302对应的寄存器中读出
 116   2              l=time[i]&0x0f;         //l存放time的低4位,即个位
 117   2              h=(time[i]>>4)&0x0f;    //h存放time的高4位,即十位
C51 COMPILER V7.06   DS1302                                                                06/13/2010 15:40:38 PAGE 3   

 118   2              time[i]=h*10+l;         //时间数据以十进制形式放进time[i]中
 119   2              add+=2;                 //地址移动,确保地址为奇数
 120   2          }
 121   1      }
 122          
 123          #endif
 124          
 125          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    232    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11      14
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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