⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mega8_spwm.lst

📁 avr mega8 pwm 试验带 Proteus 仿真
💻 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 + -