📄 oc1ab输出pwm.lis
字号:
.module OC1AB输出PWM.c
.area text(rom, con, rel)
0000 .dbfile E:\xiaozhiyong2009\设计资料\项目设计\ICCAVR_mega8_C\ICCAVR_mega8_OC1AB输出PWM\OC1AB输出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:52:41
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_timer1_PWM _init_timer1_PWM fV
0020 ; y -> R18,R19
0020 ; x -> R16,R17
.even
0020 _init_timer1_PWM::
0020 .dbline -1
0020 .dbline 41
0020 ; //all peripherals are now initialized
0020 ; }
0020 ;
0020 ; /************************************
0020 ; 用 途:用TC1输出PWM
0020 ; Taget :mega8
0020 ; crystal :8M
0020 ; 介 绍:PB1(OC1A),PB2(OC1B)
0020 ; 入口参数:A,B的占空比
0020 ; 出口参数:
0020 ; *************************************/
0020 ; void init_timer1_PWM(unsigned int x,unsigned int y)
0020 ; {
0020 .dbline 42
0020 ; DDRB|=(1<<PB1)|(1<<PB2);
0020 87B3 in R24,0x17
0022 8660 ori R24,6
0024 87BB out 0x17,R24
0026 .dbline 43
0026 ; TCCR1B=0x0;//先停止TC1
0026 2224 clr R2
0028 2EBC out 0x2e,R2
002A .dbline 44
002A ; TCNT1=0;//设置TCNT1的初值
002A 3324 clr R3
002C 3DBC out 0x2d,R3
002E 2CBC out 0x2c,R2
0030 .dbline 45
0030 ; OCR1A=x;//设置OC1A的初值
0030 1BBD out 0x2b,R17
0032 0ABD out 0x2a,R16
0034 .dbline 46
0034 ; OCR1B=y;//设置OC1B的初值
0034 39BD out 0x29,R19
0036 28BD out 0x28,R18
0038 .dbline 47
0038 ; ICR1=0xff;//设置ICR的初值
0038 8FEF ldi R24,255
003A 90E0 ldi R25,0
003C 97BD out 0x27,R25
003E 86BD out 0x26,R24
0040 .dbline 50
0040 ; //系统时钟64分频CS1[2、0]=0x03
0040 ; //COM1A[1-0]=0x00,COM1B[1-0]=0x02
0040 ; TCCR1A|=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);
0040 8FB5 in R24,0x2f
0042 826A ori R24,162
0044 8FBD out 0x2f,R24
0046 .dbline 51
0046 ; TCCR1B|=(1<<WGM13)|(1<<CS11)|(1<<CS10);//Starttimer
0046 8EB5 in R24,0x2e
0048 8361 ori R24,19
004A 8EBD out 0x2e,R24
004C .dbline -2
004C L3:
004C .dbline 0 ; func end
004C 0895 ret
004E .dbsym r y 18 i
004E .dbsym r x 16 i
004E .dbend
004E .dbfunc e timer1_PWM _timer1_PWM fV
004E ; y -> R18,R19
004E ; x -> R16,R17
.even
004E _timer1_PWM::
004E .dbline -1
004E .dbline 55
004E ; }
004E ; //调节占空比
004E ; void timer1_PWM(unsigned int x,unsigned int y)
004E ; {
004E .dbline 56
004E ; OCR1A=x;
004E 1BBD out 0x2b,R17
0050 0ABD out 0x2a,R16
0052 .dbline 57
0052 ; OCR1B=y;
0052 39BD out 0x29,R19
0054 28BD out 0x28,R18
0056 .dbline -2
0056 L4:
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbsym r y 18 i
0058 .dbsym r x 16 i
0058 .dbend
0058 .dbfunc e main _main fV
.even
0058 _main::
0058 .dbline -1
0058 .dbline 61
0058 ; }
0058 ;
0058 ; void main()
0058 ; {
0058 .dbline 62
0058 ; port_init();
0058 D3DF rcall _port_init
005A .dbline 63
005A ; init_devices();
005A DADF rcall _init_devices
005C .dbline 65
005C ;
005C ; init_timer1_PWM(100,200);
005C 28EC ldi R18,200
005E 30E0 ldi R19,0
0060 04E6 ldi R16,100
0062 10E0 ldi R17,0
0064 DDDF rcall _init_timer1_PWM
0066 02C0 rjmp L7
0068 L6:
0068 .dbline 67
0068 ; while(1)
0068 ; {
0068 .dbline 68
0068 ; PORTB=0xff;
0068 8FEF ldi R24,255
006A 88BB out 0x18,R24
006C .dbline 69
006C ; }
006C L7:
006C .dbline 66
006C FDCF rjmp L6
006E X0:
006E .dbline -2
006E L5:
006E .dbline 0 ; func end
006E 0895 ret
0070 .dbend
0070 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -