📄 pwm.lis
字号:
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 + -