📄 main.lst
字号:
1 .file "main.c"
2 .arch atmega8
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:
78 .global DelayMs
80 DelayMs:
1:main.c **** /*
2:main.c **** main.c
3:main.c ****
4:main.c **** 芯艺 2004-09-02 ---------- 2004
5:main.c **** */
6:main.c ****
7:main.c ****
8:main.c **** #include <avr/io.h>
9:main.c **** #include <avr/delay.h>
10:main.c **** #include <avr/twi.h>
11:main.c **** #include <avr/pgmspace.h>
12:main.c ****
13:main.c **** #include <stdio.h>
14:main.c ****
15:main.c **** #define uint unsigned int
16:main.c **** #define uchar unsigned char
17:main.c ****
18:main.c **** #define FREQ 4
19:main.c **** #define DS1307_ADDR 0XD0
20:main.c ****
21:main.c **** #define TW_ACK 1
22:main.c **** #define TW_NACK 0
23:main.c ****
24:main.c **** #define RTC_READ 1
25:main.c **** #define RTC_WRITE 0
26:main.c ****
27:main.c ****
28:main.c **** FILE *g_hFile;
29:main.c ****
30:main.c **** uchar g_aTimeBuf[7];//时钟/日历缓冲区
31:main.c **** uchar g_aTimeBin[7];//时钟/日历二进制格式缓冲区
32:main.c ****
33:main.c **** void DelayMs(uint ms)
34:main.c **** {
82 .LM1:
83 /* prologue: frame size=0 */
84 /* prologue end (size=0) */
85 0000 AC01 movw r20,r24
35:main.c **** uint i;
36:main.c **** for(i=0;i<ms;i++)
87 .LM2:
88 .LBB2:
89 0002 20E0 ldi r18,lo8(0)
90 0004 30E0 ldi r19,hi8(0)
91 0006 2817 cp r18,r24
92 0008 3907 cpc r19,r25
93 000a 48F4 brsh .L9
94 .L7:
37:main.c **** _delay_loop_2(FREQ *250);
96 .LM3:
98 .Ltext1:
1:C:/WinAVR/avr/include/avr/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
2:C:/WinAVR/avr/include/avr/delay.h **** All rights reserved.
3:C:/WinAVR/avr/include/avr/delay.h ****
4:C:/WinAVR/avr/include/avr/delay.h **** Redistribution and use in source and binary forms, with or without
5:C:/WinAVR/avr/include/avr/delay.h **** modification, are permitted provided that the following conditions are met:
6:C:/WinAVR/avr/include/avr/delay.h ****
7:C:/WinAVR/avr/include/avr/delay.h **** * Redistributions of source code must retain the above copyright
8:C:/WinAVR/avr/include/avr/delay.h **** notice, this list of conditions and the following disclaimer.
9:C:/WinAVR/avr/include/avr/delay.h **** * Redistributions in binary form must reproduce the above copyright
10:C:/WinAVR/avr/include/avr/delay.h **** notice, this list of conditions and the following disclaimer in
11:C:/WinAVR/avr/include/avr/delay.h **** the documentation and/or other materials provided with the
12:C:/WinAVR/avr/include/avr/delay.h **** distribution.
13:C:/WinAVR/avr/include/avr/delay.h ****
14:C:/WinAVR/avr/include/avr/delay.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15:C:/WinAVR/avr/include/avr/delay.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16:C:/WinAVR/avr/include/avr/delay.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17:C:/WinAVR/avr/include/avr/delay.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
18:C:/WinAVR/avr/include/avr/delay.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19:C:/WinAVR/avr/include/avr/delay.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20:C:/WinAVR/avr/include/avr/delay.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21:C:/WinAVR/avr/include/avr/delay.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22:C:/WinAVR/avr/include/avr/delay.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23:C:/WinAVR/avr/include/avr/delay.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24:C:/WinAVR/avr/include/avr/delay.h **** POSSIBILITY OF SUCH DAMAGE. */
25:C:/WinAVR/avr/include/avr/delay.h ****
26:C:/WinAVR/avr/include/avr/delay.h **** /* $Id: delay.h,v 1.2 2002/12/12 11:41:01 joerg_wunsch Exp $ */
27:C:/WinAVR/avr/include/avr/delay.h ****
28:C:/WinAVR/avr/include/avr/delay.h **** /*
29:C:/WinAVR/avr/include/avr/delay.h **** avr/delay.h - loops for small accurate delays
30:C:/WinAVR/avr/include/avr/delay.h **** */
31:C:/WinAVR/avr/include/avr/delay.h ****
32:C:/WinAVR/avr/include/avr/delay.h **** #ifndef _AVR_DELAY_H_
33:C:/WinAVR/avr/include/avr/delay.h **** #define _AVR_DELAY_H_ 1
34:C:/WinAVR/avr/include/avr/delay.h ****
35:C:/WinAVR/avr/include/avr/delay.h **** /* 8-bit count, 3 cycles/loop */
36:C:/WinAVR/avr/include/avr/delay.h **** static inline void
37:C:/WinAVR/avr/include/avr/delay.h **** _delay_loop_1(unsigned char __count)
38:C:/WinAVR/avr/include/avr/delay.h **** {
39:C:/WinAVR/avr/include/avr/delay.h **** asm volatile (
40:C:/WinAVR/avr/include/avr/delay.h **** "1: dec %0" "\n\t"
41:C:/WinAVR/avr/include/avr/delay.h **** "brne 1b"
42:C:/WinAVR/avr/include/avr/delay.h **** : "=r" (__count)
43:C:/WinAVR/avr/include/avr/delay.h **** : "0" (__count)
44:C:/WinAVR/avr/include/avr/delay.h **** );
45:C:/WinAVR/avr/include/avr/delay.h **** }
46:C:/WinAVR/avr/include/avr/delay.h ****
47:C:/WinAVR/avr/include/avr/delay.h **** /* 16-bit count, 4 cycles/loop */
48:C:/WinAVR/avr/include/avr/delay.h **** static inline void
49:C:/WinAVR/avr/include/avr/delay.h **** _delay_loop_2(unsigned int __count)
50:C:/WinAVR/avr/include/avr/delay.h **** {
100 .LM4:
101 .LBB3:
102 000c 88EE ldi r24,lo8(1000)
103 000e 93E0 ldi r25,hi8(1000)
51:C:/WinAVR/avr/include/avr/delay.h **** asm volatile (
105 .LM5:
106 /* #APP */
107 0010 0197 1: sbiw r24,1
108 0012 F1F7 brne 1b
110 .Ltext2:
112 .LM6:
113 /* #NOAPP */
114 .LBE3:
115 0014 2F5F subi r18,lo8(-(1))
116 0016 3F4F sbci r19,hi8(-(1))
117 0018 2417 cp r18,r20
118 001a 3507 cpc r19,r21
119 001c B8F3 brlo .L7
120 .L9:
38:main.c **** }
122 .LM7:
123 001e 0895 ret
124 .LBE2:
125 /* epilogue: frame size=0 */
126 /* epilogue: noreturn */
127 /* epilogue end (size=0) */
128 /* function DelayMs size 18 (18) */
138 .global usart_putchar
140 usart_putchar:
39:main.c ****
40:main.c ****
41:main.c **** /*******************标准I/O功能****************开始********/
42:main.c **** //标准I/O输出函数
43:main.c **** int usart_putchar(char c)
44:main.c **** {
142 .LM8:
143 /* prologue: frame size=0 */
144 0020 CF93 push r28
145 /* prologue end (size=1) */
146 0022 C82F mov r28,r24
45:main.c **** if(c=='\n')
148 .LM9:
149 0024 8A30 cpi r24,lo8(10)
150 0026 11F4 brne .L13
46:main.c **** usart_putchar('\r');
152 .LM10:
153 0028 8DE0 ldi r24,lo8(13)
154 002a FADF rcall usart_putchar
47:main.c **** loop_until_bit_is_set(UCSRA,UDRE);
156 .LM11:
157 .L13:
158 002c 5D9B sbis 43-0x20,5
159 002e FECF rjmp .L13
48:main.c **** UDR=c;
161 .LM12:
162 0030 CCB9 out 44-0x20,r28
49:main.c **** return 0;
50:main.c **** }
164 .LM13:
165 0032 80E0 ldi r24,lo8(0)
166 0034 90E0 ldi r25,hi8(0)
167 /* epilogue: frame size=0 */
168 0036 CF91 pop r28
169 0038 0895 ret
170 /* epilogue end (size=2) */
171 /* function usart_putchar size 13 (10) */
174 .global usart_getchar
176 usart_getchar:
51:main.c **** //标准I/O输入函数
52:main.c **** int usart_getchar(void)
53:main.c **** {
178 .LM14:
179 /* prologue: frame size=0 */
180 /* prologue end (size=0) */
54:main.c **** loop_until_bit_is_set(UCSRA,RXC);
182 .LM15:
183 .L18:
184 003a 5F9B sbis 43-0x20,7
185 003c FECF rjmp .L18
55:main.c **** return UDR;
187 .LM16:
188 003e 8CB1 in r24,44-0x20
189 0040 9927 clr r25
56:main.c **** }
191 .LM17:
192 /* epilogue: frame size=0 */
193 0042 0895 ret
194 /* epilogue end (size=1) */
195 /* function usart_getchar size 5 (4) */
198 .global IoInit
200 IoInit:
57:main.c ****
58:main.c **** //初始化
59:main.c **** void IoInit(void)
60:main.c **** {
202 .LM18:
203 /* prologue: frame size=0 */
204 /* prologue end (size=0) */
61:main.c **** //串行口初始化
62:main.c **** UCSRB=_BV(RXEN)|_BV(TXEN);/*(1<<RXCIE)|(1<<TXCIE)|*/
206 .LM19:
207 0044 88E1 ldi r24,lo8(24)
208 0046 8AB9 out 42-0x20,r24
63:main.c **** UBRRL=25; //9600 baud 6MHz:38 4MHz:25
210 .LM20:
211 0048 89E1 ldi r24,lo8(25)
212 004a 89B9 out 41-0x20,r24
64:main.c ****
65:main.c **** //UART用于标准I/O输入输出
66:main.c **** g_hFile=fdevopen(usart_putchar,usart_getchar,0);
214 .LM21:
215 004c 40E0 ldi r20,lo8(0)
216 004e 50E0 ldi r21,hi8(0)
217 0050 60E0 ldi r22,lo8(pm(usart_getchar))
218 0052 70E0 ldi r23,hi8(pm(usart_getchar))
219 0054 80E0 ldi r24,lo8(pm(usart_putchar))
220 0056 90E0 ldi r25,hi8(pm(usart_putchar))
221 0058 00D0 rcall fdevopen
222 005a 9093 0000 sts (g_hFile)+1,r25
223 005e 8093 0000 sts g_hFile,r24
67:main.c **** }
225 .LM22:
226 /* epilogue: frame size=0 */
227 0062 0895 ret
228 /* epilogue end (size=1) */
229 /* function IoInit size 16 (15) */
232 .global twi_stop
234 twi_stop:
68:main.c **** /*******************标准I/O功能**************结束**********/
69:main.c ****
70:main.c **** /*************主模式TWI操作部分*************开始**************/
71:main.c ****
72:main.c **** //总线上起动停止条件
73:main.c **** void twi_stop(void)
74:main.c **** {
236 .LM23:
237 /* prologue: frame size=0 */
238 /* prologue end (size=0) */
75:main.c **** TWCR = _BV(TWINT) | _BV(TWSTO) | _BV(TWEN);
240 .LM24:
241 0064 84E9 ldi r24,lo8(-108)
242 0066 86BF out 86-0x20,r24
76:main.c **** }
244 .LM25:
245 /* epilogue: frame size=0 */
246 0068 0895 ret
247 /* epilogue end (size=1) */
248 /* function twi_stop size 3 (2) */
251 .global twi_start
253 twi_start:
77:main.c **** //总线上起动开始条件
78:main.c **** uchar twi_start(void)
79:main.c **** {
255 .LM26:
256 /* prologue: frame size=0 */
257 /* prologue end (size=0) */
80:main.c **** TWCR = _BV(TWINT) | _BV(TWSTA) | _BV(TWEN);
259 .LM27:
260 006a 84EA ldi r24,lo8(-92)
261 006c 86BF out 86-0x20,r24
81:main.c **** while ((TWCR & _BV(TWINT)) == 0) ;
263 .LM28:
264 .L25:
265 006e 06B6 in __tmp_reg__,86-0x20
266 0070 07FE sbrs __tmp_reg__,7
267 0072 FDCF rjmp .L25
82:main.c ****
83:main.c ****
84:main.c **** return TW_STATUS;
269 .LM29:
270 0074 81B1 in r24,33-0x20
271 0076 9927 clr r25
272 0078 887F andi r24,lo8(248)
273 007a 9070 andi r25,hi8(248)
85:main.c **** }
275 .LM30:
276 /* epilogue: frame size=0 */
277 007c 0895 ret
278 /* epilogue end (size=1) */
279 /* function twi_start size 10 (9) */
283 .global twi_writebyte
285 twi_writebyte:
86:main.c ****
87:main.c **** //写一字节
88:main.c **** uchar twi_writebyte(uchar c)
89:main.c **** {
287 .LM31:
288 /* prologue: frame size=0 */
289 /* prologue end (size=0) */
90:main.c **** TWDR = c;
291 .LM32:
292 007e 83B9 out 35-0x20,r24
91:main.c **** TWCR = _BV(TWINT) | _BV(TWEN);
294 .LM33:
295 0080 84E8 ldi r24,lo8(-124)
296 0082 86BF out 86-0x20,r24
92:main.c **** while ((TWCR & _BV(TWINT)) == 0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -