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

📄 ds12887.lst

📁 基于12887和80c52的时钟程序
💻 LST
字号:
C51 COMPILER V6.12  DS12887                                                                06/27/2007 16:47:25 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE DS12887
OBJECT MODULE PLACED IN .\DS12887.OBJ
COMPILER INVOKED BY: D:\学习\专业工具\Keil51\C51\BIN\C51.EXE .\DS12887.c DEBUG OBJECTEXTEND

stmt level    source

   1          //DS12887的C驱动程序
   2          
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          #include <reg52.h>
   6          #include <stdio.h>
   7          #include <absacc.h>
   8          #include <math.h>
   9          #include <string.h>
  10          #include <ctype.h>
  11          #include <stdlib.h>
  12          #include "ds12887.h"
  13          
  14          
  15          /************************************************************* 
  16          文件名称:ds12c887.c
  17          适用范围:时钟芯片ds12c887的驱动程序
  18          *************************************************************/   
  19          #include <absacc.h>
  20          /* 命令常量定义 */
  21          #define CMD_START_DS12C887     0x20            /* 开启时钟芯片 
  22          */
  23          #define CMD_START_OSCILLATOR 0x70            /* 开启振荡器,
  24          处于抑制状态 */
  25          #define CMD_CLOSE_DS12C887     0x30            /* 关掉时钟芯片 
  26          */
  27          /* 所有的置位使用或操作,清除使用与操作 */
  28          #define MASK_SETB_SET         0x80            /* 禁止刷新 */
  29          #define MASK_CLR_SET         0x7f            /* 使能刷新 */
  30          #define MASK_SETB_DM         0x04            /* 使用HEX格式 
  31          */
  32          #define MASK_CLR_DM             0xfb            /* 使用BCD码格式 */
  33          #define MASK_CLR_DM_BIN             0xff//使用二进制
  34          #define MASK_SETB_2412         0x02            /* 使用24小时模式 */
  35          #define MASK_CLR_2412         0xfd            /* 使用12小时模式 */
  36          #define MASK_SETB_DSE         0x01            /* 使用夏令时 */
  37          #define MASK_CLR_DSE         0xfe            /* 不使用夏令时 
  38          */
  39          
  40          /* 寄存器地址通道定义 */
  41          xdata char chSecondsChannel _at_ 0xB700;
  42          xdata char chMinutesChannel _at_ 0xB702;
  43          xdata char chHoursChannel   _at_ 0xB704;
  44          xdata char chDofWChannel    _at_ 0xB706;
  45          xdata char chDateChannel    _at_ 0xB707;
  46          xdata char chMonthChannel   _at_ 0xB708;
  47          xdata char chYearChannel    _at_ 0xB709;
  48          xdata char chCenturyChannel _at_ 0xB732;
  49          xdata char chRegA    _at_ 0xB70a;
  50          xdata char chRegB    _at_ 0xB70b;
  51          xdata char chRegC    _at_ 0xB70c;
  52          xdata char chRegD    _at_ 0xB70d;
  53          
  54          /* 函数声明部分 */
  55          void StartDs12c887(void);
C51 COMPILER V6.12  DS12887                                                                06/27/2007 16:47:25 PAGE 2   

  56          void CloseDs12c887(void);
  57          void InitDs12c887(void);
  58          unsigned char GetSeconds(void);
  59          unsigned char GetMinutes(void);
  60          unsigned char GetHours(void);
  61          unsigned char GetDay(void);
  62          unsigned char GetDate(void);
  63          unsigned char GetMonth(void);
  64          unsigned char GetYear(void);
  65          unsigned char GetCentury(void);
  66          void SetTime(unsigned char chSeconds,unsigned char chMinutes,unsigned char 
  67          chHours);
  68          void SetDate(unsigned char chDate,unsigned char chMonth,unsigned char chYear);
  69          
  70          //unsigned char BCD2BIN(unsigned char cData)
  71          
  72          /************************************************************* 
  73          函数功能:该函数用来启动时钟芯片工作
  74          应用范围:仅在时钟芯片首次使用时用到一次
  75          入口参数:
  76          出口参数:
  77          *************************************************************/   
  78          void StartDs12c887(void)
  79          {
  80   1          chRegA = CMD_START_DS12C887;
  81   1      }
  82          
  83          /************************************************************* 
  84          函数功能:该函数用来关闭时钟芯片
  85          应用范围:一般用不到
  86          入口参数:
  87          出口参数:
  88          *************************************************************/   
  89          void CloseDs12c887(void)
  90          {
  91   1          chRegA = CMD_CLOSE_DS12C887;
  92   1      }
  93          
  94          void InitDs12c887()
  95          {
  96   1          StartDs12c887();
  97   1          chRegB = chRegB | MASK_SETB_SET;        /* 禁止刷新 */
  98   1          chRegB = chRegB & MASK_CLR_DM | MASK_SETB_2412\
  99   1      	   & MASK_CLR_DSE;
 100   1                                  
 101   1                      /* 使用BCD码格式、24小时模式、不使用
 102   1      夏令时 */
 103   1          chCenturyChannel = 0x21;                /* 设
 104   1      置为21世纪 */
 105   1          chRegB = chRegB & MASK_CLR_SET;            /* 使能刷新 */
 106   1      }
 107          
 108          /************************************************************* 
 109          函数功能:该函数用来从时钟芯片读取秒字节
 110          应用范围:
 111          入口参数:
 112          出口参数:
 113          *************************************************************/   
 114          unsigned char GetSeconds(void)
 115          {
 116   1          return(chSecondsChannel);
 117   1      }
C51 COMPILER V6.12  DS12887                                                                06/27/2007 16:47:25 PAGE 3   

 118          
 119          /************************************************************* 
 120          函数功能:该函数用来从时钟芯片读取分字节
 121          应用范围:
 122          入口参数:
 123          出口参数:
 124          *************************************************************/   
 125          unsigned char GetMinutes(void)
 126          {
 127   1          return(chMinutesChannel);
 128   1      }
 129          
 130          /************************************************************* 
 131          函数功能:该函数用来从时钟芯片读取小时字节
 132          应用范围:
 133          入口参数:
 134          出口参数:
 135          *************************************************************/   
 136          unsigned char GetHours(void)
 137          {
 138   1          return(chHoursChannel);
 139   1      }
 140          
 141          /************************************************************* 
 142          函数功能:该函数用来从时钟芯片读取日字节
 143          应用范围:
 144          入口参数:
 145          出口参数:
 146          *************************************************************/ 
 147          unsigned char GetDay(void)
 148          {
 149   1          return(chDofWChannel);
 150   1      }  
 151          unsigned char GetDate(void)
 152          {
 153   1          return(chDateChannel);
 154   1      }
 155          /************************************************************* 
 156          函数功能:该函数用来从时钟芯片读取月字节
 157          应用范围:
 158          入口参数:
 159          出口参数:
 160          *************************************************************/   
 161          unsigned char GetMonth(void)
 162          {
 163   1          return(chMonthChannel);
 164   1      }
 165          
 166          /************************************************************* 
 167          函数功能:该函数用来从时钟芯片读取年字节
 168          应用范围:
 169          入口参数:
 170          出口参数:
 171          *************************************************************/   
 172          unsigned char GetYear(void)
 173          {
 174   1          return(chYearChannel);
 175   1      }
 176          
 177          /************************************************************* 
 178          函数功能:该函数用来从时钟芯片读取世纪字节
 179          应用范围:
C51 COMPILER V6.12  DS12887                                                                06/27/2007 16:47:25 PAGE 4   

 180          入口参数:
 181          出口参数:
 182          *************************************************************/   
 183          unsigned char GetCentury(void)
 184          {
 185   1          return(chCenturyChannel);
 186   1      }    
 187          
 188          /************************************************************* 
 189          函数功能:该函数用来设置时钟芯片的时间
 190          应用范围:
 191          入口参数:chSeconds、chMinutes、chHours是设定时间的压缩BCD码
 192          出口参数:
 193          *************************************************************/   
 194          void SetTime(unsigned char chSeconds,unsigned char chMinutes,unsigned char chHours)
 195          {
 196   1          chRegB = chRegB | MASK_SETB_SET;        /* 禁止刷新 */
 197   1          chSecondsChannel = chSeconds;
 198   1          chMinutesChannel = chMinutes;
 199   1          chHoursChannel = chHours;
 200   1          chRegB = chRegB & MASK_CLR_SET;            /* 使能刷新 */
 201   1      }
 202          
 203          /************************************************************* 
 204          函数功能:该函数用来设置时钟芯片的日期
 205          应用范围:
 206          入口参数:chDate、chMonth、chYear是设定日期的压缩BCD码
 207          出口参数:
 208          *************************************************************/   
 209          void SetDate(unsigned char chDate,unsigned char chMonth,unsigned char chYear)
 210          {
 211   1          chRegB = chRegB | MASK_SETB_SET;        /* 禁止刷新 */
 212   1          chDateChannel = chDate;
 213   1          chMonthChannel = chMonth;
 214   1          chYearChannel = chYear;
 215   1          chRegB = chRegB & MASK_CLR_SET;            /* 使能刷新 */
 216   1      }
 217           
 218          
 219          
 220          void setup12887(uchar *p) //设置系统时间
 221          {
 222   1      	uchar i;
 223   1      	i=P12887d;
 224   1      	P12887a=0x70; P12887b=0xa2; P128870=*p++; P128871=0xff; P128872=*p++;
 225   1      	P128873=0xff; P128874=*p++; P128875=0xff; P128876=*p++; P128877=*p++;
 226   1      	P128878=*p++; P128879=*p++; P12887b=0x22; P12887a=0x20;
 227   1      	i=P12887c;
 228   1      }
 229          void read12887(uchar *p) //读取系统时间
 230          {
 231   1      	uchar a;
 232   1      	do{ a=P12887a; } while((a&0x80)==0x80);
 233   1      	*p++=P128870; *p++=P128872; *p++=P128874; *p++=P128876;
 234   1      	*p++=P128877; *p++=P128878; *p++=P128879;
 235   1      }
 236          void start12887(void) //启动时钟
 237          {
 238   1      	uchar i;
 239   1      	i=P12887d;
 240   1      	P12887a=0x70; P12887b=0xa2; P128871=0xff; P128873=0xff; P128875=0xff;
 241   1      	P12887b=0x22; P12887a=0x20;
C51 COMPILER V6.12  DS12887                                                                06/27/2007 16:47:25 PAGE 5   

 242   1      	i=P12887c;
 243   1      }
 244          
 245          /*unsigned char BCD2BIN(unsigned char cData)
 246          {
 247          	unsigned tem=0;
 248          	tem=cData&0x0f;
 249          	cData=(cData&0xf0)>>4;
 250          	tem+=cData*10;
 251          	return tem;
 252          }*/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    553    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       6
   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 + -