📄 ds1302a.lst
字号:
461 00f4 01F4 /* function v_BurstW1302R size 24 (17) */
231:../ds1302a/ds1302a.c **** pReDa++;
232:../ds1302a/ds1302a.c **** }
233:../ds1302a/ds1302a.c **** SETBIT(PORTD,T_CLK);
462 _BurstW1302R, .-v_BurstW1302R
234:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_RST);
465 tabn 224,0,0,.Lscope9-.LFBB9
466 .Lscope9:
469 00fa DF91 .global v_BurstR1302R
471 00fe 1F91 v_BurstR1302R:
473 .LM70:
474 .LFBB10:
475 /* prologue: frame size=0 */
476 push r17
477 push r28
478 push r29
479 /* prologue end (size=3) */
480 movw r28,r24
482 .LM71:
483 cbi 50-0x20,5
235:../ds1302a/ds1302a.c **** }
236:../ds1302a/ds1302a.c ****
237:../ds1302a/ds1302a.c ****
238:../ds1302a/ds1302a.c **** /********************************************************************
239:../ds1302a/ds1302a.c **** * 名称: v_BurstR1302R
240:../ds1302a/ds1302a.c **** * 说明: 先写地址,后读命令/数据(寄存器多字节方式)
241:../ds1302a/ds1302a.c **** * 功能: 读取DS1302寄存器数据
242:../ds1302a/ds1302a.c **** * 调用: ds1302_write_a_byte() , ds1302_read_a_byte()
243:../ds1302a/ds1302a.c **** * 输入: pReDa: 寄存器数据地址
244:../ds1302a/ds1302a.c **** * 返回值: 无
245:../ds1302a/ds1302a.c **** ***********************************************************************/
246:../ds1302a/ds1302a.c **** void v_BurstR1302R(unsigned char *pReDa)
247:../ds1302a/ds1302a.c **** {
485 7
487 .LM73:
488 sbi 50-0x20,5
490 0104 CF93 .LM74:
491 0106 DF93 ldi r24,lo8(-1)
492 rcall ds1302_write_a_byte
493 0108 EC01 ldi r17,lo8(31)
248:../ds1302a/ds1302a.c **** unsigned char i;
249:../ds1302a/ds1302a.c **** //DDRC=0xff;
250:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_RST);
494 tabn 68,0,256,.LM75-.LFBB10
495 .LM75:
496 010a 9598 rcall ds1302_read_a_byte
251:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_CLK);
497 Y+,r24
499 010c 9798 .LM76:
252:../ds1302a/ds1302a.c **** SETBIT(PORTD,T_RST);
500 bi r17,lo8(-(-1))
501 brne .L45
253:../ds1302a/ds1302a.c **** ds1302_write_a_byte(0xff); // 0xff:寄存器多字节读命令
503 77:
504 sbi 50-0x20,7
506 0112 00D0 .LM78:
507 0114 1FE1 cbi 50-0x20,5
508 /* epilogue: frame size=0 */
254:../ds1302a/ds1302a.c **** for (i=31; i>0; i--) //31Byte 寄存器数据
255:../ds1302a/ds1302a.c **** {
256:../ds1302a/ds1302a.c **** *pReDa = ds1302_read_a_byte(); //读1Byte数据
509 29
510 pop r28
511 0116 00D0 pop r17
512 0118 8993 ret
513 /* epilogue end (size=4) */
514 /* function v_BurstR1302R size 21 (14) */
257:../ds1302a/ds1302a.c **** pReDa++;
258:../ds1302a/ds1302a.c **** }
259:../ds1302a/ds1302a.c **** //DDRC=0xff;
260:../ds1302a/ds1302a.c **** SETBIT(PORTD,T_CLK);
517 192,0,0,.LFBB10-.LFBB10
519 011e 979A .Lscope10:
261:../ds1302a/ds1302a.c **** CLRBIT(PORTD,T_RST);
520 tabs "check_ds1302:F(0,11)",36,0,0,check_ds1302
521 .global check_ds1302
523 check_ds1302:
525 0124 CF91 .LM79:
526 0126 1F91 .LFBB11:
527 0128 0895 /* prologue: frame size=0 */
528 /* prologue end (size=0) */
530 .LM80:
531 ldi r22,lo8(-128)
532 ldi r24,lo8(-114)
533 rcall ds1302_write
535 .LM81:
536 ldi r24,lo8(-114)
537 rcall ds1302_read
538 ldi r18,lo8(0)
262:../ds1302a/ds1302a.c **** }
263:../ds1302a/ds1302a.c ****
264:../ds1302a/ds1302a.c **** uchar check_ds1302(void)
265:../ds1302a/ds1302a.c **** {
539 i r24,lo8(-128)
540 brne .L51
542 .LM82:
543 ldi r18,lo8(1)
266:../ds1302a/ds1302a.c **** ds1302_write(0x8e,0x80);
544 r19,hi8(1)
545 .L51:
547 012c 8EE8 .LM83:
548 012e 00D0 movw r24,r18
267:../ds1302a/ds1302a.c **** if(ds1302_read(0x8e)==0x80) return 1;
549 ilogue: frame size=0 */
550 ret
551 0130 8EE8 /* epilogue end (size=1) */
552 0132 00D0 /* function check_ds1302 size 13 (12) */
554 0136 30E0 .Lscope11:
556 013a 01F4 .global ds1302_write_time
558 ds1302_write_time:
560 013e 30E0 .LM84:
561 .LFBB12:
268:../ds1302a/ds1302a.c **** return 0;
269:../ds1302a/ds1302a.c **** }
562 frame size=0 */
563 /* prologue end (size=0) */
565 .LM85:
566 0142 0895 ldi r22,lo8(0)
567 ldi r24,lo8(-114)
568 rcall ds1302_write
570 .LM86:
571 ldi r22,lo8(-128)
572 ldi r24,lo8(-128)
573 rcall ds1302_write
270:../ds1302a/ds1302a.c ****
271:../ds1302a/ds1302a.c ****
272:../ds1302a/ds1302a.c **** void ds1302_read_time(void)
273:../ds1302a/ds1302a.c **** { uchar a,b,c,d;int i;
274:../ds1302a/ds1302a.c **** year=ds1302_read(0x8c); //年
275:../ds1302a/ds1302a.c **** month=ds1302_read(0x88);//月
276:../ds1302a/ds1302a.c **** day=ds1302_read(0x86); //日
277:../ds1302a/ds1302a.c **** week=ds1302_read(0x8a); //周
278:../ds1302a/ds1302a.c **** hour=ds1302_read(0x84); //时
279:../ds1302a/ds1302a.c **** minute=ds1302_read(0x82); //分
280:../ds1302a/ds1302a.c **** second=ds1302_read(0x80); //秒
281:../ds1302a/ds1302a.c **** // 第一排LED全灭
282:../ds1302a/ds1302a.c **** // 第二排LED全亮
283:../ds1302a/ds1302a.c **** //write728x(0x02,0xa4);
284:../ds1302a/ds1302a.c **** //write728x(0x03,0xb0);
285:../ds1302a/ds1302a.c **** //PORTB=0xff;
286:../ds1302a/ds1302a.c **** a=(second & 0x0f);
287:../ds1302a/ds1302a.c **** //send_byte(disp_table[a]);
288:../ds1302a/ds1302a.c **** write728x(0x00,disp_table[a]);
289:../ds1302a/ds1302a.c **** //PORTB=0xfe;
290:../ds1302a/ds1302a.c **** for(i=0;i<100;i++) //拉低 500us
291:../ds1302a/ds1302a.c **** {
292:../ds1302a/ds1302a.c **** _delay_us(50);
293:../ds1302a/ds1302a.c **** }
294:../ds1302a/ds1302a.c ****
295:../ds1302a/ds1302a.c **** //PORTB=0xff;
296:../ds1302a/ds1302a.c **** b=(second >> 4);
297:../ds1302a/ds1302a.c **** write728x(0x01,disp_table[b]);
298:../ds1302a/ds1302a.c **** // send_byte(disp_table[b]);
299:../ds1302a/ds1302a.c **** //PORTB=0xfd;
300:../ds1302a/ds1302a.c ****
301:../ds1302a/ds1302a.c **** for(i=0;i<100;i++) //拉低 500us
302:../ds1302a/ds1302a.c **** {
303:../ds1302a/ds1302a.c **** _delay_us(50);
304:../ds1302a/ds1302a.c **** }
305:../ds1302a/ds1302a.c ****
306:../ds1302a/ds1302a.c ****
307:../ds1302a/ds1302a.c **** //PORTB=0xff;
308:../ds1302a/ds1302a.c **** b=(minute & 0x0f);
309:../ds1302a/ds1302a.c **** write728x(0x01,disp_table[b]);
310:../ds1302a/ds1302a.c **** //send_byte(disp_table[b]);
311:../ds1302a/ds1302a.c **** //PORTB=0xfb;
312:../ds1302a/ds1302a.c ****
313:../ds1302a/ds1302a.c **** for(i=0;i<100;i++) //拉低 500us
314:../ds1302a/ds1302a.c **** {
315:../ds1302a/ds1302a.c **** _delay_us(50);
316:../ds1302a/ds1302a.c **** }
317:../ds1302a/ds1302a.c ****
318:../ds1302a/ds1302a.c **** // PORTB=0xff;
319:../ds1302a/ds1302a.c **** b=(minute >> 4);
320:../ds1302a/ds1302a.c **** write728x(0x01,disp_table[b]);
321:../ds1302a/ds1302a.c **** // send_byte(disp_table[b]);
322:../ds1302a/ds1302a.c **** // PORTB=0xf7;
323:../ds1302a/ds1302a.c ****
324:../ds1302a/ds1302a.c **** for(i=0;i<100;i++) //拉低 500us
325:../ds1302a/ds1302a.c **** {
326:../ds1302a/ds1302a.c **** _delay_us(50);
327:../ds1302a/ds1302a.c **** }
328:../ds1302a/ds1302a.c ****
329:../ds1302a/ds1302a.c **** //PORTC|=(1<<4);
330:../ds1302a/ds1302a.c ****
331:../ds1302a/ds1302a.c **** }
332:../ds1302a/ds1302a.c ****
333:../ds1302a/ds1302a.c ****
334:../ds1302a/ds1302a.c **** void ds1302_write_time(void)
335:../ds1302a/ds1302a.c **** {
575 22,lo8(-87)
576 ldi r24,lo8(-112)
577 rcall ds1302_write
579 .LM88:
336:../ds1302a/ds1302a.c **** ds1302_write(0x8e,0x00); //关闭写保护
580 r22,lo8(8)
581 ldi r24,lo8(-116)
582 0144 60E0 rcall ds1302_write
584 0148 00D0 .LM89:
337:../ds1302a/ds1302a.c **** ds1302_write(0x80,0x80); //暂停
585 r22,lo8(5)
586 ldi r24,lo8(-120)
587 014a 60E8 rcall ds1302_write
589 014e 00D0 .LM90:
338:../ds1302a/ds1302a.c **** ds1302_write(0x90,0xa9); //涓流充电
590 r22,lo8(3)
591 ldi r24,lo8(-122)
592 0150 69EA rcall ds1302_write
594 0154 00D0 .LM91:
339:../ds1302a/ds1302a.c **** ds1302_write(0x8c,0x08); //年
595 r22,lo8(6)
596 ldi r24,lo8(-118)
597 0156 68E0 rcall ds1302_write
599 015a 00D0 .LM92:
340:../ds1302a/ds1302a.c **** ds1302_write(0x88,0x05); //月
600 r22,lo8(16)
601 ldi r24,lo8(-124)
602 015c 65E0 rcall ds1302_write
604 0160 00D0 .LM93:
341:../ds1302a/ds1302a.c **** ds1302_write(0x86,0x03); //日
605 r22,lo8(64)
606 ldi r24,lo8(-126)
607 0162 63E0 rcall ds1302_write
609 0166 00D0 .LM94:
342:../ds1302a/ds1302a.c **** ds1302_write(0x8a,0x06); //周
610 r22,lo8(37)
611 ldi r24,lo8(-128)
612 0168 66E0 rcall ds1302_write
614 016c 00D0 .LM95:
343:../ds1302a/ds1302a.c **** ds1302_write(0x84,0x10); //时
615 r22,lo8(-128)
616 ldi r24,lo8(-114)
617 016e 60E1 rcall ds1302_write
618 0170 84E8 /* epilogue: frame size=0 */
619 0172 00D0 ret
344:../ds1302a/ds1302a.c **** ds1302_write(0x82,0x40); //分
620 ilogue end (size=1) */
621 /* function ds1302_write_time size 34 (33) */
623 0176 82E8 .Lscope12:
345:../ds1302a/ds1302a.c **** ds1302_write(0x80,0x25); //秒
625 bs "send_byte:P(0,11)",64,0,0,25
626 .global send_byte
628 017c 80E8 send_byte:
346:../ds1302a/ds1302a.c **** ds1302_write(0x8e,0x80); //打开写保护
630 :
631 .LFBB13:
632 0180 60E8 /* prologue: frame size=0 */
633 0182 8EE8 /* prologue end (size=0) */
634 0184 00D0 mov r25,r24
636 0186 0895 .LM97:
637 cbi 56-0x20,0
639 .LM98:
640 sbi 56-0x20,0
641 .L56:
643 .LM99:
644 sbic 54-0x20,2
645 rjmp .L56
347:../ds1302a/ds1302a.c **** }
348:../ds1302a/ds1302a.c ****
349:../ds1302a/ds1302a.c **** // ***********************************************************
350:../ds1302a/ds1302a.c **** // * 写入BC728X, 第一个参数为目标寄存器地址, 第二个参数为要写入的数据 *
351:../ds1302a/ds1302a.c **** // ***********************************************************
352:../ds1302a/ds1302a.c **** void write728x(unsigned char reg_add, unsigned char write_data)
353:../ds1302a/ds1302a.c **** {
354:../ds1302a/ds1302a.c **** send_byte(reg_add); // 发送寄存器地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -