📄 main.lst
字号:
1 .file "main.c"
2 .arch atmega16
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
12 .text
13 .Ltext0:
60 .global delay
62 delay:
1:main.c **** #include "./main.h"
2:main.c ****
3:main.c ****
4:main.c **** #include <avr/io.h>//define kind of I/O port
5:main.c **** #include <avr/delay.h>//define _delay_loop_2
6:main.c **** #include <inttypes.h>//define uint16_t and so on
7:main.c ****
8:main.c **** void delay(uint16_t ms)
9:main.c **** {
64 .LM1:
65 /* prologue: frame size=0 */
66 /* prologue end (size=0) */
67 0000 AC01 movw r20,r24
10:main.c **** uint16_t i;
11:main.c **** for(i=0;i<ms;i++) _delay_loop_2(2765);//equal mcu freq/4000
69 .LM2:
70 .LBB2:
71 0002 20E0 ldi r18,lo8(0)
72 0004 30E0 ldi r19,hi8(0)
73 0006 2817 cp r18,r24
74 0008 3907 cpc r19,r25
75 000a 48F4 brsh .L9
76 .L7:
78 .Ltext1:
1:d:/WinAVR/avr/include/avr/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
2:d:/WinAVR/avr/include/avr/delay.h **** All rights reserved.
3:d:/WinAVR/avr/include/avr/delay.h ****
4:d:/WinAVR/avr/include/avr/delay.h **** Redistribution and use in source and binary forms, with or without
5:d:/WinAVR/avr/include/avr/delay.h **** modification, are permitted provided that the following conditions are met:
6:d:/WinAVR/avr/include/avr/delay.h ****
7:d:/WinAVR/avr/include/avr/delay.h **** * Redistributions of source code must retain the above copyright
8:d:/WinAVR/avr/include/avr/delay.h **** notice, this list of conditions and the following disclaimer.
9:d:/WinAVR/avr/include/avr/delay.h **** * Redistributions in binary form must reproduce the above copyright
10:d:/WinAVR/avr/include/avr/delay.h **** notice, this list of conditions and the following disclaimer in
11:d:/WinAVR/avr/include/avr/delay.h **** the documentation and/or other materials provided with the
12:d:/WinAVR/avr/include/avr/delay.h **** distribution.
13:d:/WinAVR/avr/include/avr/delay.h ****
14:d:/WinAVR/avr/include/avr/delay.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15:d:/WinAVR/avr/include/avr/delay.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16:d:/WinAVR/avr/include/avr/delay.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17:d:/WinAVR/avr/include/avr/delay.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
18:d:/WinAVR/avr/include/avr/delay.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19:d:/WinAVR/avr/include/avr/delay.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20:d:/WinAVR/avr/include/avr/delay.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21:d:/WinAVR/avr/include/avr/delay.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22:d:/WinAVR/avr/include/avr/delay.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23:d:/WinAVR/avr/include/avr/delay.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24:d:/WinAVR/avr/include/avr/delay.h **** POSSIBILITY OF SUCH DAMAGE. */
25:d:/WinAVR/avr/include/avr/delay.h ****
26:d:/WinAVR/avr/include/avr/delay.h **** /* $Id: delay.h,v 1.2 2002/12/12 11:41:01 joerg_wunsch Exp $ */
27:d:/WinAVR/avr/include/avr/delay.h ****
28:d:/WinAVR/avr/include/avr/delay.h **** /*
29:d:/WinAVR/avr/include/avr/delay.h **** avr/delay.h - loops for small accurate delays
30:d:/WinAVR/avr/include/avr/delay.h **** */
31:d:/WinAVR/avr/include/avr/delay.h ****
32:d:/WinAVR/avr/include/avr/delay.h **** #ifndef _AVR_DELAY_H_
33:d:/WinAVR/avr/include/avr/delay.h **** #define _AVR_DELAY_H_ 1
34:d:/WinAVR/avr/include/avr/delay.h ****
35:d:/WinAVR/avr/include/avr/delay.h **** /* 8-bit count, 3 cycles/loop */
36:d:/WinAVR/avr/include/avr/delay.h **** static inline void
37:d:/WinAVR/avr/include/avr/delay.h **** _delay_loop_1(unsigned char __count)
38:d:/WinAVR/avr/include/avr/delay.h **** {
39:d:/WinAVR/avr/include/avr/delay.h **** asm volatile (
40:d:/WinAVR/avr/include/avr/delay.h **** "1: dec %0" "\n\t"
41:d:/WinAVR/avr/include/avr/delay.h **** "brne 1b"
42:d:/WinAVR/avr/include/avr/delay.h **** : "=r" (__count)
43:d:/WinAVR/avr/include/avr/delay.h **** : "0" (__count)
44:d:/WinAVR/avr/include/avr/delay.h **** );
45:d:/WinAVR/avr/include/avr/delay.h **** }
46:d:/WinAVR/avr/include/avr/delay.h ****
47:d:/WinAVR/avr/include/avr/delay.h **** /* 16-bit count, 4 cycles/loop */
48:d:/WinAVR/avr/include/avr/delay.h **** static inline void
49:d:/WinAVR/avr/include/avr/delay.h **** _delay_loop_2(unsigned int __count)
50:d:/WinAVR/avr/include/avr/delay.h **** {
80 .LM3:
81 .LBB3:
82 000c 8DEC ldi r24,lo8(2765)
83 000e 9AE0 ldi r25,hi8(2765)
51:d:/WinAVR/avr/include/avr/delay.h **** asm volatile (
85 .LM4:
86 /* #APP */
87 0010 0197 1: sbiw r24,1
88 0012 F1F7 brne 1b
90 .Ltext2:
92 .LM5:
93 /* #NOAPP */
94 .LBE3:
95 0014 2F5F subi r18,lo8(-(1))
96 0016 3F4F sbci r19,hi8(-(1))
97 0018 2417 cp r18,r20
98 001a 3507 cpc r19,r21
99 001c B8F3 brlo .L7
100 .L9:
12:main.c **** }
102 .LM6:
103 001e 0895 ret
104 .LBE2:
105 /* epilogue: frame size=0 */
106 /* epilogue: noreturn */
107 /* epilogue end (size=0) */
108 /* function delay size 18 (18) */
116 .Lscope0:
119 .global beep
121 beep:
13:main.c ****
14:main.c **** void beep(void)
15:main.c **** {
123 .LM7:
124 /* prologue: frame size=0 */
125 /* prologue end (size=0) */
16:main.c **** uint16_t lasting=1500;
17:main.c **** while(lasting--)
127 .LM8:
128 .LBB4:
129 0020 2BED ldi r18,lo8(1499)
130 0022 35E0 ldi r19,hi8(1499)
131 .L15:
18:main.c **** {
19:main.c **** PORTC ^= _BV(7); //取反
133 .LM9:
134 0024 85B3 in r24,53-0x20
135 0026 90E8 ldi r25,lo8(-128)
136 0028 8927 eor r24,r25
137 002a 85BB out 53-0x20,r24
20:main.c **** _delay_loop_2(130);
139 .LM10:
141 .Ltext3:
143 .LM11:
144 .LBB5:
145 002c 82E8 ldi r24,lo8(130)
146 002e 90E0 ldi r25,hi8(130)
148 .LM12:
149 /* #APP */
150 0030 0197 1: sbiw r24,1
151 0032 F1F7 brne 1b
152 /* #NOAPP */
153 .LBE5:
154 0034 2150 subi r18,lo8(-(-1))
155 0036 3040 sbci r19,hi8(-(-1))
156 0038 8FEF ldi r24,hi8(-1)
157 003a 2F3F cpi r18,lo8(-1)
158 003c 3807 cpc r19,r24
159 003e 91F7 brne .L15
161 .Ltext4:
21:main.c **** }
22:main.c **** }
163 .LM13:
164 .LBE4:
165 /* epilogue: frame size=0 */
166 0040 0895 ret
167 /* epilogue end (size=1) */
168 /* function beep size 19 (18) */
176 .Lscope1:
181 .global send
183 send:
23:main.c ****
24:main.c **** #define CS0 do{(PORTA &= ~(_BV(7)));}while(0)//is better than (PORTA &= ~(_BV(7)))
25:main.c **** #define CS1 do{(PORTA |= (_BV(7)));}while(0)
26:main.c **** #define RD0 do{(PORTA &= ~(_BV(6)));}while(0)
27:main.c **** #define RD1 do{(PORTA |= (_BV(6)));}while(0)
28:main.c **** #define WR0 do{(PORTA &= ~(_BV(5)));}while(0)
29:main.c **** #define WR1 do{(PORTA |= (_BV(5)));}while(0)
30:main.c **** #define SEND0 do{(PORTA &= ~(_BV(4)));}while(0)
31:main.c **** #define SEND1 do{(PORTA |= (_BV(4)));}while(0)
32:main.c ****
33:main.c ****
34:main.c **** void send(uint16_t senddata,uint8_t num)
35:main.c **** {
185 .LM14:
186 /* prologue: frame size=0 */
187 0042 FF92 push r15
188 0044 0F93 push r16
189 0046 1F93 push r17
190 0048 CF93 push r28
191 /* prologue end (size=4) */
192 004a 8C01 movw r16,r24
193 004c F62E mov r15,r22
36:main.c **** uint8_t i;
37:main.c ****
38:main.c **** CS1;
195 .LM15:
196 .LBB6:
197 004e DF9A sbi 59-0x20,7
39:main.c **** delay(10);
199 .LM16:
200 0050 8AE0 ldi r24,lo8(10)
201 0052 90E0 ldi r25,hi8(10)
202 0054 0E94 0000 call delay
40:main.c **** CS0;
204 .LM17:
205 0058 DF98 cbi 59-0x20,7
41:main.c **** delay(5);
207 .LM18:
208 005a 85E0 ldi r24,lo8(5)
209 005c 90E0 ldi r25,hi8(5)
210 005e 0E94 0000 call delay
42:main.c ****
43:main.c **** for(i=0;i<num;i++)
212 .LM19:
213 0062 C0E0 ldi r28,lo8(0)
214 0064 CF15 cp r28,r15
215 0066 00F5 brsh .L35
216 .L31:
44:main.c **** {
45:main.c **** WR0;
218 .LM20:
219 0068 DD98 cbi 59-0x20,5
46:main.c **** delay(5);
221 .LM21:
222 006a 85E0 ldi r24,lo8(5)
223 006c 90E0 ldi r25,hi8(5)
224 006e 0E94 0000 call delay
47:main.c **** if(senddata & _BV(i))
226 .LM22:
227 0072 81E0 ldi r24,lo8(1)
228 0074 90E0 ldi r25,hi8(1)
229 0076 0C2E mov r0,r28
230 0078 02C0 rjmp 2f
231 007a 880F 1: lsl r24
232 007c 991F rol r25
233 007e 0A94 2: dec r0
234 0080 E2F7 brpl 1b
235 0082 8023 and r24,r16
236 0084 9123 and r25,r17
237 0086 892B or r24,r25
238 0088 11F0 breq .L26
48:main.c **** SEND1;
240 .LM23:
241 008a DC9A sbi 59-0x20,4
242 008c 01C0 rjmp .L28
243 .L26:
49:main.c **** else
50:main.c **** SEND0;
245 .LM24:
246 008e DC98 cbi 59-0x20,4
247 .L28:
51:main.c **** delay(10);
249 .LM25:
250 0090 8AE0 ldi r24,lo8(10)
251 0092 90E0 ldi r25,hi8(10)
252 0094 0E94 0000 call delay
52:main.c **** WR1;
254 .LM26:
255 0098 DD9A sbi 59-0x20,5
53:main.c **** delay(10);
257 .LM27:
258 009a 8AE0 ldi r24,lo8(10)
259 009c 90E0 ldi r25,hi8(10)
260 009e 0E94 0000 call delay
262 .LM28:
263 00a2 CF5F subi r28,lo8(-(1))
264 00a4 CF15 cp r28,r15
265 00a6 00F3 brlo .L31
266 .L35:
54:main.c **** }
55:main.c **** SEND1;
268 .LM29:
269 00a8 DC9A sbi 59-0x20,4
56:main.c **** CS1;
271 .LM30:
272 00aa DF9A sbi 59-0x20,7
57:main.c **** }
274 .LM31:
275 .LBE6:
276 /* epilogue: frame size=0 */
277 00ac CF91 pop r28
278 00ae 1F91 pop r17
279 00b0 0F91 pop r16
280 00b2 FF90 pop r15
281 00b4 0895 ret
282 /* epilogue end (size=5) */
283 /* function send size 58 (49) */
288 .Lscope2:
292 .global lcd_send_bit
294 lcd_send_bit:
58:main.c ****
59:main.c **** #define LCD_CMD_INITIAL 0x29
60:main.c **** #define LCD_CMD_SEL_RC 0x18
61:main.c **** #define LCD_CMD_OP_RC 0x01
62:main.c **** #define LCD_CMD_OP_LCD 0x03
63:main.c **** #define LCD_CMD_CL_LCD 0x02
64:main.c **** void lcd_send_bit(uint8_t flag)
65:main.c **** {
296 .LM32:
297 /* prologue: frame size=0 */
298 00b6 1F93 push r17
299 /* prologue end (size=1) */
300 00b8 182F mov r17,r24
66:main.c **** WR0;
302 .LM33:
303 00ba DD98 cbi 59-0x20,5
67:main.c **** delay(1);
305 .LM34:
306 00bc 81E0 ldi r24,lo8(1)
307 00be 90E0 ldi r25,hi8(1)
308 00c0 0E94 0000 call delay
68:main.c **** if(flag)
310 .LM35:
311 00c4 1123 tst r17
312 00c6 11F0 breq .L38
69:main.c **** SEND1;
314 .LM36:
315 00c8 DC9A sbi 59-0x20,4
316 00ca 01C0 rjmp .L40
317 .L38:
70:main.c **** else
71:main.c **** SEND0;
319 .LM37:
320 00cc DC98 cbi 59-0x20,4
321 .L40:
72:main.c **** WR1;
323 .LM38:
324 00ce DD9A sbi 59-0x20,5
73:main.c **** delay(1);
326 .LM39:
327 00d0 81E0 ldi r24,lo8(1)
328 00d2 90E0 ldi r25,hi8(1)
329 00d4 0E94 0000 call delay
74:main.c **** }
331 .LM40:
332 /* epilogue: frame size=0 */
333 00d8 1F91 pop r17
334 00da 0895 ret
335 /* epilogue end (size=2) */
336 /* function lcd_send_bit size 19 (16) */
338 .Lscope3:
343 .global lcd_send_data
345 lcd_send_data:
75:main.c **** void lcd_send_data(uint8_t addr,uint8_t data)
76:main.c **** {
347 .LM41:
348 /* prologue: frame size=0 */
349 00dc FF92 push r15
350 00de 0F93 push r16
351 00e0 1F93 push r17
352 00e2 CF93 push r28
353 00e4 DF93 push r29
354 /* prologue end (size=5) */
355 00e6 082F mov r16,r24
356 00e8 F62E mov r15,r22
77:main.c **** uint8_t i;
78:main.c **** CS1;
358 .LM42:
359 .LBB7:
360 00ea DF9A sbi 59-0x20,7
79:main.c **** delay(1);
362 .LM43:
363 00ec 81E0 ldi r24,lo8(1)
364 00ee 90E0 ldi r25,hi8(1)
365 00f0 0E94 0000 call delay
80:main.c **** CS0;
367 .LM44:
368 00f4 DF98 cbi 59-0x20,7
81:main.c **** delay(1);
370 .LM45:
371 00f6 81E0 ldi r24,lo8(1)
372 00f8 90E0 ldi r25,hi8(1)
373 00fa 0E94 0000 call delay
82:main.c **** lcd_send_bit(1);
375 .LM46:
376 00fe 81E0 ldi r24,lo8(1)
377 0100 0E94 0000 call lcd_send_bit
83:main.c **** lcd_send_bit(0);
379 .LM47:
380 0104 80E0 ldi r24,lo8(0)
381 0106 0E94 0000 call lcd_send_bit
84:main.c **** lcd_send_bit(1);
383 .LM48:
384 010a 81E0 ldi r24,lo8(1)
385 010c 0E94 0000 call lcd_send_bit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -