📄 ds1302.lst
字号:
1 .file "ds1302.c"
2 .arch atmega162
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
52 .global DS1302_Init
54 DS1302_Init:
1:ds1302.c **** #include <avr/io.h>
2:ds1302.c **** #include <avr/interrupt.h>
3:ds1302.c **** #include <avr/delay.h>
4:ds1302.c **** #include "bcd.h"
5:ds1302.c **** #include "ds1302.h"
6:ds1302.c ****
7:ds1302.c **** void DS1302_Init(void)
8:ds1302.c **** {
56 .LM1:
57 /* prologue: frame size=0 */
58 /* prologue end (size=0) */
9:ds1302.c ****
60 .LM2:
61 0000 8B9A sbi 49-0x20,3
10:ds1302.c ****
63 .LM3:
64 0002 8C9A sbi 49-0x20,4
11:ds1302.c ****
66 .LM4:
67 0004 8D9A sbi 49-0x20,5
68 /* epilogue: frame size=0 */
69 0006 0895 ret
70 /* epilogue end (size=1) */
71 /* function DS1302_Init size 4 (3) */
74 .global _DS1302_RD_Byte
76 _DS1302_RD_Byte:
12:ds1302.c ****
13:ds1302.c **** sbi(DS1302_DDR, DS1302_SCLK);
14:ds1302.c **** sbi(DS1302_DDR, DS1302_IO);
15:ds1302.c **** sbi(DS1302_DDR, DS1302_RST);
16:ds1302.c **** }
78 .LM5:
79 /* prologue: frame size=0 */
80 /* prologue end (size=0) */
17:ds1302.c ****
82 .LM6:
83 0008 90E0 ldi r25,lo8(0)
84 000a 27E0 ldi r18,lo8(7)
85 .L11:
18:ds1302.c **** // 高 12 个机器周期 低 10 个机器周期
19:ds1302.c **** unsigned char _DS1302_RD_Byte(void)
20:ds1302.c **** {
21:ds1302.c **** unsigned char i, result = 0;
87 .LM7:
88 000c 9695 lsr r25
22:ds1302.c ****
90 .LM8:
91 000e 849B sbis 48-0x20,4
92 0010 03C0 rjmp .L6
23:ds1302.c **** for(i = 0; i < 8; i++)
24:ds1302.c **** {
94 .LM9:
95 0012 9068 ori r25,lo8(-128)
96 .LBB2:
98 .Ltext1:
1:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
2:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** All rights reserved.
3:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****
4:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** Redistribution and use in source and binary forms, with or without
5:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** modification, are permitted provided that the following conditions are met:
6:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****
7:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** * Redistributions of source code must retain the above copyright
8:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** notice, this list of conditions and the following disclaimer.
9:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** * Redistributions in binary form must reproduce the above copyright
10:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** notice, this list of conditions and the following disclaimer in
11:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** the documentation and/or other materials provided with the
12:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** distribution.
13:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****
14:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
18:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** POSSIBILITY OF SUCH DAMAGE. */
25:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****
26:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** /* $Id: delay.h,v 1.2.2.2 2004/02/13 21:43:37 joerg_wunsch Exp $ */
27:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****
28:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** /*
29:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** avr/delay.h - loops for small accurate delays
30:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** */
31:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****
32:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** #ifndef _AVR_DELAY_H_
33:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** #define _AVR_DELAY_H_ 1
34:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****
35:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** #include <inttypes.h>
36:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h ****
37:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** /* 8-bit count, 3 cycles/loop */
38:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** static __inline__ void
39:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** _delay_loop_1(uint8_t __count)
40:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** {
100 .LM10:
101 0014 81E0 ldi r24,lo8(1)
102 0016 01C0 rjmp .L14
103 .L6:
104 .LBE2:
105 .LBB3:
106 0018 82E0 ldi r24,lo8(2)
107 .L14:
108 .LBB4:
41:C:/WinAVR/bin/../lib/gcc/avr/3.4.1/../../../../avr/include/avr/delay.h **** asm volatile (
110 .LM11:
111 /* #APP */
112 001a 8A95 1: dec r24
113 001c F1F7 brne 1b
114 /* #NOAPP */
115 .LBE4:
116 .LBE3:
118 .Ltext2:
25:ds1302.c **** result >>= 1;
26:ds1302.c **** if (bit_is_set(DS1302_PIN, DS1302_IO))
27:ds1302.c **** {
28:ds1302.c **** result |= 0x80;
29:ds1302.c **** _delay_loop_1(1);
30:ds1302.c **** }
31:ds1302.c **** else
120 .LM12:
121 001e 939A sbi 50-0x20,3
122 .LBB5:
124 .Ltext3:
126 .LM13:
127 0020 84E0 ldi r24,lo8(4)
128 .LBB6:
130 .LM14:
131 /* #APP */
132 0022 8A95 1: dec r24
133 0024 F1F7 brne 1b
134 /* #NOAPP */
135 .LBE6:
136 .LBE5:
138 .Ltext4:
32:ds1302.c **** {
33:ds1302.c **** _delay_loop_1(2);
140 .LM15:
141 0026 9398 cbi 50-0x20,3
143 .LM16:
144 0028 2150 subi r18,lo8(-(-1))
145 002a 27FF sbrs r18,7
146 002c EFCF rjmp .L11
34:ds1302.c **** }
35:ds1302.c **** sbi(DS1302_PORT, DS1302_SCLK);
36:ds1302.c **** _delay_loop_1(4);
148 .LM17:
149 002e 892F mov r24,r25
150 0030 9927 clr r25
151 /* epilogue: frame size=0 */
152 0032 0895 ret
153 /* epilogue end (size=1) */
154 /* function _DS1302_RD_Byte size 26 (25) */
169 .global _DS1302_WR_Byte
171 _DS1302_WR_Byte:
37:ds1302.c **** cbi(DS1302_PORT, DS1302_SCLK);
38:ds1302.c **** }
39:ds1302.c **** return (result);
40:ds1302.c **** }
173 .LM18:
174 /* prologue: frame size=0 */
175 /* prologue end (size=0) */
176 0034 982F mov r25,r24
177 0036 27E0 ldi r18,lo8(7)
178 .L22:
41:ds1302.c ****
42:ds1302.c **** // 高 12 个机器周期 低 10 个机器周期
43:ds1302.c **** void _DS1302_WR_Byte(unsigned char c)
44:ds1302.c **** {
45:ds1302.c **** unsigned char i;
180 .LM19:
181 0038 90FF sbrs r25,0
182 003a 02C0 rjmp .L19
46:ds1302.c ****
47:ds1302.c **** for(i = 0; i < 8; i++)
184 .LM20:
185 003c 949A sbi 50-0x20,4
186 003e 01C0 rjmp .L20
187 .L19:
48:ds1302.c **** {
49:ds1302.c **** if (c & 0x01)
50:ds1302.c **** {
51:ds1302.c **** sbi(DS1302_PORT, DS1302_IO);
189 .LM21:
190 0040 9498 cbi 50-0x20,4
191 .L20:
52:ds1302.c **** }
53:ds1302.c **** else
193 .LM22:
194 0042 939A sbi 50-0x20,3
195 .LBB7:
197 .Ltext5:
199 .LM23:
200 0044 84E0 ldi r24,lo8(4)
201 .LBB8:
203 .LM24:
204 /* #APP */
205 0046 8A95 1: dec r24
206 0048 F1F7 brne 1b
207 /* #NOAPP */
208 .LBE8:
209 .LBE7:
211 .Ltext6:
54:ds1302.c **** {
55:ds1302.c **** cbi(DS1302_PORT, DS1302_IO);
213 .LM25:
214 004a 9398 cbi 50-0x20,3
56:ds1302.c **** }
216 .LM26:
217 004c 9695 lsr r25
219 .LM27:
220 004e 2150 subi r18,lo8(-(-1))
221 0050 27FF sbrs r18,7
222 0052 F2CF rjmp .L22
223 /* epilogue: frame size=0 */
224 0054 0895 ret
225 /* epilogue end (size=1) */
226 /* function _DS1302_WR_Byte size 19 (18) */
234 .global DS1302_Read
236 DS1302_Read:
57:ds1302.c **** sbi(DS1302_PORT, DS1302_SCLK);
58:ds1302.c **** _delay_loop_1(4);
59:ds1302.c **** cbi(DS1302_PORT, DS1302_SCLK);
60:ds1302.c **** c >>= 1;
61:ds1302.c **** }
238 .LM28:
239 /* prologue: frame size=0 */
240 /* prologue end (size=0) */
62:ds1302.c **** }
63:ds1302.c ****
64:ds1302.c **** unsigned char DS1302_Read(unsigned char addr)
242 .LM29:
243 0056 9598 cbi 50-0x20,5
65:ds1302.c **** {
245 .LM30:
246 0058 9398 cbi 50-0x20,3
66:ds1302.c **** unsigned char result;
248 .LM31:
249 005a 959A sbi 50-0x20,5
67:ds1302.c ****
251 .LM32:
252 /* #APP */
253 005c F894 cli
68:ds1302.c **** cbi(DS1302_PORT, DS1302_RST);
255 .LM33:
256 /* #NOAPP */
257 005e 0E94 0000 call _DS1302_WR_Byte
69:ds1302.c **** cbi(DS1302_PORT, DS1302_SCLK);
259 .LM34:
260 0062 0E94 0000 call _DS1302_RD_Byte
70:ds1302.c **** sbi(DS1302_PORT, DS1302_RST);
262 .LM35:
263 /* #APP */
264 0066 7894 sei
71:ds1302.c **** cli();
266 .LM36:
267 /* #NOAPP */
268 0068 9598 cbi 50-0x20,5
72:ds1302.c **** _DS1302_WR_Byte(addr);
73:ds1302.c **** result = _DS1302_RD_Byte();
270 .LM37:
271 006a 9927 clr r25
272 /* epilogue: frame size=0 */
273 006c 0895 ret
274 /* epilogue end (size=1) */
275 /* function DS1302_Read size 14 (13) */
281 .global DS1302_Write
283 DS1302_Write:
74:ds1302.c **** sei();
75:ds1302.c **** cbi(DS1302_PORT, DS1302_RST);
76:ds1302.c **** return result;
285 .LM38:
286 /* prologue: frame size=0 */
287 006e 1F93 push r17
288 /* prologue end (size=1) */
289 0070 162F mov r17,r22
77:ds1302.c **** }
291 .LM39:
292 0072 9598 cbi 50-0x20,5
78:ds1302.c ****
294 .LM40:
295 0074 9398 cbi 50-0x20,3
79:ds1302.c **** void DS1302_Write(unsigned char addr, unsigned char value)
297 .LM41:
298 0076 959A sbi 50-0x20,5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -