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

📄 oc2输出pwm.lis

📁 ICC mega8例子
💻 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 + -