📄 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:
65 .global AdcConvert
67 AdcConvert:
1:main.c **** /*
2:main.c **** Mega8 查询方式 A/D转换测试程序
3:main.c **** main.c
4:main.c **** MCU:atmega8
5:main.c **** 编译:WinAVR-20040720
6:main.c ****
7:main.c ****
8:main.c **** 芯艺 2004-09-19
9:main.c **** */
10:main.c ****
11:main.c **** #include <avr/io.h>
12:main.c **** #include <avr/delay.h>
13:main.c **** #include <stdio.h>
14:main.c ****
15:main.c **** #define uchar unsigned char
16:main.c **** #define uint unsigned int
17:main.c ****
18:main.c **** static uint g_aAdValue[8]; //A/D转换缓冲区
19:main.c ****
20:main.c **** void IoInit(void);
21:main.c ****
22:main.c ****
23:main.c **** uint AdcConvert(void)
24:main.c **** {
69 .LM1:
70 /* prologue: frame size=0 */
71 0000 CF93 push r28
72 /* prologue end (size=1) */
25:main.c **** uchar i;
26:main.c **** uint ret;
27:main.c **** uchar max_id,min_id,max_value,min_value;
28:main.c ****
29:main.c **** ADMUX=0Xc0;//内部2.56V参考电压,0通道
74 .LM2:
75 .LBB2:
76 0002 80EC ldi r24,lo8(-64)
77 0004 87B9 out 39-0x20,r24
30:main.c **** ADCSRA=_BV(ADEN);//使能ADC,单次转换模式
79 .LM3:
80 0006 80E8 ldi r24,lo8(-128)
81 0008 86B9 out 38-0x20,r24
31:main.c ****
32:main.c **** //连续转换8次
33:main.c **** for(i=0;i<8;i++)
83 .LM4:
84 000a 40E0 ldi r20,lo8(0)
85 000c E0E0 ldi r30,lo8(g_aAdValue)
86 000e F0E0 ldi r31,hi8(g_aAdValue)
87 .L12:
34:main.c **** {
35:main.c **** ADCSRA|=_BV(ADSC);
89 .LM5:
90 0010 369A sbi 38-0x20,6
36:main.c **** _delay_loop_1(60);
92 .LM6:
94 .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 **** {
96 .LM7:
97 .LBB3:
98 0012 8CE3 ldi r24,lo8(60)
39:C:/WinAVR/avr/include/avr/delay.h **** asm volatile (
100 .LM8:
101 /* #APP */
102 0014 8A95 1: dec r24
103 0016 F1F7 brne 1b
105 .Ltext2:
37:main.c **** while(ADCSRA&_BV(ADSC))
107 .LM9:
108 /* #NOAPP */
109 .LBE3:
110 0018 369B sbis 38-0x20,6
111 001a 05C0 rjmp .L38
112 .L11:
114 .Ltext3:
116 .LM10:
117 .LBB4:
118 001c 8CE3 ldi r24,lo8(60)
120 .LM11:
121 /* #APP */
122 001e 8A95 1: dec r24
123 0020 F1F7 brne 1b
124 /* #NOAPP */
125 .LBE4:
126 0022 3699 sbic 38-0x20,6
127 0024 FBCF rjmp .L11
128 .L38:
130 .Ltext4:
38:main.c **** _delay_loop_1(60);
39:main.c **** ret=ADCL;
132 .LM12:
133 0026 84B1 in r24,36-0x20
134 0028 682F mov r22,r24
135 002a 7727 clr r23
40:main.c **** ret|=(uint)(ADCH<<8);
137 .LM13:
138 002c 85B1 in r24,37-0x20
139 002e 9927 clr r25
140 0030 982F mov r25,r24
141 0032 8827 clr r24
142 0034 862B or r24,r22
143 0036 972B or r25,r23
41:main.c **** g_aAdValue[i]=ret;
145 .LM14:
146 0038 8193 st Z+,r24
147 003a 9193 st Z+,r25
149 .LM15:
150 003c 4F5F subi r20,lo8(-(1))
151 003e 4830 cpi r20,lo8(8)
152 0040 38F3 brlo .L12
42:main.c **** }
43:main.c **** ret=0;
154 .LM16:
155 0042 60E0 ldi r22,lo8(0)
156 0044 70E0 ldi r23,hi8(0)
44:main.c **** for(i=1;i<8;i++)
158 .LM17:
159 0046 41E0 ldi r20,lo8(1)
160 0048 E0E0 ldi r30,lo8(g_aAdValue+2)
161 004a F0E0 ldi r31,hi8(g_aAdValue+2)
162 .L17:
45:main.c **** ret+=g_aAdValue[i];
164 .LM18:
165 004c 8191 ld r24,Z+
166 004e 9191 ld r25,Z+
167 0050 680F add r22,r24
168 0052 791F adc r23,r25
170 .LM19:
171 0054 4F5F subi r20,lo8(-(1))
172 0056 4830 cpi r20,lo8(8)
173 0058 C8F3 brlo .L17
46:main.c ****
47:main.c **** //找到最大和最小值索引
48:main.c **** ret/=7;
175 .LM20:
176 005a CB01 movw r24,r22
177 005c 67E0 ldi r22,lo8(7)
178 005e 70E0 ldi r23,hi8(7)
179 0060 00D0 rcall __udivmodhi4
49:main.c **** max_id=min_id=1;
181 .LM21:
182 0062 B1E0 ldi r27,lo8(1)
183 0064 CB2F mov r28,r27
50:main.c **** max_value=min_value=0;
185 .LM22:
186 0066 50E0 ldi r21,lo8(0)
187 0068 A52F mov r26,r21
51:main.c **** for(i=1;i<8;i++)
189 .LM23:
190 006a 4B2F mov r20,r27
191 006c E0E0 ldi r30,lo8(g_aAdValue+2)
192 006e F0E0 ldi r31,hi8(g_aAdValue+2)
193 .L26:
52:main.c **** {
53:main.c **** if(g_aAdValue[i]>ret)
195 .LM24:
196 0070 2081 ld r18,Z
197 0072 3181 ldd r19,Z+1
198 0074 6217 cp r22,r18
199 0076 7307 cpc r23,r19
200 0078 58F4 brsh .L22
54:main.c **** {
55:main.c **** if(g_aAdValue[i]-ret>max_value)
202 .LM25:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -