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

📄 pwm.lis

📁 采用AVR16单片机写的pwm输出程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module pwm.c
                        .area data(ram, con, rel)
 0000           _Table::
 0000                   .blkb 2
                        .area idata
 0000 3F06              .byte 63,6
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 5B4F              .byte 91,'O
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 666D              .byte 'f,'m
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 7D07              .byte 125,7
                        .area data(ram, con, rel)
 0008                   .blkb 2
                        .area idata
 0008 7F6F              .byte 127,'o
                        .area data(ram, con, rel)
 000A                   .blkb 1
                        .area idata
 000A 79                .byte 'y
                        .area data(ram, con, rel)
 000B                   .blkb 1
                        .area idata
 000B 00                .byte 0
                        .area data(ram, con, rel)
 000C                   .dbfile F:\练习\pwm脉宽调制器\pwm.c
 000C                   .dbsym e Table _Table A[12:12]c
 000C           _Data1::
 000C                   .blkb 2
                        .area idata
 000C 0A00              .byte 10,0
                        .area data(ram, con, rel)
 000E                   .dbfile F:\练习\pwm脉宽调制器\pwm.c
 000E                   .blkb 2
                        .area idata
 000E 0500              .byte 5,0
                        .area data(ram, con, rel)
 0010                   .dbfile F:\练习\pwm脉宽调制器\pwm.c
 0010                   .dbsym e Data1 _Data1 A[4:4]c
 0010           _Data2::
 0010                   .blkb 2
                        .area idata
 0010 0309              .byte 3,9
                        .area data(ram, con, rel)
 0012                   .dbfile F:\练习\pwm脉宽调制器\pwm.c
 0012                   .blkb 2
                        .area idata
 0012 0100              .byte 1,0
                        .area data(ram, con, rel)
 0014                   .dbfile F:\练习\pwm脉宽调制器\pwm.c
 0014                   .dbsym e Data2 _Data2 A[4:4]c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\练习\pwm脉宽调制器\pwm.c
 0000                   .dbfunc e delay_us _delay_us fV
 0000           ;              t -> R16,R17
                        .even
 0000           _delay_us::
 0000                   .dbline -1
 0000                   .dbline 16
 0000           ; //***************FileName:PWM.C***************//
 0000           ; //***************ICCAVR V6.30编译*****************//
 0000           ; 
 0000           ; #include <iom16v.h>                 
 0000           ; #define uchar unsigned char
 0000           ; #define uint  unsigned int
 0000           ; 
 0000           ; //数码管字型表,对应0,1,2,3,4,5,6,7,8,9,E//
 0000           ; uchar Table[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x79};
 0000           ; uchar Data1[4]={10,0,5,0};      //定义初始方波占空比:50%
 0000           ; uchar Data2[4]={3,9,1,0};            //设定PWM频率:8M/2046=3910Hz 
 0000           ; uchar Key1_Flag,Key2_Flag;
 0000           ;  
 0000           ; /////////////////////////////延时///////////////////////////////////////////
 0000           ; void delay_us( int t)                    //us
 0000           ;     {
 0000           L2:
 0000                   .dbline 18
 0000           ;       do
 0000           ;     t--;
 0000 0150              subi R16,1
 0002 1040              sbci R17,0
 0004           L3:
 0004                   .dbline 19
 0004           ;     while(t>1);
 0004 81E0              ldi R24,1
 0006 90E0              ldi R25,0
 0008 8017              cp R24,R16
 000A 9107              cpc R25,R17
 000C CCF3              brlt L2
 000E                   .dbline -2
 000E                   .dbline 20
 000E           ;     }
 000E           L1:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbsym r t 16 I
 0010                   .dbend
 0010                   .dbfunc e delay_ms _delay_ms fV
 0010           ;              t -> R20,R21
                        .even
 0010           _delay_ms::
 0010 0E940000          xcall push_gset1
 0014 A801              movw R20,R16
 0016                   .dbline -1
 0016                   .dbline 22
 0016           ; void delay_ms(unsigned int t)               //ms
 0016           ;     {
 0016 05C0              xjmp L7
 0018           L6:
 0018                   .dbline 24
 0018                   .dbline 25
 0018 06E7              ldi R16,1142
 001A 14E0              ldi R17,4
 001C F1DF              xcall _delay_us
 001E                   .dbline 26
 001E 4150              subi R20,1
 0020 5040              sbci R21,0
 0022                   .dbline 27
 0022           L7:
 0022                   .dbline 23
 0022           ;     while(t!=0)
 0022 4030              cpi R20,0
 0024 4507              cpc R20,R21
 0026 C1F7              brne L6
 0028           X0:
 0028                   .dbline -2
 0028                   .dbline 28
 0028           ;      {
 0028           ;       delay_us(1142);
 0028           ;       t--;
 0028           ;      }
 0028           ;     }          
 0028           L5:
 0028 0E940000          xcall pop_gset1
 002C                   .dbline 0 ; func end
 002C 0895              ret
 002E                   .dbsym r t 20 i
 002E                   .dbend
 002E                   .dbfunc e Display _Display fV
 002E           ;            sel -> R20
 002E           ;              i -> R22
 002E           ;              p -> R10,R11
                        .even
 002E           _Display::
 002E 0E940000          xcall push_gset3
 0032 5801              movw R10,R16
 0034                   .dbline -1
 0034                   .dbline 36
 0034           ; /*void DelayMs(uint i)           //Ms级延时,参数i为延时时间
 0034           ; {uint j;
 0034           ;  {for(j=8000;j!=0;j--)  for(;i!=0;i--)
 0034           ;  {;}}
 0034           ; }*/
 0034           ; 
 0034           ; void Display(uchar *p)         //动态显示函数,参数p为待显示的数组名
 0034           ; {uchar i,sel=0x01;           
 0034                   .dbline 36
 0034 41E0              ldi R20,1
 0036                   .dbline 37
 0036           ;  for(i=0;i<4;i++)
 0036 6627              clr R22
 0038 12C0              xjmp L13
 003A           L10:
 003A                   .dbline 38
 003A                   .dbline 38
 003A 4BBB              out 0x1b,R20
 003C                   .dbline 40
 003C E62F              mov R30,R22
 003E FF27              clr R31
 0040 EA0D              add R30,R10
 0042 FB1D              adc R31,R11
 0044 E081              ldd R30,z+0
 0046 FF27              clr R31
 0048 80E0              ldi R24,<_Table
 004A 90E0              ldi R25,>_Table
 004C E80F              add R30,R24
 004E F91F              adc R31,R25
 0050 2080              ldd R2,z+0
 0052 25BA              out 0x15,R2
 0054                   .dbline 41
 0054 08EE              ldi R16,1000
 0056 13E0              ldi R17,3
 0058 D3DF              xcall _delay_us
 005A                   .dbline 42
 005A 440F              lsl R20
 005C                   .dbline 43
 005C           L11:
 005C                   .dbline 37
 005C 6395              inc R22
 005E           L13:
 005E                   .dbline 37
 005E 6430              cpi R22,4
 0060 60F3              brlo L10
 0062                   .dbline -2
 0062                   .dbline 44
 0062           ;   {PORTA=sel;                  //选通最右边的数码管
 0062           ;    //PORTC=~(0xff-Table[p[i]]);     //送字型码
 0062           ;    PORTC=Table[p[i]];     //送字型码
 0062           ;    delay_us(1000);                 //显示延时    
 0062           ;    sel=sel<<1;                 //移位以显示前一位
 0062           ;   }
 0062           ; }
 0062           L9:
 0062 0E940000          xcall pop_gset3
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbsym r sel 20 c
 0068                   .dbsym r i 22 c
 0068                   .dbsym r p 10 pc
 0068                   .dbend
 0068                   .dbfunc e Add_Process _Add_Process fV
 0068           ;              p -> R16,R17
                        .even
 0068           _Add_Process::
 0068                   .dbline -1
 0068                   .dbline 47
 0068           ; 
 0068           ; void Add_Process(uchar *p)
 0068           ; {if(p[1]!=1)
 0068                   .dbline 47
 0068 F801              movw R30,R16
 006A 8181              ldd R24,z+1
 006C 8130              cpi R24,1
 006E 99F0              breq L15
 0070                   .dbline 48
 0070           ;   {p[2]=p[2]+1;
 0070                   .dbline 48
 0070 C801              movw R24,R16
 0072 0296              adiw R24,2
 0074 FC01              movw R30,R24
 0076 8081              ldd R24,z+0
 0078 8F5F              subi R24,255    ; addi 1
 007A 8083              std z+0,R24
 007C                   .dbline 49
 007C           ;    if(p[2]==10) {p[2]=0;p[1]++;}
 007C F801              movw R30,R16
 007E 8281              ldd R24,z+2
 0080 8A30              cpi R24,10
 0082 49F4              brne L17
 0084                   .dbline 49
 0084                   .dbline 49
 0084 2224              clr R2
 0086 F801              movw R30,R16
 0088 2282              std z+2,R2
 008A                   .dbline 49
 008A C801              movw R24,R16
 008C 0196              adiw R24,1
 008E FC01              movw R30,R24
 0090 8081              ldd R24,z+0
 0092 8F5F              subi R24,255    ; addi 1
 0094 8083              std z+0,R24
 0096                   .dbline 49
 0096           L17:
 0096                   .dbline 50
 0096           L15:
 0096                   .dbline -2
 0096                   .dbline 51
 0096           ;   }
 0096           ; }
 0096           L14:
 0096                   .dbline 0 ; func end
 0096 0895              ret
 0098                   .dbsym r p 16 pc
 0098                   .dbend
 0098                   .dbfunc e Sub_Process _Sub_Process fV
 0098           ;           temp -> R22
 0098           ;              p -> R20,R21
                        .even
 0098           _Sub_Process::
 0098 0E940000          xcall push_gset2
 009C A801              movw R20,R16
 009E                   .dbline -1
 009E                   .dbline 54
 009E                   .dbline 55
 009E                   .dbline 56
 009E FA01              movw R30,R20
 00A0 2180              ldd R2,z+1
 00A2 8AE0              ldi R24,10
 00A4 829D              mul R24,R2
 00A6 602D              mov R22,R0
 00A8 FA01              movw R30,R20
 00AA 2280              ldd R2,z+2
 00AC 620D              add R22,R2
 00AE 79F0              breq L20
 00B0                   .dbline 57
 00B0                   .dbline 57
 00B0                   .dbline 58
 00B0 6A95              dec R22
 00B2 1AE0              ldi R17,10
 00B4 062F              mov R16,R22
 00B6 0E940000          xcall div8u
 00BA FA01              movw R30,R20
 00BC 0183              std z+1,R16
 00BE                   .dbline 59
 00BE FA01              movw R30,R20
 00C0 2180              ldd R2,z+1
 00C2 8AE0              ldi R24,10
 00C4 829D              mul R24,R2
 00C6 262E              mov R2,R22
 00C8 2018              sub R2,R0
 00CA FA01              movw R30,R20
 00CC 2282              std z+2,R2

⌨️ 快捷键说明

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