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

📄 main.lis

📁 avr icc 平台开发的pwm模拟功能
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module main.c
                        .area data(ram, con, rel)
 0000           _data::
 0000                   .blkb 2
                        .area idata
 0000 0000              .byte 0,0
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 0000              .byte 0,0
                        .area data(ram, con, rel)
 0004                   .dbfile D:\NEW\AVR_PWM/main.h
 0004                   .dbsym e data _data A[4:4]c
 0004           _CNT::
 0004                   .blkb 1
                        .area idata
 0004 00                .byte 0
                        .area data(ram, con, rel)
 0005                   .dbfile D:\NEW\AVR_PWM/main.h
 0005                   .dbsym e CNT _CNT c
 0005           _OcrReg::
 0005                   .blkb 2
                        .area idata
 0005 0004              .word 1024
                        .area data(ram, con, rel)
 0007                   .dbfile D:\NEW\AVR_PWM/main.h
 0007                   .dbfile D:\NEW\AVR_PWM\main.c
 0007                   .dbsym e OcrReg _OcrReg I
 0007           _Icr1Reg::
 0007                   .blkb 2
                        .area idata
 0007 FF07              .word 2047
                        .area data(ram, con, rel)
 0009                   .dbfile D:\NEW\AVR_PWM\main.c
 0009                   .dbsym e Icr1Reg _Icr1Reg I
                        .area text(rom, con, rel)
 0000                   .dbfile D:\NEW\AVR_PWM\main.c
 0000                   .dbfunc e init _init fV
                        .even
 0000           _init::
 0000                   .dbline -1
 0000                   .dbline 23
 0000           ; #define MAIN_C
 0000           ; #include "includes.h"
 0000           ; /***************************/
 0000           ; /*PWM*/
 0000           ; /*晶振为4MHz*/
 0000           ; /*利用Timer1的OC1A脚输出占空比可调的信号*/
 0000           ; /*通过按键控制OCR1A的值*/
 0000           ; /***************************/
 0000           ; 
 0000           ; #define PwmOut     PD5     //A通道的PWM输出
 0000           ; #define OCR        OCR1A
 0000           ; #define KeyUp      PA0     //增大PWM值的按键
 0000           ; #define KeyDown    PA1     //减小PWM值的按键
 0000           ; #define Above      PA2     //设置位值过高指示
 0000           ; #define Below      PA3     //设置位值过低指示
 0000           ; #define STEP       64      //定义按键时的步进值
 0000           ; int OcrReg = 1024;         //OCR1A初始值
 0000           ; int Icr1Reg = 0x7ff;       //PWM的计数顶部值  Icr1Reg = 2047
 0000           ; //unsigned char *show = "0000"; 
 0000           ; unsigned char temp;
 0000           ; 
 0000           ; void init(void)   //初始化函数
 0000           ; {
 0000                   .dbline 25
 0000           ;     //比较匹配时清零,计数到最大时置位OC1A
 0000           ;  TCCR1A |= (1<<COM1A1)|(1<<PWM11);/*PWM11=WGM11 name changed*/  
 0000 8FB5              in R24,0x2f
 0002 8268              ori R24,130
 0004 8FBD              out 0x2f,R24
 0006                   .dbline 27
 0006           ;     //11位分辨率,快速PWM模式,使用系统时钟作为计数时钟
 0006           ;     TCCR1B |= (1<<WGM13)|(1<<WGM12)|(1<<CS10);
 0006 8EB5              in R24,0x2e
 0008 8961              ori R24,25
 000A 8EBD              out 0x2e,R24
 000C                   .dbline 28
 000C           ;     ICR1   = Icr1Reg;  
 000C 20900700          lds R2,_Icr1Reg
 0010 30900800          lds R3,_Icr1Reg+1
 0014 37BC              out 0x27,R3
 0016 26BC              out 0x26,R2
 0018                   .dbline 29
 0018           ;     OCR    = 0 ;
 0018 2224              clr R2
 001A 3324              clr R3
 001C 3BBC              out 0x2b,R3
 001E 2ABC              out 0x2a,R2
 0020                   .dbline 30
 0020           ;     DDRD  |= (1<<PwmOut);          //置PWM为输出
 0020 8D9A              sbi 0x11,5
 0022                   .dbline 31
 0022           ;     DDRA  |= (1<<Above)|(1<<Below);      //指示灯定义为输出
 0022 8AB3              in R24,0x1a
 0024 8C60              ori R24,12
 0026 8ABB              out 0x1a,R24
 0028                   .dbline 32
 0028           ;     DDRA  &= ~((1<<KeyUp)|(1<<KeyDown)); //按键定义为输入
 0028 8AB3              in R24,0x1a
 002A 8C7F              andi R24,252
 002C 8ABB              out 0x1a,R24
 002E                   .dbline 33
 002E           ;     PORTA |= (1<<KeyUp)|(1<<KeyDown);    //按键开启上拉
 002E 8BB3              in R24,0x1b
 0030 8360              ori R24,3
 0032 8BBB              out 0x1b,R24
 0034                   .dbline 34
 0034           ;     PORTA |= (1<<Above)|(1<<Below);      //关闭两个指示灯
 0034 8BB3              in R24,0x1b
 0036 8C60              ori R24,12
 0038 8BBB              out 0x1b,R24
 003A                   .dbline -2
 003A                   .dbline 37
 003A           ;     //TIMSK |= (1<<OCIE1A);   //允许计数器比较匹配中断
 003A           ;     //SREG  |= (1<<7);   //开全局中断
 003A           ; }
 003A           L1:
 003A                   .dbline 0 ; func end
 003A 0895              ret
 003C                   .dbend
 003C                   .dbfunc e ShowValue _ShowValue fV
 003C           ;           temp -> R20,R21
 003C           ;          value -> R22,R23
                        .even
 003C           _ShowValue::
 003C 0E940000          xcall push_gset2
 0040 B801              movw R22,R16
 0042 2297              sbiw R28,2
 0044                   .dbline -1
 0044                   .dbline 40
 0044           ; 
 0044           ; void  ShowValue(int value)
 0044           ; {
 0044                   .dbline 41
 0044           ;     unsigned char *temp = "0000";
 0044 40E0              ldi R20,<L3
 0046 50E0              ldi R21,>L3
 0048                   .dbline 42
 0048           ;     temp[0] = value/1000 + 0x30;
 0048 28EE              ldi R18,1000
 004A 33E0              ldi R19,3
 004C 8B01              movw R16,R22
 004E 0E940000          xcall div16s
 0052 C801              movw R24,R16
 0054 C096              adiw R24,48
 0056 FA01              movw R30,R20
 0058 8083              std z+0,R24
 005A                   .dbline 43
 005A           ;     value = value%1000;
 005A 28EE              ldi R18,1000
 005C 33E0              ldi R19,3
 005E 8B01              movw R16,R22
 0060 0E940000          xcall mod16s
 0064 B801              movw R22,R16
 0066                   .dbline 44
 0066           ;     temp[1] = value/100 +0x30;
 0066 24E6              ldi R18,100
 0068 30E0              ldi R19,0
 006A 0E940000          xcall div16s
 006E C801              movw R24,R16
 0070 C096              adiw R24,48
 0072 FA01              movw R30,R20
 0074 8183              std z+1,R24
 0076                   .dbline 45
 0076           ;     value = value%100;
 0076 24E6              ldi R18,100
 0078 30E0              ldi R19,0
 007A 8B01              movw R16,R22
 007C 0E940000          xcall mod16s
 0080 B801              movw R22,R16
 0082                   .dbline 46
 0082           ;     temp[2] = value/10 + 0x30;
 0082 2AE0              ldi R18,10
 0084 30E0              ldi R19,0
 0086 0E940000          xcall div16s
 008A C801              movw R24,R16
 008C C096              adiw R24,48
 008E FA01              movw R30,R20
 0090 8283              std z+2,R24
 0092                   .dbline 47
 0092           ;     value = value%10;
 0092 2AE0              ldi R18,10
 0094 30E0              ldi R19,0
 0096 8B01              movw R16,R22
 0098 0E940000          xcall mod16s
 009C B801              movw R22,R16
 009E                   .dbline 48
 009E           ;     temp[3] = value + 0x30;  
 009E CB01              movw R24,R22
 00A0 C096              adiw R24,48
 00A2 FA01              movw R30,R20
 00A4 8383              std z+3,R24
 00A6                   .dbline 49
 00A6           ;     ClearLine(2);
 00A6 02E0              ldi R16,2
 00A8 0E940000          xcall _ClearLine
 00AC                   .dbline 50
 00AC           ;     LCD_DisplayString(2,1,"OCR1A = ");
 00AC 80E0              ldi R24,<L4
 00AE 90E0              ldi R25,>L4
 00B0 9983              std y+1,R25
 00B2 8883              std y+0,R24
 00B4 21E0              ldi R18,1
 00B6 02E0              ldi R16,2
 00B8 0E940000          xcall _LCD_DisplayString
 00BC                   .dbline 51
 00BC           ;     LCD_DisplayString(2,9,temp);  
 00BC 5983              std y+1,R21
 00BE 4883              std y+0,R20
 00C0 29E0              ldi R18,9
 00C2 02E0              ldi R16,2
 00C4 0E940000          xcall _LCD_DisplayString
 00C8                   .dbline -2
 00C8                   .dbline 52
 00C8           ; }
 00C8           L2:
 00C8 2296              adiw R28,2
 00CA 0E940000          xcall pop_gset2
 00CE                   .dbline 0 ; func end
 00CE 0895              ret
 00D0                   .dbsym r temp 20 pc
 00D0                   .dbsym r value 22 I
 00D0                   .dbend
 00D0                   .dbfunc e main _main fV
 00D0           ;              i -> R20
                        .even
 00D0           _main::
 00D0 2297              sbiw R28,2
 00D2                   .dbline -1
 00D2                   .dbline 55
 00D2           ;  
 00D2           ; void main(void)
 00D2           ; { 
 00D2                   .dbline 57
 00D2           ;     unsigned char i; 
 00D2           ;     init();
 00D2 96DF              xcall _init
 00D4                   .dbline 58
 00D4           ;     Init_LCD();
 00D4 0E940000          xcall _Init_LCD
 00D8                   .dbline 59
 00D8           ;     OCR = OcrReg;
 00D8 20900500          lds R2,_OcrReg
 00DC 30900600          lds R3,_OcrReg+1
 00E0 3BBC              out 0x2b,R3
 00E2 2ABC              out 0x2a,R2
 00E4                   .dbline 60
 00E4           ;     LCD_DisplayString(1,1,"PWM test");
 00E4 80E0              ldi R24,<L6
 00E6 90E0              ldi R25,>L6
 00E8 9983              std y+1,R25
 00EA 8883              std y+0,R24
 00EC 21E0              ldi R18,1
 00EE 01E0              ldi R16,1
 00F0 0E940000          xcall _LCD_DisplayString
 00F4                   .dbline 61
 00F4           ;     LCD_DisplayString(2,1,"OCR1A = ");
 00F4 80E0              ldi R24,<L4
 00F6 90E0              ldi R25,>L4
 00F8 9983              std y+1,R25
 00FA 8883              std y+0,R24
 00FC 21E0              ldi R18,1
 00FE 02E0              ldi R16,2
 0100 0E940000          xcall _LCD_DisplayString
 0104                   .dbline 62
 0104           ;     ShowValue(OcrReg);
 0104 00910500          lds R16,_OcrReg
 0108 10910600          lds R17,_OcrReg+1
 010C 97DF              xcall _ShowValue
 010E 79C0              xjmp L8
 0110           L7:
 0110                   .dbline 64
 0110           ;     while(1)
 0110           ;     {                
 0110                   .dbline 65
 0110           ;         if(!(PINA&(1<<KeyUp)))
 0110 C899              sbic 0x19,0

⌨️ 快捷键说明

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