📄 rtc.lst
字号:
C51 COMPILER V7.50 RTC 10/12/2006 15:31:41 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE RTC
OBJECT MODULE PLACED IN .\Release\Rtc.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\..\lib\Rtc.c LARGE OPTIMIZE(9,SIZE) BROWSE ORDER MODDP2 INCDIR(..\..\inc
-\) DEBUG OBJECTEXTEND PRINT(.\Release\Rtc.lst) OBJECT(.\Release\Rtc.obj)
line level source
1
2 #include <stdio.h>
3 #include <intrins.h>
4 #include "hpserver.h"
5 #include "rtc_api.h"
6
7 /*
8 #define RTCDAYL 0x0FFC8
9 #define RTCDAYH 0x0FFC7
10 #define RTCHOUR 0x0FFC6
11 #define RTCMIN 0x0FFC5
12 #define RTCSEC 0x0FFC4
13 */
14 void rtc_date_write(unsigned char des_addr,unsigned int wr_data)
15 {
16 1 int i;
17 1 // XBYTE[RTCMASK]=0x55;
18 1 // XBYTE[RTCMASK]=0xaa;
19 1 i=XBYTE[RTCDAYH]&0xc0;
20 1 XBYTE[RTCDAYH]=((wr_data>>8)&0xff)|i;
21 1 i=XBYTE[RTCDAYH];
22 1 i=XBYTE[RTCDAYH]&0xc0;
23 1 XBYTE[RTCDAYL]=(wr_data&0xff)|i;
24 1 i=XBYTE[RTCDAYL];
25 1 // XBYTE[RTCMASK]=0xa5;
26 1 }
*** WARNING C280 IN LINE 14 OF ..\..\LIB\RTC.C: 'des_addr': unreferenced local variable
27 void rtc_time_write(unsigned char des_addr,unsigned char wr_data)//write to hour and minute register
28 {
29 1 int i,ret_val;
30 1 // printf("wr_data=%bx\n",wr_data);
31 1 // XBYTE[RTCMASK]=0x55;
32 1 // XBYTE[RTCMASK]=0xaa;
33 1 switch(des_addr)
34 1 {
35 2 case 5:
36 2 i=XBYTE[RTCMIN]&0xc0;
37 2 // printf("in case i=%d,wr_data|i=%d\n",i,wr_data|i);
38 2 XBYTE[RTCMIN]=wr_data|i;
39 2 break;
40 2 case 6:
41 2 i=XBYTE[RTCHOUR]&0xe0;
42 2 // printf("in case i=%d,wr_data|i=%d\n",i,wr_data|i);
43 2 XBYTE[RTCHOUR]=wr_data|i;
44 2 break;
45 2 default:
46 2 break;
47 2 }
48 1 // XBYTE[RTCMASK]=0xa5;
49 1 ret_val=XBYTE[RTCHOUR]&0x1f;
50 1 // printf("hour_val=%d\n",ret_val);
51 1 ret_val=XBYTE[RTCMIN]&0x3f;
52 1 // printf("min_val=%d\n\n",ret_val);
53 1 }
C51 COMPILER V7.50 RTC 10/12/2006 15:31:41 PAGE 2
54
55 char* print_current_time(void)
56 {
57 1 char dest[16];
58 1 unsigned int hour_val,min_val,sec_val;
59 1 hour_val=rtc_read(0x06);
60 1
61 1 min_val=rtc_read(0x05);
62 1 sec_val=rtc_read(0x04);
63 1 //printf("%d:%d:%d\n",hour_val,min_val,sec_val);
64 1 sprintf(dest,"%d:%d:%d\n",hour_val,min_val,sec_val);
65 1 return dest;
66 1 }
67
68 unsigned int rtc_read(unsigned char des_addr)//,unsigned char wr_data)
69 {
70 1
71 1 unsigned int ret_val=0;
72 1 unsigned int ret_val2=0;
73 1
74 1 switch(des_addr)
75 1 {
76 2 case 4:
77 2 ret_val=XBYTE[RTCSEC]&0x3f;
78 2 break;
79 2 case 5:
80 2 ret_val=XBYTE[RTCMIN]&0x3f;
81 2 break;
82 2 case 6:
83 2 ret_val=XBYTE[RTCHOUR]&0x1f;
84 2 break;
85 2 case 7:
86 2 ret_val=XBYTE[RTCDAYH];
87 2 ret_val2=XBYTE[RTCDAYL];
88 2 ret_val=(ret_val<<8)+ret_val2;
89 2 break;
90 2 default:
91 2 break;
92 2 }
93 1 return ret_val;
94 1 }
95
96 char *print_current_date(void)
97 {
98 1 char dest[16];
99 1 int year_val=2000,month_val=1,date_val=1;
100 1 unsigned int day_val;//,hour_val,min_val,sec_val;
101 1 day_val=rtc_read(0x07);
102 1 while(day_val>365)
103 1 {
104 2 if(check_leap_year(year_val))
105 2 day_val--;
106 2 day_val=day_val-365;
107 2 year_val++;
108 2 }
109 1 while(1)
110 1 {
111 2 if(day_val==0) //the date of last day of the leap year
112 2 {
113 3 year_val--;
114 3 break;
115 3 }
C51 COMPILER V7.50 RTC 10/12/2006 15:31:41 PAGE 3
116 2 if(day_val<=31&&day_val>0) //Jan
117 2 {
118 3 date_val=day_val;
119 3 break;
120 3 }
121 2 day_val=day_val-31;
122 2 month_val++;
123 2 if(check_leap_year(year_val))
124 2 {
125 3 if(day_val<=29&&day_val>0)
126 3 {
127 4 date_val=day_val;
128 4 break;
129 4 }
130 3 else
131 3 day_val=day_val-29;
132 3 }
133 2 else
134 2 {
135 3 if(day_val<=28&&day_val>0)
136 3 {
137 4 date_val=day_val;
138 4 break;
139 4 }
140 3 else
141 3 day_val=day_val-28;
142 3 }
143 2 month_val++;
144 2 if(day_val<=31&&day_val>0) //Mar
145 2 {
146 3 date_val=day_val;
147 3 break;
148 3 }
149 2 day_val=day_val-31;
150 2 month_val++;
151 2 if(day_val<=30&&day_val>0)
152 2 {
153 3 date_val=day_val;
154 3 break;
155 3 }
156 2 day_val=day_val-30;
157 2 month_val++;
158 2 if(day_val<=31&&day_val>0) //May
159 2 {
160 3 date_val=day_val;
161 3 break;
162 3 }
163 2 day_val=day_val-31;
164 2 month_val++;
165 2 if(day_val<=30&&day_val>0)
166 2 {
167 3 date_val=day_val;
168 3 break;
169 3 }
170 2 day_val=day_val-30;
171 2 month_val++;
172 2 if(day_val<=31&&day_val>0) //Jul
173 2 {
174 3 date_val=day_val;
175 3 break;
176 3 }
177 2 day_val=day_val-31;
C51 COMPILER V7.50 RTC 10/12/2006 15:31:41 PAGE 4
178 2 month_val++;
179 2 if(day_val<=31&&day_val>0) //Aug
180 2 {
181 3 date_val=day_val;
182 3 break;
183 3 }
184 2 day_val=day_val-31;
185 2 month_val++;
186 2 if(day_val<=30&&day_val>0)
187 2 {
188 3 date_val=day_val;
189 3 break;
190 3 }
191 2 day_val=day_val-30;
192 2 month_val++;
193 2 if(day_val<=31&&day_val>0) //Oct
194 2 {
195 3 date_val=day_val;
196 3 break;
197 3 }
198 2 day_val=day_val-31;
199 2 month_val++;
200 2 if(day_val<=30&&day_val>0)
201 2 {
202 3 date_val=day_val;
203 3 break;
204 3 }
205 2 day_val=day_val-30;
206 2 month_val++;
207 2 if(day_val<=31&&day_val>0) //Dec
208 2 {
209 3 date_val=day_val;
210 3 break;
211 3 }
212 2 }
213 1 // printf("\n%d-%d-%d\n",year_val,month_val,date_val);
214 1 sprintf(dest,"%d-%d-%d\n",year_val,month_val,date_val);
215 1 return dest;
216 1 }
217
218 int check_leap_year(int year)
219 {
220 1 if((year%4)!=0)
221 1 return 0;
222 1 if(((year%4)==0)&&((year%100)!=0))
223 1 return 1;
224 1 if(((year%100)==0)&&((year%400)==0))
225 1 return 1;
226 1 else
227 1 return 0;
228 1 }
229
230 int get_days(unsigned int year,unsigned int month,unsigned int date)
231 {
232 1 unsigned int day_val=0;
233 1 int year_val,month_val;
234 1 for(year_val=year-1;year_val>=0x7d0;year_val--)
235 1 {
236 2 if(check_leap_year(year_val)==1)
237 2 day_val=day_val+0x16e;
238 2 else
239 2 day_val=day_val+0x16d;
C51 COMPILER V7.50 RTC 10/12/2006 15:31:41 PAGE 5
240 2 }
241 1 if((check_leap_year(year)==1)&&(month>2))
242 1 //if(check_leap_year(year)==1)
243 1 day_val=day_val+1;
244 1 month_val=month-1;
245 1 switch(month_val)
246 1 {
247 2 case 11:
248 2 day_val=day_val+0x14e;
249 2 break;
250 2 case 10:
251 2 day_val=day_val+0x130;
252 2 break;
253 2 case 9:
254 2 day_val=day_val+0x111;
255 2 break;
256 2 case 8:
257 2 day_val=day_val+0xf3;
258 2 break;
259 2 case 7:
260 2 day_val=day_val+0xd4;
261 2 break;
262 2 case 6:
263 2 day_val=day_val+0xb5;
264 2 break;
265 2 case 5:
266 2 day_val=day_val+0x97;
267 2 break;
268 2 case 4:
269 2 day_val=day_val+0x78;
270 2 break;
271 2 case 3:
272 2 day_val=day_val+0x5a;
273 2 break;
274 2 case 2:
275 2 day_val=day_val+0x3b;
276 2 break;
277 2 case 1:
278 2 day_val=day_val+0x1f;
279 2 break;
280 2 default:
281 2 break;
282 2 }
283 1 day_val=day_val+date;
284 1 printf("dat_val=%d\n",day_val);
285 1 return day_val;
286 1 }
287
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1181 ----
CONSTANT SIZE = 32 ----
XDATA SIZE = ---- 55
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -