📄 ds1302.lst
字号:
171 1 Write(); //对DS1302写命令字和地址
172 1 ds1302_dat = 1;
173 1 for(a=0;a<size;a++) //读出DS1302数据
174 1 {
175 2 ACC_0 = ds1302_dat;
176 2 ds1302_clk = 1; ds1302_clk = 0; ACC_1 = ds1302_dat;
177 2 ds1302_clk = 1; ds1302_clk = 0; ACC_2 = ds1302_dat;
178 2 ds1302_clk = 1; ds1302_clk = 0; ACC_3 = ds1302_dat;
179 2 ds1302_clk = 1; ds1302_clk = 0; ACC_4 = ds1302_dat;
C51 COMPILER V7.02a DS1302 04/22/2003 22:51:04 PAGE 4
180 2 ds1302_clk = 1; ds1302_clk = 0; ACC_5 = ds1302_dat;
181 2 ds1302_clk = 1; ds1302_clk = 0; ACC_6 = ds1302_dat;
182 2 ds1302_clk = 1; ds1302_clk = 0; ACC_7 = ds1302_dat;
183 2 b = ACC;
184 2 *(buffer+a)=b;
185 2 ds1302_clk = 1; ds1302_clk = 0;
186 2 }
187 1 ds1302_rst = 0;
188 1 ds1302_clk = 1;
189 1 }
190
191 void WriteRam(uchar data * buffer,uchar size) //向RAM中写入多个字节
192 {
193 1 register uchar a;
194 1 ds1302_clk = 0;
195 1 ds1302_rst = 0;
196 1 ds1302_rst = 1;
197 1 ACC = 0xfe; //命令字为FE
198 1 Write(); //对DS1302写命令字和地址
199 1 for(a=0;a<size;a++)
200 1 {
201 2 ACC = *(buffer+a);
202 2 Write(); //对DS1302写数据
203 2 }
204 1 ds1302_rst = 0;
205 1 ds1302_clk = 1;
206 1 }
207
208 void WriteRTC(uchar data * buffer,uchar size) //向DS1302中写入多个字节
209 {//注意:连续写DS1302只能是8个字节一起写
210 1 register uchar a;
211 1 ds1302_clk = 0;
212 1 ds1302_rst = 0;
213 1 ds1302_rst = 1;
214 1 ACC = 0xbe; //命令字为BEH
215 1 Write(); //对DS1302写命令字和地址
216 1 for(a=0;a<size;a++)
217 1 {
218 2 ACC = *(buffer+a);
219 2 Write(); //对DS1302写数据
220 2 }
221 1 ds1302_rst = 0;
222 1 ds1302_clk = 1;
223 1 }
224
225 uchar ReadSec(void) //从DS1302中读出秒字节
226 {
227 1 return ReadRTC_Byte(0x81);
228 1 }
229
230 uchar ReadMin(void) //从DS1302中读出分字节
231 {
232 1 return ReadRTC_Byte(0x83);
233 1 }
234
235 uchar ReadHr(void) //从DS1302中读出时字节
236 {
237 1 return ReadRTC_Byte(0x85);
238 1 }
239
240 uchar ReadDay(void) //从DS1302中读出日字节
241 {
C51 COMPILER V7.02a DS1302 04/22/2003 22:51:04 PAGE 5
242 1 return ReadRTC_Byte(0x87);
243 1 }
244
245 uchar ReadMonth(void) //从DS1302中读出月字节
246 {
247 1 return ReadRTC_Byte(0x89);
248 1 }
249
250 uchar ReadWeek(void) //从DS1302中读出星期字节
251 {
252 1 return ReadRTC_Byte(0x8B);
253 1 }
254
255 uchar ReadYear(void) //从DS1302中读出年字节
256 {
257 1 return ReadRTC_Byte(0x8D);
258 1 }
259
260 void WriteSec(uchar number) //向DS1302中写入秒字节
261 {
262 1 WriteRTC_Byte(0x80,number);
263 1 }
264
265 void WriteMin(uchar number) //向DS1302中写入分字节
266 {
267 1 WriteRTC_Byte(0x82,number);
268 1 }
269
270 void WriteHr(uchar number) //向DS1302中写入时字节
271 {
272 1 WriteRTC_Byte(0x84,number);
273 1 }
274
275 void WriteDay(uchar number) //向DS1302中写入日字节
276 {
277 1 WriteRTC_Byte(0x86,number);
278 1 }
279
280 void WriteMonth(uchar number) //向DS1302中写入月字节
281 {
282 1 WriteRTC_Byte(0x88,number);
283 1 }
284
285 void WriteWeek(uchar number) //向DS1302中写入星期字节
286 {
287 1 WriteRTC_Byte(0x8A,number);
288 1 }
289
290 void WriteYear(uchar number) //向DS1302中写入年字节
291 {
292 1 WriteRTC_Byte(0x8C,number);
293 1 }
294
295 void WriteControl(uchar number) //向慢速充电控制寄存器写入控制字节
296 {
297 1 WriteRTC_Byte(0x90,number);
298 1 }
299
300 void DisableWP(void) //禁止写保护
301 {
302 1 WriteRTC_Byte(0x8E,0);
303 1 }
C51 COMPILER V7.02a DS1302 04/22/2003 22:51:04 PAGE 6
304
305 void EnableWP(void) //允许写保护
306 {
307 1 WriteRTC_Byte(0x8E,0x80);
308 1 }
309
310 void main(void) //主程序
311 {
312 1 uchar sec,min,hr,day,month,week,year;
313 1 uchar data buffer1[32] =
314 1 {32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63};
315 1 uchar data buffer2[8] = {45,45,15,13,3,2,01,0};
316 1 ReadRTC(buffer2,8);
317 1 DisableWP(); //禁止写保护
318 1 WriteControl(0xaa); //向慢速充电控制寄存器写入控制字节
319 1 WriteRam(buffer1,31); //写DS1302RAM
320 1 WriteRTC(buffer2,8); //写DS1302时钟
321 1 EnableWP(); //允许写保护
322 1 ReadRam(buffer1,31); //读DS1302RAM
323 1 ReadRTC(buffer2,8); //读DS1302时钟
324 1 sec = ReadSec(); //读秒
325 1 min = ReadMin(); //读分
326 1 hr = ReadHr(); //读小时
327 1 day = ReadDay(); //读日
328 1 month = ReadMonth(); //读月
329 1 week = ReadWeek(); //读星期
330 1 year = ReadYear(); //读年
331 1 ACC = 0;
332 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 678 ----
CONSTANT SIZE = 40 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 47
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 + -