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

📄 pwm.lis

📁 单片机程序AVRATMEGA8PWM程序
💻 LIS
字号:
                        .module PWM.C
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\PWM\PWM.C
 0000                   .dbfunc e initial_PWM _initial_PWM fV
                        .even
 0000           _initial_PWM::
 0000                   .dbline -1
 0000                   .dbline 15
 0000           ; /*************************
 0000           ;      NAME: PWM.C
 0000           ;        DATA: 2007/7/9
 0000           ;        AUTHOR: MICHAEL
 0000           ;        SOFTWARE: ICCAVR6.31
 0000           ;        MCU: ATMEGA8L
 0000           ;        8.000000MHz
 0000           ; *************************/
 0000           ; #include <iom8v.h> 
 0000           ; #include <macros.h> 
 0000           ; //-----------------------------------------------------------------------
 0000           ; //                       初始化函数
 0000           ; //-----------------------------------------------------------------------
 0000           ; void initial_PWM(void)
 0000           ; {
 0000                   .dbline 16
 0000           ;       DDRB=0XFF;
 0000 8FEF              ldi R24,255
 0002 87BB              out 0x17,R24
 0004                   .dbline 17
 0004           ;         PORTB=0XFF;
 0004 88BB              out 0x18,R24
 0006                   .dbline 18
 0006           ;       TCCR2=0X79;
 0006 89E7              ldi R24,121
 0008 85BD              out 0x25,R24
 000A                   .dbline 19
 000A           ;         OCR2=0X00;   //设置比较数值
 000A 2224              clr R2
 000C 23BC              out 0x23,R2
 000E                   .dbline -2
 000E           L1:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbend
 0010                   .dbfunc e Fast_PWM _Fast_PWM fV
 0010           ;        PWMdata -> R16
                        .even
 0010           _Fast_PWM::
 0010                   .dbline -1
 0010                   .dbline 25
 0010           ; }
 0010           ; //----------------------------------------------------------------------------------
 0010           ; //                       8位快速PWM函数(输出频率为Fout=Fio/N*256,N是分频数)
 0010           ; //----------------------------------------------------------------------------------
 0010           ; void Fast_PWM(unsigned char PWMdata)//PWMdata越大,占空比越小
 0010           ; {
 0010                   .dbline 26
 0010           ;        TCCR2=0X79;     //快速PWM模式,时钟为I/O时钟不分频
 0010 89E7              ldi R24,121
 0012 85BD              out 0x25,R24
 0014                   .dbline 33
 0014           ; //       TCCR2=0X7A;     //快速PWM模式,时钟为I/O时钟8分频
 0014           ; //       TCCR2=0X7B;     //快速PWM模式,时钟为I/O时钟32分频
 0014           ; //       TCCR2=0X7C;     //快速PWM模式,时钟为I/O时钟64分频
 0014           ; //       TCCR2=0X7D;     //快速PWM模式,时钟为I/O时钟128分频
 0014           ; //       TCCR2=0X7E;     //快速PWM模式,时钟为I/O时钟256分频
 0014           ; //       TCCR2=0X7F;     //快速PWM模式,时钟为I/O时钟1024分频
 0014           ;          TCNT2=PWMdata;                
 0014 04BD              out 0x24,R16
 0016                   .dbline 34
 0016           ;          OCR2=PWMdata;   //设置比较数值
 0016 03BD              out 0x23,R16
 0018                   .dbline -2
 0018           L2:
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbsym r PWMdata 16 c
 001A                   .dbend
                        .area vector(rom, abs)
                        .org 22
 0016 1FC0              rjmp _USART_receive
                        .area text(rom, con, rel)
 001A                   .dbfile C:\DOCUME~1\Administrator\桌面\PWM\PWM.C
 001A                   .dbfunc e initial_USART _initial_USART fV
                        .even
 001A           _initial_USART::
 001A                   .dbline -1
 001A                   .dbline 41
 001A           ; }
 001A           ; #pragma interrupt_handler USART_receive: 12  
 001A           ; //------------------------------------------------------------------
 001A           ; //                                               USART初始化函数
 001A           ; //------------------------------------------------------------------
 001A           ; void initial_USART(void)
 001A           ; {
 001A                   .dbline 43
 001A           ; //-----端口设置--------
 001A           ;               PORTB = 0xFF;
 001A 8FEF              ldi R24,255
 001C 88BB              out 0x18,R24
 001E                   .dbline 44
 001E           ;               DDRB  = 0xFF;
 001E 87BB              out 0x17,R24
 0020                   .dbline 45
 0020           ;               PORTC = 0x00; 
 0020 2224              clr R2
 0022 25BA              out 0x15,R2
 0024                   .dbline 46
 0024           ;               DDRC  = 0x00;
 0024 24BA              out 0x14,R2
 0026                   .dbline 47
 0026           ;               PORTD = 0x00;
 0026 22BA              out 0x12,R2
 0028                   .dbline 48
 0028           ;               DDRD  = 0xFF;
 0028 81BB              out 0x11,R24
 002A                   .dbline 50
 002A           ; //------USART设置-------
 002A           ;                       UCSRA=0X00;   //波特率不加倍,同时清空一些标志位
 002A 2BB8              out 0xb,R2
 002C                   .dbline 51
 002C           ;                       UCSRB=0X98;   //使能接收和发送,数据位为8位,开接收中断
 002C 88E9              ldi R24,152
 002E 8AB9              out 0xa,R24
 0030                   .dbline 52
 0030           ;                       UCSRC=0X86;   //异步方式,禁止奇偶校验,数据位为8位
 0030 86E8              ldi R24,134
 0032 80BD              out 0x20,R24
 0034                   .dbline 54
 0034           ;       //时钟频率8M,波特率9600
 0034           ;                       UBRRH=0X00;
 0034 20BC              out 0x20,R2
 0036                   .dbline 55
 0036           ;                       UBRRL=0X33;
 0036 83E3              ldi R24,51
 0038 89B9              out 0x9,R24
 003A                   .dbline 60
 003A           ;       //时钟频率8M,波特率57600
 003A           ;       //         UBRRH=0X00;
 003A           ;       //                 UBRRL=0X08;
 003A           ;       
 003A           ;                       SEI();     //全局开中断
 003A 7894              sei
 003C                   .dbline -2
 003C           L3:
 003C                   .dbline 0 ; func end
 003C 0895              ret
 003E                   .dbend
 003E                   .dbfunc e USART_receive _USART_receive fV
 003E           ;        RECdata -> R20
                        .even
 003E           _USART_receive::
 003E 00D0              rcall push_lset
 0040 00D0              rcall push_gset1
 0042                   .dbline -1
 0042                   .dbline 66
 0042           ; }                                                                                                //发送移位缓冲器中的数据被送出,且当发送缓冲器 (UDR) 为空时TXC 置位
 0042           ; //--------------------------------------------------------------
 0042           ; //                                            接收中断服务函数
 0042           ; //--------------------------------------------------------------
 0042           ; void USART_receive(void)
 0042           ; {
 0042                   .dbline 68
 0042           ;        unsigned char RECdata;  
 0042           ;                 RECdata=UDR;
 0042 4CB1              in R20,0xc
 0044                   .dbline 69
 0044           ;                                  Fast_PWM(RECdata);
 0044 042F              mov R16,R20
 0046 E4DF              rcall _Fast_PWM
 0048                   .dbline -2
 0048           L4:
 0048 00D0              rcall pop_gset1
 004A 00D0              rcall pop_lset
 004C                   .dbline 0 ; func end
 004C 1895              reti
 004E                   .dbsym r RECdata 20 c
 004E                   .dbend
 004E                   .dbfunc e main _main fV
                        .even
 004E           _main::
 004E                   .dbline -1
 004E                   .dbline 76
 004E           ;       
 004E           ; }     
 004E           ; //-----------------------------------------------------------------------
 004E           ; //                     主函数
 004E           ; //-----------------------------------------------------------------------
 004E           ; void main(void)
 004E           ; {
 004E                   .dbline 77
 004E           ;       initial_PWM();
 004E D8DF              rcall _initial_PWM
 0050                   .dbline 78
 0050           ;         initial_USART();
 0050 E4DF              rcall _initial_USART
 0052           L6:
 0052                   .dbline 79
 0052           L7:
 0052                   .dbline 79
 0052 FFCF              rjmp L6
 0054           X0:
 0054                   .dbline -2
 0054           L5:
 0054                   .dbline 0 ; func end
 0054 0895              ret
 0056                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -