📄 mega8_spwm.lst
字号:
1 .file "mega8_spwm.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:
73 .global flag
74 .global flag
75 .section .bss
78 flag:
79 0000 00 .skip 1,0
80 .global ocr_reg
81 .data
84 ocr_reg:
85 0000 FE00 .word 254
86 .text
88 .global spwm_init
90 spwm_init:
1:mega8_spwm.c **** #include<avr/io.h>
2:mega8_spwm.c **** #include<avr/sleep.h>
3:mega8_spwm.c **** #include<avr/signal.h>
4:mega8_spwm.c **** #include<avr/interrupt.h>
5:mega8_spwm.c ****
6:mega8_spwm.c **** #define BYTE unsigned char
7:mega8_spwm.c **** #define WORD unsigned int
8:mega8_spwm.c ****
9:mega8_spwm.c **** #define PWMOUTA PB1
10:mega8_spwm.c **** #define PWMOUTB PB2
11:mega8_spwm.c **** #define PWMOUTC PB3
12:mega8_spwm.c ****
13:mega8_spwm.c **** int ocr_reg=0xfe;
14:mega8_spwm.c **** char flag=0x00;
15:mega8_spwm.c ****
16:mega8_spwm.c **** /************初始化程序**************/
17:mega8_spwm.c **** void spwm_init(void)
18:mega8_spwm.c **** {
92 .LM1:
93 /* prologue: frame size=0 */
94 /* prologue end (size=0) */
19:mega8_spwm.c **** PORTB|=(1<<PWMOUTA)|(1<<PWMOUTB); //把PWM置为输出
96 .LM2:
97 0000 88B3 in r24,56-0x20
98 0002 8660 ori r24,lo8(6)
99 0004 88BB out 56-0x20,r24
20:mega8_spwm.c **** DDRB |=(1<<PWMOUTA)|(1<<PWMOUTB);
101 .LM3:
102 0006 87B3 in r24,55-0x20
103 0008 8660 ori r24,lo8(6)
104 000a 87BB out 55-0x20,r24
21:mega8_spwm.c **** TIMSK=0x00;
106 .LM4:
107 000c 19BE out 89-0x20,__zero_reg__
22:mega8_spwm.c ****
23:mega8_spwm.c **** TCCR1B = 0x00; //stop
109 .LM5:
110 000e 1EBC out 78-0x20,__zero_reg__
24:mega8_spwm.c **** TCNT1 = 0x0000; //计数器初值
112 .LM6:
113 0010 1DBC out (76)+1-0x20,__zero_reg__
114 0012 1CBC out 76-0x20,__zero_reg__
25:mega8_spwm.c **** OCR1A = 0x00ff; //比较寄存器的值,来控制占空比 (占空比50%)
116 .LM7:
117 0014 8FEF ldi r24,lo8(255)
118 0016 90E0 ldi r25,hi8(255)
119 0018 9BBD out (74)+1-0x20,r25
120 001a 8ABD out 74-0x20,r24
26:mega8_spwm.c **** OCR1B = 0x0000; //(占空比50%)
122 .LM8:
123 001c 19BC out (72)+1-0x20,__zero_reg__
124 001e 18BC out 72-0x20,__zero_reg__
27:mega8_spwm.c **** ICR1 = 0x03ff; //捕捉寄存器的值 10位分辨率
126 .LM9:
127 0020 8FEF ldi r24,lo8(1023)
128 0022 93E0 ldi r25,hi8(1023)
129 0024 97BD out (70)+1-0x20,r25
130 0026 86BD out 70-0x20,r24
28:mega8_spwm.c **** TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<COM1B0)|(1<<WGM11);//|(1<<WGM10);
132 .LM10:
133 0028 82EB ldi r24,lo8(-78)
134 002a 8FBD out 79-0x20,r24
29:mega8_spwm.c **** //设置PWM的频率及PWM工作模式
30:mega8_spwm.c **** TCCR1B = (1<<WGM13)|(1<<WGM12)|(1<<CS10);//|(1<<CS11);
136 .LM11:
137 002c 89E1 ldi r24,lo8(25)
138 002e 8EBD out 78-0x20,r24
31:mega8_spwm.c **** //快速PWM模式,时钟不分频,TOP由ICR1设定
32:mega8_spwm.c **** TIMSK|=(1<<OCIE1A); //允许计数器比较匹配中断
140 .LM12:
141 0030 89B7 in r24,89-0x20
142 0032 8061 ori r24,lo8(16)
143 0034 89BF out 89-0x20,r24
33:mega8_spwm.c ****
34:mega8_spwm.c ****
35:mega8_spwm.c **** PORTB|=(1<<PWMOUTC);
145 .LM13:
146 0036 C39A sbi 56-0x20,3
36:mega8_spwm.c **** DDRB |=(1<<PWMOUTC);
148 .LM14:
149 0038 BB9A sbi 55-0x20,3
37:mega8_spwm.c **** TCCR2=0x69; //设置PWM的频率及PWM工作模式
151 .LM15:
152 003a 89E6 ldi r24,lo8(105)
153 003c 85BD out 69-0x20,r24
38:mega8_spwm.c **** TCNT2=0x00; //计数器初值
155 .LM16:
156 003e 14BC out 68-0x20,__zero_reg__
39:mega8_spwm.c **** OCR2 =0x7f; //比较寄存器的值,来控制占空比
158 .LM17:
159 0040 8FE7 ldi r24,lo8(127)
160 0042 83BD out 67-0x20,r24
161 /* epilogue: frame size=0 */
162 0044 0895 ret
163 /* epilogue end (size=1) */
164 /* function spwm_init size 35 (34) */
166 .Lscope0:
168 .global __vector_6
170 __vector_6:
40:mega8_spwm.c ****
41:mega8_spwm.c **** }
42:mega8_spwm.c ****
43:mega8_spwm.c **** /************中断服务程序**************/
44:mega8_spwm.c **** SIGNAL(SIG_OUTPUT_COMPARE1A)
45:mega8_spwm.c **** {
172 .LM18:
173 /* prologue: frame size=0 */
174 0046 1F92 push __zero_reg__
175 0048 0F92 push __tmp_reg__
176 004a 0FB6 in __tmp_reg__,__SREG__
177 004c 0F92 push __tmp_reg__
178 004e 1124 clr __zero_reg__
179 0050 2F93 push r18
180 0052 8F93 push r24
181 0054 9F93 push r25
182 /* prologue end (size=8) */
46:mega8_spwm.c **** // memcpy_P(ocr_reg,sin_table+i,1);//从Flash中取出正弦数据
47:mega8_spwm.c **** OCR1A=ocr_reg;//更新OCR1A
184 .LM19:
185 0056 8091 0000 lds r24,ocr_reg
186 005a 9091 0000 lds r25,(ocr_reg)+1
187 005e 9BBD out (74)+1-0x20,r25
188 0060 8ABD out 74-0x20,r24
48:mega8_spwm.c **** OCR1B=ocr_reg;//更新OCR1B
190 .LM20:
191 0062 99BD out (72)+1-0x20,r25
192 0064 88BD out 72-0x20,r24
49:mega8_spwm.c **** // OCR2 =ocr_reg;//更新OCR2
50:mega8_spwm.c **** // i++;//指向下一个数据
51:mega8_spwm.c **** if(flag)
194 .LM21:
195 0066 2091 0000 lds r18,flag
196 006a 2223 tst r18
197 006c 29F0 breq .L3
52:mega8_spwm.c **** ocr_reg--;
199 .LM22:
200 006e 0197 sbiw r24,1
201 0070 9093 0000 sts (ocr_reg)+1,r25
202 0074 8093 0000 sts ocr_reg,r24
203 .L3:
53:mega8_spwm.c **** if(!flag)
205 .LM23:
206 0078 2223 tst r18
207 007a 49F4 brne .L4
54:mega8_spwm.c **** ocr_reg++;
209 .LM24:
210 007c 8091 0000 lds r24,ocr_reg
211 0080 9091 0000 lds r25,(ocr_reg)+1
212 0084 0196 adiw r24,1
213 0086 9093 0000 sts (ocr_reg)+1,r25
214 008a 8093 0000 sts ocr_reg,r24
215 .L4:
55:mega8_spwm.c **** if(ocr_reg==0x03ff)
217 .LM25:
218 008e 8091 0000 lds r24,ocr_reg
219 0092 9091 0000 lds r25,(ocr_reg)+1
220 0096 23E0 ldi r18,hi8(1023)
221 0098 8F3F cpi r24,lo8(1023)
222 009a 9207 cpc r25,r18
223 009c 21F4 brne .L5
56:mega8_spwm.c **** // ocr_reg=0x00;
57:mega8_spwm.c **** flag=0x01;
225 .LM26:
226 009e 81E0 ldi r24,lo8(1)
227 00a0 8093 0000 sts flag,r24
228 00a4 04C0 rjmp .L2
229 .L5:
58:mega8_spwm.c **** if(ocr_reg==0x00)
231 .LM27:
232 00a6 892B or r24,r25
233 00a8 11F4 brne .L2
59:mega8_spwm.c **** // ocr_reg=0x00;
60:mega8_spwm.c **** flag=0x00;
235 .LM28:
236 00aa 1092 0000 sts flag,__zero_reg__
237 .L2:
238 /* epilogue: frame size=0 */
239 00ae 9F91 pop r25
240 00b0 8F91 pop r24
241 00b2 2F91 pop r18
242 00b4 0F90 pop __tmp_reg__
243 00b6 0FBE out __SREG__,__tmp_reg__
244 00b8 0F90 pop __tmp_reg__
245 00ba 1F90 pop __zero_reg__
246 00bc 1895 reti
247 /* epilogue end (size=8) */
248 /* function __vector_6 size 60 (44) */
250 .Lscope1:
252 .global main
254 main:
61:mega8_spwm.c **** }
62:mega8_spwm.c **** /****************主程序**************/
63:mega8_spwm.c **** int main(void)
64:mega8_spwm.c **** {
256 .LM29:
257 /* prologue: frame size=0 */
258 00be C0E0 ldi r28,lo8(__stack - 0)
259 00c0 D0E0 ldi r29,hi8(__stack - 0)
260 00c2 DEBF out __SP_H__,r29
261 00c4 CDBF out __SP_L__,r28
262 /* prologue end (size=4) */
65:mega8_spwm.c **** cli();
264 .LM30:
265 /* #APP */
266 00c6 F894 cli
66:mega8_spwm.c **** spwm_init(); //初始化
268 .LM31:
269 /* #NOAPP */
270 00c8 9BDF rcall spwm_init
67:mega8_spwm.c **** MCUCR = 0x00;
272 .LM32:
273 00ca 15BE out 85-0x20,__zero_reg__
68:mega8_spwm.c **** GICR = 0x00;
275 .LM33:
276 00cc 1BBE out 91-0x20,__zero_reg__
69:mega8_spwm.c **** set_sleep_mode(SLEEP_MODE_IDLE); //设置休眠模式为空闲模式
278 .LM34:
279 00ce 85B7 in r24,85-0x20
280 00d0 8F78 andi r24,lo8(-113)
281 00d2 85BF out 85-0x20,r24
70:mega8_spwm.c **** sei(); //开总中断允许
283 .LM35:
284 /* #APP */
285 00d4 7894 sei
286 /* #NOAPP */
287 .L9:
71:mega8_spwm.c **** while(1)
72:mega8_spwm.c **** {
73:mega8_spwm.c **** ;
74:mega8_spwm.c **** sleep_mode(); //进入休眠状态
289 .LM36:
290 00d6 85B7 in r24,85-0x20
291 00d8 8068 ori r24,lo8(-128)
292 00da 85BF out 85-0x20,r24
293 /* #APP */
294 00dc 8895 sleep
295
296 /* #NOAPP */
297 00de 85B7 in r24,85-0x20
298 00e0 8F77 andi r24,lo8(127)
299 00e2 85BF out 85-0x20,r24
300 00e4 F8CF rjmp .L9
301 /* epilogue: frame size=0 */
302 /* epilogue: noreturn */
303 /* epilogue end (size=0) */
304 /* function main size 25 (21) */
306 .Lscope2:
309 .text
311 Letext:
312 /* File "mega8_spwm.c": code 120 = 0x0078 ( 99), prologues 12, epilogues 9 */
DEFINED SYMBOLS
*ABS*:00000000 mega8_spwm.c
C:\DOCUME~1\Wilson\LOCALS~1\Temp/ccuqaaaa.s:3 *ABS*:0000003f __SREG__
C:\DOCUME~1\Wilson\LOCALS~1\Temp/ccuqaaaa.s:4 *ABS*:0000003e __SP_H__
C:\DOCUME~1\Wilson\LOCALS~1\Temp/ccuqaaaa.s:5 *ABS*:0000003d __SP_L__
C:\DOCUME~1\Wilson\LOCALS~1\Temp/ccuqaaaa.s:6 *ABS*:00000000 __tmp_reg__
C:\DOCUME~1\Wilson\LOCALS~1\Temp/ccuqaaaa.s:7 *ABS*:00000001 __zero_reg__
C:\DOCUME~1\Wilson\LOCALS~1\Temp/ccuqaaaa.s:78 .bss:00000000 flag
C:\DOCUME~1\Wilson\LOCALS~1\Temp/ccuqaaaa.s:84 .data:00000000 ocr_reg
C:\DOCUME~1\Wilson\LOCALS~1\Temp/ccuqaaaa.s:90 .text:00000000 spwm_init
C:\DOCUME~1\Wilson\LOCALS~1\Temp/ccuqaaaa.s:170 .text:00000046 __vector_6
C:\DOCUME~1\Wilson\LOCALS~1\Temp/ccuqaaaa.s:254 .text:000000be main
C:\DOCUME~1\Wilson\LOCALS~1\Temp/ccuqaaaa.s:311 .text:000000e6 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
__stack
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -