📄 rtc.lst
字号:
C51 COMPILER V7.50 RTC 05/27/2007 09:00:08 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE RTC
OBJECT MODULE PLACED IN rtc.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE rtc.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * 标题: student2000单片机开发系统演示程序 *
3 * 文件: fun.C *
4 * 日期: 2007-5-4 *
5 * 版本: 1.0 *
6
7 ********************************************************************************
8 * 描述: *
9 * 大部分通用函数集合 *
10 * RS232,RS485,延时函数,协议框架演示等 */
11 #include <reg52.h>
12 #include <intrins.h>
13 #include <string.h>
14 #include <absacc.h>
15 #include <stdio.h>
16 #include "SYBXT1.h"
17 sbit ds_scl=P1^1;
18 sbit ds_rst=P1^3;
19 sbit ds_sda= P1^0;
20 sbit ACC7=ACC^7;
21 sbit ACC0=ACC^0;
22 DateTime dt;
23 xdata DateTime dtset;
24 xdata uchar str[50];
25 //xdata SetJdqTime dtjdq;
26 bit clock_12h=0;//24小时
27 bit clock_am_pm=0;//上午
28 bit clockset_12h=0;//24小时
29 bit clockset_am_pm=0;//上午
30 static void wt_byte(uchar xx)
31 {
32 1 uchar i=8;
33 1 ACC=xx;
34 1 do
35 1 {
36 2 ds_scl=0;
37 2 ds_sda=ACC0;
38 2 ACC>>=1;
39 2 _nop_();
40 2 ds_scl=1;
41 2 }
42 1 while (--i);
43 1 }
44
45 static uchar rd_byte(void)
46 {
47 1 uchar i=8;
48 1 do
49 1 {
50 2 ds_scl=1;
51 2 ACC>>=1;
52 2 ds_scl=0;
53 2 _nop_();
54 2 ACC7=ds_sda;
55 2 }
C51 COMPILER V7.50 RTC 05/27/2007 09:00:08 PAGE 2
56 1 while (--i);
57 1 return (ACC);
58 1 }
59 void ds_read(uchar command,uchar idata *time)
60 {
61 1 uchar command1;
62 1 command1=command;
63 1 command=command|0x01;
64 1
65 1 ds_scl=0;
66 1 ds_rst=1;
67 1 wt_byte(command);
68 1 *time=rd_byte();
69 1 ds_rst=0;
70 1 if(command1== SECOND_ADDR)
71 1 {
72 2 *time &= 0x7f;
73 2 }
74 1 else if(command1 == HOUR_ADDR)
75 1 {
76 2 if((*time & 0x80) != 0)//
77 2 {//12小时
78 3 clock_12h = 1;
79 3 //确定是上午还是下午?
80 3 if((*time&0x20) != 0)
81 3 clock_am_pm = 1;//下午
82 3
83 3 else
84 3 clock_am_pm = 0;//上午
85 3
86 3 *time &= 0x1f;//范围0——12的bcd数
87 3 }
88 2 else
89 2 {//24小时
90 3 clock_12h = 1;
91 3 *time &= 0x3f;
92 3 }
93 2 }
94 1 *time =bcd2_hex(*time);
95 1 }
96 //用bcd输入如:0x00~0x59:表示00~59的十进制数
97 void ds_write(uchar command,uchar idata *time)
98 {
99 1 uchar i;
100 1 clock_12h=0;//24小时
101 1 clock_am_pm=0;//上午
102 1
103 1 i = *time / 10;
104 1 i <<= 4;
105 1 i |= (*time % 10);
106 1 *time = i;
107 1
108 1 if(command == HOUR_ADDR)
109 1 {
110 2 if(clock_12h)
111 2 {
112 3 if(clock_am_pm)
113 3 *time |= 0xa0;
114 3 else
115 3 {
116 4 *time &= 0x1f;
117 4 *time |= 0x80;
C51 COMPILER V7.50 RTC 05/27/2007 09:00:08 PAGE 3
118 4 }
119 3 }
120 2 else
121 2 *time &= 0x7f;
122 2 }
123 1 command &= 0xfe;//set write state
124 1 ds_scl=0;
125 1 ds_rst=1;
126 1 wt_byte(command);
127 1 wt_byte(*time);
128 1 ds_rst=0;
129 1 }
130
131 uchar bcd2_hex(uchar val)
132 {
133 1 uchar i;
134 1 i = val&0x0f;
135 1 val >>= 4;
136 1 val &= 0x0f;
137 1 val *= 10;
138 1 i += val;
139 1 return i;
140 1 }
141 /*
142 void ds_checktime(void)
143 {
144 //设置年月日是分秒
145
146
147 uchar i;
148 uchar n;
149
150 i=0;
151 dt.second=0;
152 dt.year=07;
153 dt.month=02;
154 dt.day=10;
155 dt.week=3;
156 dt.hour=13;
157 dt.minute=20;
158 dt.second=0;
159 ds_write(CONTROL_ADDR, (uchar *)&i);
160
161 i=dt.second&0x7f;
162 ds_write(SECOND_ADDR, (uchar *)&i);
163 //i=0;
164 ds_write(MINUTE_ADDR,(uchar *) &dt.minute);
165 //i=12;
166 ds_write(HOUR_ADDR, (uchar *)&dt.hour);
167 //i=31;
168 ds_write(DAY_ADDR, (uchar *)&dt.day);
169 //i=5;
170 ds_write(MONTH_ADDR,(uchar *)&dt.month);
171 //i=06;
172 ds_write(YEAR_ADDR,(uchar *)&dt.year);
173
174
175 i=0;
176 ds_write(0x8e,(uchar *)&i);
177 n=0;
178 n =sprintf(str, "%02bd-",dt.year);
179 n+=sprintf(str+n,"%02bd-",dt.month);
C51 COMPILER V7.50 RTC 05/27/2007 09:00:08 PAGE 4
180 n+=sprintf(str+n,"%02bd ",dt.day);
181 n+=sprintf(str+n,"%02bd:",dt.hour);
182 n+=sprintf(str+n,"%02bd:",dt.minute);
183 n+=sprintf(str+n,"%02bd",dt.second);
184 //send_bytes(str);
185
186
187 }
188 */
189 void ds_init(void)
190 {
191 1 xdata uchar ss[5];
192 1 uchar i;
193 1 ds_scl=0;
194 1 ds_rst=0;
195 1 ds_sda=0;
196 1 ds_read(0x81,(uchar *)&i);
197 1 if (i&0x80)
198 1 {
199 2 // send_bytes("clock has been stop!\n");
200 2 // send_bytes("it's running!\n");
201 2 i=0;
202 2 ds_write(0x8e,(uchar*)&i);
203 2 i=0;
204 2 ds_write(0x80,(uchar*)&i);
205 2 i=0xa5;
206 2 ds_write(0x90,(uchar*)&i);
207 2 }
208 1 //read ram
209 1 ds_read(0xc1,(uchar *)&i);
210 1 ss[0]=i;
211 1 ds_read(0xc3,(uchar *)&i);
212 1 ss[1]=i;
213 1 if(strncmp(ss,"ok",2)==0)
214 1 {
215 2 //不需要初始化;
216 2 }
217 1 else
218 1 {
219 2
220 2 //设置年月日是分秒
221 2 i=0;
222 2 ds_write(CONTROL_ADDR, (uchar *)&i);
223 2 i=0;
224 2 ds_write(SECOND_ADDR, (uchar *)&i);
225 2 i=0;
226 2 ds_write(MINUTE_ADDR,(uchar *) &i);
227 2 i=12;
228 2 ds_write(HOUR_ADDR, (uchar *)&i);
229 2 i=31;
230 2 ds_write(DAY_ADDR, (uchar *)&i);
231 2 i=5;
232 2 ds_write(MONTH_ADDR,(uchar *)&i);
233 2 i=06;
234 2 ds_write(YEAR_ADDR,(uchar *)&i);
235 2
236 2
237 2 i=0;
238 2 ds_write(0x8e,(uchar *)&i);
239 2
240 2
241 2 i=0xa5;
C51 COMPILER V7.50 RTC 05/27/2007 09:00:08 PAGE 5
242 2 ds_write(0x90,(uchar *)&i);
243 2 i='o';
244 2 ds_write(0xc0,(uchar *)&i);
245 2 i='k';
246 2 ds_write(0xc2,(uchar *)&i);
247 2 send_bytes("set default time!\n");
248 2
249 2 //Delay_msec(5);
250 2 }
251 1 send_bytes("time format error,has modify\n\n");
252 1 // ds_checktime();
253 1 }
254 bit bgo=1;
255 void timeoutput()
256 {
257 1 uchar i;
258 1 int n;
259 1 int second;
260 1 ds_read(SECOND_ADDR+1,(uchar *)&i);
261 1 dt.second =i;
262 1 ds_read(MINUTE_ADDR+1,(uchar *)&i);
263 1 dt.minute=i;
264 1 ds_read(HOUR_ADDR+1,(uchar *)&i);
265 1 dt.hour=i;
266 1 ds_read(DAY_ADDR+1,(uchar *)&i);
267 1 dt.day=i;
268 1 ds_read(MONTH_ADDR+1,(uchar *)&i);
269 1 dt.month=i;
270 1 ds_read(YEAR_ADDR+1,(uchar *)&i);
271 1 dt.year=i;
272 1 if(bgo)
273 1 {
274 2 n=sprintf(str,"%02bd-",0x07f&dt.year);
275 2 n+=sprintf(str+n,"%02bd-",0x07f&dt.month);
276 2 n+=sprintf(str+n,"%02bd ",0x07f&dt.day);
277 2 n+=sprintf(str+n,"%02bd:",0x07f&dt.hour);
278 2 n+=sprintf(str+n,"%02bd:",0x07f&dt.minute);
279 2 n+=sprintf(str+n,"%02bd\n",0x07f&dt.second);
280 2 send_bytes(str);
281 2 bgo=0;
282 2 }
283 1 if(second!=dt.second)
284 1 {
285 2 n=0;
286 2 n=sprintf(str,"%02bd-",0x07f&dt.year);
287 2 n+=sprintf(str+n,"%02bd-",0x07f&dt.month);
288 2 n+=sprintf(str+n,"%02bd ",0x07f&dt.day);
289 2 n+=sprintf(str+n,"%02bd:",0x07f&dt.hour);
290 2 n+=sprintf(str+n,"%02bd:",0x07f&dt.minute);
291 2 n+=sprintf(str+n,"%02bd\n",0x07f&dt.second);
292 2 send_bytes(str);
293 2 }
294 1 second=dt.second;
295 1
296 1
297 1 }
298
299
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 966 ----
C51 COMPILER V7.50 RTC 05/27/2007 09:00:08 PAGE 6
CONSTANT SIZE = 81 ----
XDATA SIZE = 57 5
PDATA SIZE = ---- ----
DATA SIZE = 7 7
IDATA SIZE = ---- ----
BIT SIZE = 5 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -