📄 ds12887.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 + -