📄 ds1302a.lst
字号:
355:../ds1302a/ds1302a.c **** send_byte(write_data); // 发送数据字节
356:../ds1302a/ds1302a.c **** }
357:../ds1302a/ds1302a.c ****
358:../ds1302a/ds1302a.c **** // ***********************************************************
359:../ds1302a/ds1302a.c **** // * 向 BC728X 发送一个字节 *
360:../ds1302a/ds1302a.c **** // ***********************************************************
361:../ds1302a/ds1302a.c **** void send_byte(unsigned char send_byte)
362:../ds1302a/ds1302a.c **** {
646 ,.LM100-.LFBB13
647 .LM100:
648 cbi 56-0x20,0
650 .LM101:
651 0188 982F sbi 56-0x20,0
363:../ds1302a/ds1302a.c **** unsigned char bit_counter;
364:../ds1302a/ds1302a.c **** PORTB&=~(1<<PB0); // 产生一 clk 脉冲
653 .LM102:
654 018a C098 sbis 54-0x20,2
365:../ds1302a/ds1302a.c **** // delay_1us();
366:../ds1302a/ds1302a.c **** PORTB|=(1<<PB0);
655 mp .L58
656 ldi r18,lo8(0)
657 018c C09A .L60:
367:../ds1302a/ds1302a.c **** // delay_1us();
368:../ds1302a/ds1302a.c ****
369:../ds1302a/ds1302a.c **** while (PINB&(1<<PB2)); // 等待 BC728X 输出 dat 低电平响应
659 03:
660 sbrc r25,7
661 018e B299 rjmp .L61
370:../ds1302a/ds1302a.c **** //delay_us(3);
371:../ds1302a/ds1302a.c **** PORTB&=~(1<<PB0); // 再次输出一 clk 脉冲
663 04:
664 ldi r24,lo8(5)
665 0192 C098 out 55-0x20,r24
372:../ds1302a/ds1302a.c **** //delay_1us();
373:../ds1302a/ds1302a.c **** PORTB|=(1<<PB0);
666 tabn 68,0,383,.LM105-.LFBB13
667 .LM105:
668 0194 C09A cbi 56-0x20,2
669 rjmp .L63
374:../ds1302a/ds1302a.c **** //delay_1us();
375:../ds1302a/ds1302a.c **** while (!(PINB&(1<<PB2))); // 等待 BC728X 进入接收状态
670 :
672 0196 B29B .LM106:
673 0198 00C0 sbi 56-0x20,2
674 019a 20E0 .L63:
376:../ds1302a/ds1302a.c **** // delay_us(2);
377:../ds1302a/ds1302a.c **** for (bit_counter=0;bit_counter<8;bit_counter++)
378:../ds1302a/ds1302a.c **** { // 发送 8 个比特
379:../ds1302a/ds1302a.c **** if ((send_byte&0x80)==0)
676 :
677 cbi 56-0x20,0
679 019e 00C0 .LM108:
380:../ds1302a/ds1302a.c **** {
381:../ds1302a/ds1302a.c **** DDRB=0x05;
680 56-0x20,0
681 .LBB80:
682 01a0 85E0 .LBB81:
683 01a2 87BB .LBB82:
382:../ds1302a/ds1302a.c **** // 设置I/O口B.7和B.5为输出,其余为输入
383:../ds1302a/ds1302a.c **** PORTB&=~(1<<PB2);
684 83:
686 01a4 C298 .Ltext1:
688 .LM109:
384:../ds1302a/ds1302a.c **** // 如果待发bit为0, 置 dat 为 0
385:../ds1302a/ds1302a.c **** // delay_1us();
386:../ds1302a/ds1302a.c **** }
387:../ds1302a/ds1302a.c **** else
388:../ds1302a/ds1302a.c **** {
389:../ds1302a/ds1302a.c **** PORTB|=(1<<PB2); // 反之置为 1
689 r24,lo8(8)
690 /* #APP */
691 01a8 C29A 1: dec r24
692 brne 1b
390:../ds1302a/ds1302a.c **** }
391:../ds1302a/ds1302a.c **** //delay_1us();
392:../ds1302a/ds1302a.c **** send_byte=send_byte*2; // send_byte 左移一位
393:../ds1302a/ds1302a.c **** // delay_us(1);
394:../ds1302a/ds1302a.c **** PORTB&=~(1<<PB0); // 输出一 clk 脉冲
693 NOAPP */
694 .LBE83:
695 01aa C098 .LBE82:
395:../ds1302a/ds1302a.c **** // delay_1us();
396:../ds1302a/ds1302a.c **** PORTB|=(1<<PB0);
696 E81:
697 .LBE80:
699 .Ltext2:
701 .LM110:
702 subi r18,lo8(-(1))
703 cpi r18,lo8(8)
704 breq .L64
1:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /* Copyright (c) 2002, Marek Michalkiewicz
2:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** Copyright (c) 2007 Joerg Wunsch
3:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** All rights reserved.
4:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
5:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** Redistribution and use in source and binary forms, with or without
6:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** modification, are permitted provided that the following conditions are met:
7:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
8:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** * Redistributions of source code must retain the above copyright
9:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** notice, this list of conditions and the following disclaimer.
10:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
11:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** * Redistributions in binary form must reproduce the above copyright
12:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** notice, this list of conditions and the following disclaimer in
13:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** the documentation and/or other materials provided with the
14:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** distribution.
15:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
16:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** * Neither the name of the copyright holders nor the names of
17:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** contributors may be used to endorse or promote products derived
18:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** from this software without specific prior written permission.
19:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
20:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** POSSIBILITY OF SUCH DAMAGE. */
31:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
32:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /* $Id: delay_basic.h,v 1.1 2007/05/13 21:23:20 joerg_wunsch Exp $ */
33:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
34:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #ifndef _UTIL_DELAY_BASIC_H_
35:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #define _UTIL_DELAY_BASIC_H_ 1
36:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
37:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #include <inttypes.h>
38:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
39:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /** \file */
40:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /** \defgroup util_delay_basic <util/delay_basic.h>: Basic busy-wait delay loops
41:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** \code
42:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #include <util/delay_basic.h>
43:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** \endcode
44:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
45:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** The functions in this header file implement simple delay loops
46:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** that perform a busy-waiting. They are typically used to
47:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** facilitate short delays in the program execution. They are
48:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** implemented as count-down loops with a well-known CPU cycle
49:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** count per loop iteration. As such, no other processing can
50:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** occur simultaneously. It should be kept in mind that the
51:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** functions described here do not disable interrupts.
52:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
53:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** In general, for long delays, the use of hardware timers is
54:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** much preferrable, as they free the CPU, and allow for
55:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** concurrent processing of other events while the timer is
56:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** running. However, in particular for very short delays, the
57:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** overhead of setting up a hardware timer is too much compared
58:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** to the overall delay time.
59:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
60:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** Two inline functions are provided for the actual delay algorithms.
61:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
62:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** */
63:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
64:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #if !defined(__DOXYGEN__)
65:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
66:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
67:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** #endif
68:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
69:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic
70:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
71:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** Delay loop using an 8-bit counter \c __count, so up to 256
72:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** iterations are possible. (The value 256 would have to be passed
73:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** as 0.) The loop executes three CPU cycles per iteration, not
74:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** including the overhead the compiler needs to setup the counter
75:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** register.
76:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h ****
77:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
78:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** can be achieved.
79:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** */
80:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** void
81:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** _delay_loop_1(uint8_t __count)
82:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** {
83:c:/winavr-20071221/bin/../avr/include/util/delay_basic.h **** __asm__ volatile (
705 8,0,392,.LM111-.LFBB13
706 .LM111:
707 01ae 88E0 lsl r25
708 rjmp .L60
709 01b0 8A95 .L64:
711 .LM112:
712 ldi r24,lo8(1)
713 out 55-0x20,r24
714 .LBB84:
715 .LBB85:
716 .LBB86:
717 .LBB87:
719 .Ltext3:
721 01b6 2830 .LM113:
722 01b8 01F0 ldi r24,lo8(13)
723 /* #APP */
724 1: dec r24
725 01ba 990F brne 1b
726 01bc 00C0 /* #NOAPP */
727 .LBE87:
397:../ds1302a/ds1302a.c **** _delay_us(3); // 短暂延时
398:../ds1302a/ds1302a.c **** }
399:../ds1302a/ds1302a.c **** DDRB=0x01;
728
729 /* epilogue: frame size=0 */
730 01be 81E0 ret
731 01c0 87BB /* epilogue end (size=1) */
732 /* function send_byte size 37 (36) */
743 01c6 01F4 .Lscope13:
747 .global write728x
749 write728x:
751 .Ltext4:
753 .LM114:
754 .LFBB14:
755 /* prologue: frame size=0 */
756 push r17
757 /* prologue end (size=1) */
758 mov r17,r22
760 .LM115:
761 ldi r25,lo8(0)
762 rcall send_byte
764 .LM116:
765 mov r24,r17
766 ldi r25,lo8(0)
767 rcall send_byte
768 /* epilogue: frame size=0 */
769 pop r17
770 ret
771 /* epilogue end (size=2) */
772 /* function write728x size 9 (6) */
774 .Lscope14:
776 01ca 1F93 .global ds1302_read_time
778 01cc 162F ds1302_read_time:
780 .LM117:
781 01ce 90E0 .LFBB15:
782 01d0 00D0 /* prologue: frame size=0 */
783 /* prologue end (size=0) */
785 01d2 812F .LM118:
786 01d4 90E0 ldi r24,lo8(-116)
787 01d6 00D0 rcall ds1302_read
788 sts year,r24
790 01da 0895 .LM119:
791 ldi r24,lo8(-120)
792 rcall ds1302_read
793 sts month,r24
795 .LM120:
796 ldi r24,lo8(-122)
797 rcall ds1302_read
798 sts day,r24
800 .LM121:
801 ldi r24,lo8(-118)
802 rcall ds1302_read
803 sts week,r24
805 .LM122:
806 01dc 8CE8 ldi r24,lo8(-124)
807 01de 00D0 rcall ds1302_read
808 01e0 8093 0000 sts hour,r24
810 .LM123:
811 01e4 88E8 ldi r24,lo8(-126)
812 01e6 00D0 rcall ds1302_read
813 01e8 8093 0000 sts minute,r24
815 .LM124:
816 01ec 86E8 ldi r24,lo8(-128)
817 01ee 00D0 rcall ds1302_read
818 01f0 8093 0000 mov r30,r24
819 sts second,r24
821 01f4 8AE8 .LM125:
822 01f6 00D0 ldi r31,lo8(0)
823 01f8 8093 0000 andi r30,lo8(15)
824 andi r31,hi8(15)
825 subi r30,lo8(-(disp_table))
826 01fc 84E8 sbci r31,hi8(-(disp_table))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -