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

📄 pwm.lis

📁 采用AVR16单片机写的pwm输出程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 00CE                   .dbline 60
 00CE           L20:
 00CE                   .dbline -2
 00CE                   .dbline 61
 00CE           ; 
 00CE           ; void Sub_Process(uchar *p)
 00CE           ; {uchar temp;
 00CE           ;  temp=p[1]*10+p[2];
 00CE           ;  if(temp!=0)
 00CE           ;   {temp=temp-1;
 00CE           ;    p[1]=temp/10;
 00CE           ;    p[2]=temp-p[1]*10;
 00CE           ;   }
 00CE           ; }
 00CE           L19:
 00CE 0E940000          xcall pop_gset2
 00D2                   .dbline 0 ; func end
 00D2 0895              ret
 00D4                   .dbsym r temp 22 c
 00D4                   .dbsym r p 20 pc
 00D4                   .dbend
 00D4                   .dbfunc e Key_Process _Key_Process fV
                        .even
 00D4           _Key_Process::
 00D4                   .dbline -1
 00D4                   .dbline 64
 00D4 06C0              xjmp L24
 00D6           L23:
 00D6                   .dbline 64
 00D6                   .dbline 64
 00D6 00E0              ldi R16,<_Data1
 00D8 10E0              ldi R17,>_Data1
 00DA A9DF              xcall _Display
 00DC                   .dbline 64
 00DC 81E0              ldi R24,1
 00DE 80930100          sts _Key1_Flag,R24
 00E2                   .dbline 64
 00E2           L24:
 00E2                   .dbline 64
 00E2           ;  
 00E2           ; void Key_Process()
 00E2           ; {while((PINB&0x01)==0) {Display(Data1);Key1_Flag=1;}  
 00E2 B09B              sbis 0x16,0
 00E4 F8CF              rjmp L23
 00E6 06C0              xjmp L27
 00E8           L26:
 00E8                   .dbline 65
 00E8                   .dbline 65
 00E8 00E0              ldi R16,<_Data1
 00EA 10E0              ldi R17,>_Data1
 00EC A0DF              xcall _Display
 00EE                   .dbline 65
 00EE 81E0              ldi R24,1
 00F0 80930000          sts _Key2_Flag,R24
 00F4                   .dbline 65
 00F4           L27:
 00F4                   .dbline 65
 00F4           ;  while((PINB&0x02)==0) {Display(Data1);Key2_Flag=1;}
 00F4 B19B              sbis 0x16,1
 00F6 F8CF              rjmp L26
 00F8                   .dbline 66
 00F8           ;  if(Key1_Flag==1)
 00F8 80910100          lds R24,_Key1_Flag
 00FC 8130              cpi R24,1
 00FE 31F4              brne L29
 0100                   .dbline 67
 0100           ;      {Add_Process(Data1);           
 0100                   .dbline 67
 0100 00E0              ldi R16,<_Data1
 0102 10E0              ldi R17,>_Data1
 0104 B1DF              xcall _Add_Process
 0106                   .dbline 68
 0106           ;         Key1_Flag=0;}
 0106 2224              clr R2
 0108 20920100          sts _Key1_Flag,R2
 010C                   .dbline 68
 010C           L29:
 010C                   .dbline 69
 010C 80910000          lds R24,_Key2_Flag
 0110 8130              cpi R24,1
 0112 31F4              brne L31
 0114                   .dbline 70
 0114                   .dbline 70
 0114 00E0              ldi R16,<_Data1
 0116 10E0              ldi R17,>_Data1
 0118 BFDF              xcall _Sub_Process
 011A                   .dbline 71
 011A 2224              clr R2
 011C 20920000          sts _Key2_Flag,R2
 0120                   .dbline 71
 0120           L31:
 0120                   .dbline -2
 0120                   .dbline 72
 0120           ;  if(Key2_Flag==1)
 0120           ;      {Sub_Process(Data1);
 0120           ;         Key2_Flag=0;} 
 0120           ; }
 0120           L22:
 0120                   .dbline 0 ; func end
 0120 0895              ret
 0122                   .dbend
 0122                   .dbfunc e Set_Process _Set_Process fV
 0122           ;              i -> R20,R21
 0122           ;              p -> R20,R21
                        .even
 0122           _Set_Process::
 0122 0E940000          xcall push_gset1
 0126 A801              movw R20,R16
 0128                   .dbline -1
 0128                   .dbline 75
 0128           ; //??????????????????????????//            
 0128           ; void Set_Process(uchar *p)
 0128           ; {uint i;
 0128                   .dbline 76
 0128           ;  i=p[1]*10+p[2];
 0128                   .dbline 77
 0128           ;  i=1023*i/10;
 0128                   .dbline 78
 0128           ;  OCR1AH=i>>8;
 0128 FA01              movw R30,R20
 012A 2180              ldd R2,z+1
 012C 8AE0              ldi R24,10
 012E 829D              mul R24,R2
 0130 1001              movw R2,R0
 0132 FA01              movw R30,R20
 0134 4280              ldd R4,z+2
 0136 5524              clr R5
 0138 240C              add R2,R4
 013A 351C              adc R3,R5
 013C 0FEF              ldi R16,1023
 013E 13E0              ldi R17,3
 0140 9101              movw R18,R2
 0142 0E940000          xcall empy16s
 0146 2AE0              ldi R18,10
 0148 30E0              ldi R19,0
 014A 0E940000          xcall div16u
 014E A801              movw R20,R16
 0150 1A01              movw R2,R20
 0152 232C              mov R2,R3
 0154 3324              clr R3
 0156 2BBC              out 0x2b,R2
 0158                   .dbline 79
 0158           ;  OCR1AL=i&0x00ff;
 0158 CA01              movw R24,R20
 015A 9070              andi R25,0
 015C 8ABD              out 0x2a,R24
 015E                   .dbline -2
 015E                   .dbline 80
 015E           ; }
 015E           L33:
 015E 0E940000          xcall pop_gset1
 0162                   .dbline 0 ; func end
 0162 0895              ret
 0164                   .dbsym r i 20 i
 0164                   .dbsym r p 20 pc
 0164                   .dbend
 0164                   .dbfunc e Init_IO _Init_IO fV
                        .even
 0164           _Init_IO::
 0164                   .dbline -1
 0164                   .dbline 83
 0164           ; 
 0164           ; void Init_IO(void)             //初始化I/O口
 0164           ; {DDRA=0xff;                    //设置A口为推挽1输出
 0164                   .dbline 83
 0164 8FEF              ldi R24,255
 0166 8ABB              out 0x1a,R24
 0168                   .dbline 84
 0168           ;  PORTA=0xff;
 0168 8BBB              out 0x1b,R24
 016A                   .dbline 85
 016A           ;  DDRC=0xff;                    //设置C口为推挽1输出             
 016A 84BB              out 0x14,R24
 016C                   .dbline 86
 016C           ;  PORTC=0xff;
 016C 85BB              out 0x15,R24
 016E                   .dbline 87
 016E           ;  DDRB=0x00;                    //设置B口为三态输入
 016E 2224              clr R2
 0170 27BA              out 0x17,R2
 0172                   .dbline 88
 0172           ;  PORTB=0x00;
 0172 28BA              out 0x18,R2
 0174                   .dbline 89
 0174           ;  DDRD=0xff;                    //设置D口为推挽1输出
 0174 81BB              out 0x11,R24
 0176                   .dbline 90
 0176           ;  PORTD=0xff;    
 0176 82BB              out 0x12,R24
 0178                   .dbline -2
 0178                   .dbline 91
 0178           ; }
 0178           L34:
 0178                   .dbline 0 ; func end
 0178 0895              ret
 017A                   .dbend
 017A                   .dbfunc e main _main fV
 017A           ;              i -> R20
                        .even
 017A           _main::
 017A                   .dbline -1
 017A                   .dbline 94
 017A           ; 
 017A           ; void main(void)
 017A           ; {uchar i;
 017A                   .dbline 95
 017A           ;  Init_IO();                    //初始化I/O口
 017A F4DF              xcall _Init_IO
 017C                   .dbline 96
 017C           ;  PORTA=0xff;                   //点亮以测试所有的数码管
 017C 8FEF              ldi R24,255
 017E 8BBB              out 0x1b,R24
 0180                   .dbline 97
 0180           ;  PORTC=0xff;   
 0180 85BB              out 0x15,R24
 0182                   .dbline 99
 0182           ;  //delay_ms(100);                 //延时
 0182           ;  PORTC=0x00;                   //熄灭所有的数码管
 0182 2224              clr R2
 0184 25BA              out 0x15,R2
 0186                   .dbline 100
 0186           ;  TCCR1A=0xc3;                  //10位PWM,向上计数清除OC1A,向下计数置位OC1A
 0186 83EC              ldi R24,195
 0188 8FBD              out 0x2f,R24
 018A                   .dbline 101
 018A           ;  TCCR1B=0x02;                  //时钟8分频,最小频率1M/2046=0.5KHz    
 018A 82E0              ldi R24,2
 018C 8EBD              out 0x2e,R24
 018E 16C0              xjmp L37
 0190           L36:
 0190                   .dbline 103
 0190           ;  while(1)
 0190           ;  {Key_Process();
 0190                   .dbline 103
 0190 A1DF              xcall _Key_Process
 0192                   .dbline 104
 0192           ;   Set_Process(Data1);         //设置PWM占空比
 0192 00E0              ldi R16,<_Data1
 0194 10E0              ldi R17,>_Data1
 0196 C5DF              xcall _Set_Process
 0198                   .dbline 105
 0198           ;   for(i=500;i!=0;i--)
 0198 44EF              ldi R20,244
 019A 05C0              xjmp L42
 019C           L39:
 019C                   .dbline 106
 019C                   .dbline 106
 019C 9BDF              xcall _Key_Process
 019E                   .dbline 107
 019E 00E0              ldi R16,<_Data1
 01A0 10E0              ldi R17,>_Data1
 01A2 45DF              xcall _Display
 01A4                   .dbline 107
 01A4           L40:
 01A4                   .dbline 105
 01A4 4A95              dec R20
 01A6           L42:
 01A6                   .dbline 105
 01A6 4423              tst R20
 01A8 C9F7              brne L39
 01AA                   .dbline 108
 01AA           ;   {  Key_Process();
 01AA           ;     Display(Data1);}
 01AA           ;   for(i=500;i!=0;i--)
 01AA 44EF              ldi R20,244
 01AC 05C0              xjmp L46
 01AE           L43:
 01AE                   .dbline 109
 01AE                   .dbline 109
 01AE 92DF              xcall _Key_Process
 01B0                   .dbline 110
 01B0 00E0              ldi R16,<_Data2
 01B2 10E0              ldi R17,>_Data2
 01B4 3CDF              xcall _Display
 01B6                   .dbline 110
 01B6           L44:
 01B6                   .dbline 108
 01B6 4A95              dec R20
 01B8           L46:
 01B8                   .dbline 108
 01B8 4423              tst R20
 01BA C9F7              brne L43
 01BC                   .dbline 111
 01BC           L37:
 01BC                   .dbline 102
 01BC E9CF              xjmp L36
 01BE           X1:
 01BE                   .dbline -2
 01BE                   .dbline 112
 01BE           ;    { Key_Process();
 01BE           ;     Display(Data2);}
 01BE           ;  }
 01BE           ; }
 01BE           L35:
 01BE                   .dbline 0 ; func end
 01BE 0895              ret
 01C0                   .dbsym r i 20 c
 01C0                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile F:\练习\pwm脉宽调制器\pwm.c
 0000           _Key2_Flag::
 0000                   .blkb 1
 0001                   .dbsym e Key2_Flag _Key2_Flag c
 0001           _Key1_Flag::
 0001                   .blkb 1
 0002                   .dbsym e Key1_Flag _Key1_Flag c

⌨️ 快捷键说明

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