?? ad.lst
字號:
1 .file "AD.c"
2 .arch atmega128
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:
90 .global delay_us
92 delay_us:
1:AD.c **** #include <avr/signal.h>
2:AD.c **** #include <avr/interrupt.h>
3:AD.c **** #include <stdlib.h>
4:AD.c **** #include <inttypes.h>
5:AD.c **** #include <pgmspace.h>
6:AD.c **** #include <avr/wdt.h>
7:AD.c ****
8:AD.c **** //======================全局變量======================================
9:AD.c **** uint16_t ad0_result; //存放AD0轉換結果
10:AD.c ****
11:AD.c ****
12:AD.c ****
13:AD.c **** //******************************延時子程序*****************************************
14:AD.c **** void delay_us(uint16_t u) //延時2us左右,delay(240)=100us;
15:AD.c **** {
94 .LM1:
95 /* prologue: frame size=0 */
96 /* prologue end (size=0) */
16:AD.c **** while(u)
98 .LM2:
99 0000 0097 sbiw r24,0
100 0002 11F0 breq .L7
101 .L5:
17:AD.c **** {
18:AD.c **** u--;
103 .LM3:
104 0004 0197 sbiw r24,1
105 0006 F1F7 brne .L5
106 .L7:
19:AD.c **** }
20:AD.c **** }
108 .LM4:
109 0008 0895 ret
110 /* epilogue: frame size=0 */
111 /* epilogue: noreturn */
112 /* epilogue end (size=0) */
113 /* function delay_us size 6 (6) */
115 .Lscope0:
119 .global delay_ms
121 delay_ms:
21:AD.c ****
22:AD.c **** // 延時nms
23:AD.c **** void delay_ms(uint16_t m)
24:AD.c **** {
123 .LM5:
124 /* prologue: frame size=0 */
125 000a 0F93 push r16
126 000c 1F93 push r17
127 000e CF93 push r28
128 0010 DF93 push r29
129 /* prologue end (size=4) */
130 0012 8C01 movw r16,r24
25:AD.c **** uint16_t i;
26:AD.c **** for(i=0;i<m;i++)
132 .LM6:
133 .LBB2:
134 0014 C0E0 ldi r28,lo8(0)
135 0016 D0E0 ldi r29,hi8(0)
136 0018 C817 cp r28,r24
137 001a D907 cpc r29,r25
138 001c 40F4 brsh .L15
139 .L13:
27:AD.c **** {
28:AD.c **** delay_us(2400); //延時1ms
141 .LM7:
142 001e 80E6 ldi r24,lo8(2400)
143 0020 99E0 ldi r25,hi8(2400)
144 0022 0E94 0000 call delay_us
146 .LM8:
147 0026 2196 adiw r28,1
148 0028 C017 cp r28,r16
149 002a D107 cpc r29,r17
150 002c C0F3 brlo .L13
151 .L15:
29:AD.c **** }
30:AD.c **** }
153 .LM9:
154 .LBE2:
155 /* epilogue: frame size=0 */
156 002e DF91 pop r29
157 0030 CF91 pop r28
158 0032 1F91 pop r17
159 0034 0F91 pop r16
160 0036 0895 ret
161 /* epilogue end (size=5) */
162 /* function delay_ms size 23 (14) */
167 .Lscope1:
171 .global delay_s
173 delay_s:
31:AD.c ****
32:AD.c **** //延時ns
33:AD.c **** void delay_s(uint16_t n)
34:AD.c **** {
175 .LM10:
176 /* prologue: frame size=0 */
177 0038 0F93 push r16
178 003a 1F93 push r17
179 003c CF93 push r28
180 003e DF93 push r29
181 /* prologue end (size=4) */
182 0040 8C01 movw r16,r24
35:AD.c **** uint16_t j;
36:AD.c **** for(j=0;j<n;j++)
184 .LM11:
185 .LBB3:
186 0042 C0E0 ldi r28,lo8(0)
187 0044 D0E0 ldi r29,hi8(0)
188 0046 C817 cp r28,r24
189 0048 D907 cpc r29,r25
190 004a 40F4 brsh .L23
191 .L21:
37:AD.c **** {
38:AD.c **** delay_ms(1000); //延時1s
193 .LM12:
194 004c 88EE ldi r24,lo8(1000)
195 004e 93E0 ldi r25,hi8(1000)
196 0050 0E94 0000 call delay_ms
198 .LM13:
199 0054 2196 adiw r28,1
200 0056 C017 cp r28,r16
201 0058 D107 cpc r29,r17
202 005a C0F3 brlo .L21
203 .L23:
39:AD.c **** }
40:AD.c ****
41:AD.c **** }
205 .LM14:
206 .LBE3:
207 /* epilogue: frame size=0 */
208 005c DF91 pop r29
209 005e CF91 pop r28
210 0060 1F91 pop r17
211 0062 0F91 pop r16
212 0064 0895 ret
213 /* epilogue end (size=5) */
214 /* function delay_s size 23 (14) */
219 .Lscope2:
222 .global AD0_SETTING_AND_START
224 AD0_SETTING_AND_START:
42:AD.c ****
43:AD.c **** //================================AD轉換設置,并啟動轉換=========================
44:AD.c **** void AD0_SETTING_AND_START()
45:AD.c **** {
226 .LM15:
227 /* prologue: frame size=0 */
228 /* prologue end (size=0) */
46:AD.c **** //Avcc作為基準電壓源,AREF引腳外加濾波電容,通道0
47:AD.c **** ADMUX = 0x00;
230 .LM16:
231 0066 17B8 out 39-0x20,__zero_reg__
48:AD.c **** //AD時鐘的分頻因子為128(AD轉換頻率為115.2k),啟動AD轉換
49:AD.c **** ADCSRA=0x87;
233 .LM17:
234 0068 87E8 ldi r24,lo8(-121)
235 006a 86B9 out 38-0x20,r24
50:AD.c **** }
237 .LM18:
238 /* epilogue: frame size=0 */
239 006c 0895 ret
240 /* epilogue end (size=1) */
241 /* function AD0_SETTING_AND_START size 4 (3) */
243 .Lscope3:
246 .global AD0_RESULT_FILTER
248 AD0_RESULT_FILTER:
51:AD.c ****
52:AD.c **** //=================================AD轉換濾波====================================
53:AD.c **** // AD轉換 采樣10次 去首尾求平均濾波
54:AD.c **** void AD0_RESULT_FILTER(void)
55:AD.c **** {
250 .LM19:
251 /* prologue: frame size=20 */
252 006e EF92 push r14
253 0070 FF92 push r15
254 0072 0F93 push r16
255 0074 1F93 push r17
256 0076 CF93 push r28
257 0078 DF93 push r29
258 007a CDB7 in r28,__SP_L__
259 007c DEB7 in r29,__SP_H__
260 007e 6497 sbiw r28,20
261 0080 0FB6 in __tmp_reg__,__SREG__
262 0082 F894 cli
263 0084 DEBF out __SP_H__,r29
264 0086 0FBE out __SREG__,__tmp_reg__
265 0088 CDBF out __SP_L__,r28
266 /* prologue end (size=14) */
56:AD.c **** uint8_t i,index1,index2,low;
57:AD.c **** uint16_t result_array[10],sum,temp=0x00;
58:AD.c **** float ad0_average;
59:AD.c **** //Avcc作為基準電壓源,AREF引腳外加濾波電容,通道0
60:AD.c **** ADMUX=0x00;
268 .LM20:
269 .LBB4:
270 008a 17B8 out 39-0x20,__zero_reg__
61:AD.c **** for(i=0;i<10;i++)
272 .LM21:
273 008c 00E0 ldi r16,lo8(0)
274 .L34:
62:AD.c **** {
63:AD.c **** //AD時鐘的分頻因子128
64:AD.c **** ADCSRA=0x87;
276 .LM22:
277 008e 87E8 ldi r24,lo8(-121)
278 0090 86B9 out 38-0x20,r24
65:AD.c **** ADCSRA|=1<<ADSC;
280 .LM23:
281 0092 369A sbi 38-0x20,6
66:AD.c **** loop_until_bit_is_set(ADCSRA,ADIF); //等待AD轉換結束
283 .LM24:
284 .L30:
285 0094 349B sbis 38-0x20,4
286 0096 FECF rjmp .L30
67:AD.c **** ADCSRA=ADCSRA|(1<<ADIF);
288 .LM25:
289 0098 349A sbi 38-0x20,4
68:AD.c **** low=ADCL;
291 .LM26:
292 009a 24B1 in r18,36-0x20
69:AD.c **** temp=ADCH;
294 .LM27:
295 009c 85B1 in r24,37-0x20
296 009e 9927 clr r25
70:AD.c **** temp=temp<<8;
298 .LM28:
299 00a0 982F mov r25,r24
300 00a2 8827 clr r24
71:AD.c **** temp=temp+low;
302 .LM29:
303 00a4 820F add r24,r18
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -