?? oc2輸出pwm.lis
字號:
.module OC2輸出PWM.c
.area text(rom, con, rel)
0000 .dbfile E:\xiaozhiyong2009\設計資料\項目設計\ICCAVR_mega8_C\ICCAVR_mega8_OC2輸出PWM\OC2輸出PWM.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 9
0000 ; //ICC-AVR application builder : 2009-3-11 13:30:36
0000 ; // Target : M8
0000 ; // Crystal: 8.0000Mhz
0000 ;
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 10
0000 ; PORTB = 0x00;
0000 2224 clr R2
0002 28BA out 0x18,R2
0004 .dbline 11
0004 ; DDRB = 0x00;
0004 27BA out 0x17,R2
0006 .dbline 12
0006 ; PORTC = 0x00; //m103 output only
0006 25BA out 0x15,R2
0008 .dbline 13
0008 ; DDRC = 0x00;
0008 24BA out 0x14,R2
000A .dbline 14
000A ; PORTD = 0x00;
000A 22BA out 0x12,R2
000C .dbline 15
000C ; DDRD = 0x00;
000C 21BA out 0x11,R2
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbend
0010 .dbfunc e init_devices _init_devices fV
.even
0010 _init_devices::
0010 .dbline -1
0010 .dbline 20
0010 ; }
0010 ;
0010 ; //call this routine to initialize all peripherals
0010 ; void init_devices(void)
0010 ; {
0010 .dbline 22
0010 ; //stop errant interrupts until set up
0010 ; CLI(); //disable all interrupts
0010 F894 cli
0012 .dbline 23
0012 ; port_init();
0012 F6DF rcall _port_init
0014 .dbline 25
0014 ;
0014 ; MCUCR = 0x00;
0014 2224 clr R2
0016 25BE out 0x35,R2
0018 .dbline 26
0018 ; GICR = 0x00;
0018 2BBE out 0x3b,R2
001A .dbline 27
001A ; TIMSK = 0x00; //timer interrupt sources
001A 29BE out 0x39,R2
001C .dbline 28
001C ; SEI(); //re-enable interrupts
001C 7894 sei
001E .dbline -2
001E L2:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbend
0020 .dbfunc e init_timer2_PWM _init_timer2_PWM fV
0020 ; n -> R16
.even
0020 _init_timer2_PWM::
0020 .dbline -1
0020 .dbline 41
0020 ; //all peripherals are now initialized
0020 ; }
0020 ;
0020 ; /************************************
0020 ; 用 途:用TC2的PWM進行相位可調輸出
0020 ; Taget :mega8
0020 ; crystal :8M
0020 ; 介 紹:輸出為OC2(PB3)
0020 ; 入口參數:n為0-255,代表占空比
0020 ; 出口參數:
0020 ; *************************************/
0020 ; void init_timer2_PWM(unsigned char n)
0020 ; {
0020 .dbline 42
0020 ; DDRB=(1<<PB3);
0020 88E0 ldi R24,8
0022 87BB out 0x17,R24
0024 .dbline 43
0024 ; TCCR2=0;//TC2處于定時方式,先停止TC2
0024 2224 clr R2
0026 25BC out 0x25,R2
0028 .dbline 44
0028 ; TCNT2=0;//設初值
0028 24BC out 0x24,R2
002A .dbline 45
002A ; OCR2=255-n;//設比較參考值//恒定低電平
002A 202E mov R2,R16
002C 3324 clr R3
002E 8FEF ldi R24,255
0030 90E0 ldi R25,0
0032 2C01 movw R4,R24
0034 4218 sub R4,R2
0036 5308 sbc R5,R3
0038 43BC out 0x23,R4
003A .dbline 46
003A ; TIMSK&=(~((1<<OCIE2)|(1<<TOIE2)));//關閉TOV2中斷
003A 89B7 in R24,0x39
003C 8F73 andi R24,63
003E 89BF out 0x39,R24
0040 .dbline 48
0040 ; //打開TC2選擇相位可調PWM模式,64分頻
0040 ; TCCR2|=(1<<WGM20)|(1<<COM21)|(1<<COM20)|(1<<CS22);
0040 85B5 in R24,0x25
0042 8467 ori R24,116
0044 85BD out 0x25,R24
0046 .dbline -2
0046 L3:
0046 .dbline 0 ; func end
0046 0895 ret
0048 .dbsym r n 16 c
0048 .dbend
0048 .dbfunc e timer2_PWM _timer2_PWM fV
0048 ; n -> R16
.even
0048 _timer2_PWM::
0048 .dbline -1
0048 .dbline 52
0048 ; }
0048 ; //調節占空比
0048 ; void timer2_PWM(unsigned char n)
0048 ; {
0048 .dbline 53
0048 ; OCR2=255-n;
0048 202E mov R2,R16
004A 3324 clr R3
004C 8FEF ldi R24,255
004E 90E0 ldi R25,0
0050 8219 sub R24,R2
0052 9309 sbc R25,R3
0054 83BD out 0x23,R24
0056 .dbline -2
0056 L4:
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbsym r n 16 c
0058 .dbend
0058 .dbfunc e main _main fV
.even
0058 _main::
0058 .dbline -1
0058 .dbline 57
0058 ; }
0058 ;
0058 ; void main()
0058 ; {
0058 .dbline 58
0058 ; port_init();
0058 D3DF rcall _port_init
005A .dbline 59
005A ; init_devices();
005A DADF rcall _init_devices
005C .dbline 61
005C ;
005C ; init_timer2_PWM(100);
005C 04E6 ldi R16,100
005E E0DF rcall _init_timer2_PWM
0060 L6:
0060 .dbline 63
0060 ; while(1)
0060 ; {
0060 .dbline 64
0060 ; ;
0060 .dbline 65
0060 ; }
0060 L7:
0060 .dbline 62
0060 FFCF rjmp L6
0062 X0:
0062 .dbline -2
0062 L5:
0062 .dbline 0 ; func end
0062 0895 ret
0064 .dbend
0064 ; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -