📄 pwm.lis
字号:
00E0 .dbline -2
00E0 .dbline 45
00E0 ;
00E0 ; void Sub_Process(uchar *p)
00E0 ; {uchar temp;
00E0 ; temp=p[1]*10+p[2];
00E0 ; if(temp!=0)
00E0 ; {temp=temp-1;
00E0 ; p[1]=temp/10;
00E0 ; p[2]=temp-p[1]*10;
00E0 ; }
00E0 ; }
00E0 L20:
00E0 00D0 rcall pop_gset2
00E2 .dbline 0 ; func end
00E2 0895 ret
00E4 .dbsym r temp 22 c
00E4 .dbsym r p 20 pc
00E4 .dbend
00E4 .dbfunc e Key_Process _Key_Process fV
.even
00E4 _Key_Process::
00E4 .dbline -1
00E4 .dbline 48
00E4 06C0 rjmp L25
00E6 L24:
00E6 .dbline 48
00E6 .dbline 48
00E6 00E0 ldi R16,<_Data1
00E8 10E0 ldi R17,>_Data1
00EA 9BDF rcall _Display
00EC .dbline 48
00EC 81E0 ldi R24,1
00EE 80930100 sts _Key1_Flag,R24
00F2 .dbline 48
00F2 L25:
00F2 .dbline 48
00F2 ;
00F2 ; void Key_Process()
00F2 ; {while((PINB&0x01)==0) {Display(Data1);Key1_Flag=1;}
00F2 B09B sbis 0x16,0
00F4 F8CF rjmp L24
00F6 06C0 rjmp L28
00F8 L27:
00F8 .dbline 49
00F8 .dbline 49
00F8 00E0 ldi R16,<_Data1
00FA 10E0 ldi R17,>_Data1
00FC 92DF rcall _Display
00FE .dbline 49
00FE 81E0 ldi R24,1
0100 80930000 sts _Key2_Flag,R24
0104 .dbline 49
0104 L28:
0104 .dbline 49
0104 ; while((PINB&0x02)==0) {Display(Data1);Key2_Flag=1;}
0104 B19B sbis 0x16,1
0106 F8CF rjmp L27
0108 .dbline 50
0108 ; if(Key1_Flag==1)
0108 80910100 lds R24,_Key1_Flag
010C 8130 cpi R24,1
010E 31F4 brne L30
0110 .dbline 51
0110 ; {Add_Process(Data1);
0110 .dbline 51
0110 00E0 ldi R16,<_Data1
0112 10E0 ldi R17,>_Data1
0114 A7DF rcall _Add_Process
0116 .dbline 52
0116 ; Key1_Flag=0;}
0116 2224 clr R2
0118 20920100 sts _Key1_Flag,R2
011C .dbline 52
011C L30:
011C .dbline 53
011C 80910000 lds R24,_Key2_Flag
0120 8130 cpi R24,1
0122 31F4 brne L32
0124 .dbline 54
0124 .dbline 54
0124 00E0 ldi R16,<_Data1
0126 10E0 ldi R17,>_Data1
0128 BCDF rcall _Sub_Process
012A .dbline 55
012A 2224 clr R2
012C 20920000 sts _Key2_Flag,R2
0130 .dbline 55
0130 L32:
0130 .dbline -2
0130 .dbline 56
0130 ; if(Key2_Flag==1)
0130 ; {Sub_Process(Data1);
0130 ; Key2_Flag=0;}
0130 ; }
0130 L23:
0130 .dbline 0 ; func end
0130 0895 ret
0132 .dbend
0132 .dbfunc e Set_Process _Set_Process fV
0132 ; i -> R20,R21
0132 ; p -> R20,R21
.even
0132 _Set_Process::
0132 00D0 rcall push_gset1
0134 402F mov R20,R16
0136 512F mov R21,R17
0138 .dbline -1
0138 .dbline 59
0138 ;
0138 ; void Set_Process(uchar *p)
0138 ; {uint i;
0138 .dbline 60
0138 ; i=p[1]*10+p[2];
0138 E42F mov R30,R20
013A F52F mov R31,R21
013C 2181 ldd R18,z+1
013E 3327 clr R19
0140 0AE0 ldi R16,10
0142 10E0 ldi R17,0
0144 00D0 rcall mpy16s
0146 202E mov R2,R16
0148 312E mov R3,R17
014A E42F mov R30,R20
014C F52F mov R31,R21
014E 4280 ldd R4,z+2
0150 5524 clr R5
0152 240C add R2,R4
0154 351C adc R3,R5
0156 .dbline 61
0156 ; i=1023*i/10;
0156 0FEF ldi R16,1023
0158 13E0 ldi R17,3
015A 222D mov R18,R2
015C 332D mov R19,R3
015E 00D0 rcall mpy16s
0160 2AE0 ldi R18,10
0162 30E0 ldi R19,0
0164 00D0 rcall div16u
0166 402F mov R20,R16
0168 512F mov R21,R17
016A .dbline 62
016A ; OCR1AH=i>>8;
016A 242E mov R2,R20
016C 352E mov R3,R21
016E 232C mov R2,R3
0170 3324 clr R3
0172 2BBC out 0x2b,R2
0174 .dbline 63
0174 ; OCR1AL=i&0x00ff;
0174 842F mov R24,R20
0176 952F mov R25,R21
0178 9070 andi R25,0
017A 8ABD out 0x2a,R24
017C .dbline -2
017C .dbline 64
017C ; }
017C L34:
017C 00D0 rcall pop_gset1
017E .dbline 0 ; func end
017E 0895 ret
0180 .dbsym r i 20 i
0180 .dbsym r p 20 pc
0180 .dbend
0180 .dbfunc e Init_IO _Init_IO fV
.even
0180 _Init_IO::
0180 .dbline -1
0180 .dbline 67
0180 ;
0180 ; void Init_IO(void) //初始化I/O口
0180 ; {DDRA=0xff; //设置A口为推挽1输出
0180 .dbline 67
0180 8FEF ldi R24,255
0182 8ABB out 0x1a,R24
0184 .dbline 68
0184 ; PORTA=0xff;
0184 8BBB out 0x1b,R24
0186 .dbline 69
0186 ; DDRC=0xff; //设置C口为推挽1输出
0186 84BB out 0x14,R24
0188 .dbline 70
0188 ; PORTC=0xff;
0188 85BB out 0x15,R24
018A .dbline 71
018A ; DDRB=0x00; //设置B口为三态输入
018A 2224 clr R2
018C 27BA out 0x17,R2
018E .dbline 72
018E ; PORTB=0x00;
018E 28BA out 0x18,R2
0190 .dbline 73
0190 ; DDRD=0xff; //设置D口为推挽1输出
0190 81BB out 0x11,R24
0192 .dbline 74
0192 ; PORTD=0xff;
0192 82BB out 0x12,R24
0194 .dbline -2
0194 .dbline 75
0194 ; }
0194 L35:
0194 .dbline 0 ; func end
0194 0895 ret
0196 .dbend
0196 .dbfunc e main _main fV
0196 ; i -> R20
.even
0196 _main::
0196 .dbline -1
0196 .dbline 78
0196 ;
0196 ; void main(void)
0196 ; {uchar i;
0196 .dbline 79
0196 ; Init_IO(); //初始化I/O口
0196 F4DF rcall _Init_IO
0198 .dbline 80
0198 ; PORTA=0xff; //点亮以测试所有的数码管
0198 8FEF ldi R24,255
019A 8BBB out 0x1b,R24
019C .dbline 81
019C ; PORTC=0x00;
019C 2224 clr R2
019E 25BA out 0x15,R2
01A0 .dbline 83
01A0 ; //DelayMs(300); //延时
01A0 ; PORTC=0xff; //熄灭所有的数码管
01A0 85BB out 0x15,R24
01A2 .dbline 84
01A2 ; TCCR1A=0xc3; //10位PWM,向上计数清除OC1A,向下计数置位OC1A
01A2 83EC ldi R24,195
01A4 8FBD out 0x2f,R24
01A6 .dbline 85
01A6 ; TCCR1B=0x02; //时钟8分频,最小频率1M/2046=0.5KHz
01A6 82E0 ldi R24,2
01A8 8EBD out 0x2e,R24
01AA 14C0 rjmp L38
01AC L37:
01AC .dbline 87
01AC ; while(1)
01AC ; {Key_Process();
01AC .dbline 87
01AC 9BDF rcall _Key_Process
01AE .dbline 88
01AE ; Set_Process(Data1); //设置PWM占空比
01AE 00E0 ldi R16,<_Data1
01B0 10E0 ldi R17,>_Data1
01B2 BFDF rcall _Set_Process
01B4 .dbline 89
01B4 ; for(i=50;i!=0;i--)
01B4 42E3 ldi R20,50
01B6 04C0 rjmp L43
01B8 L40:
01B8 .dbline 90
01B8 00E0 ldi R16,<_Data1
01BA 10E0 ldi R17,>_Data1
01BC 32DF rcall _Display
01BE L41:
01BE .dbline 89
01BE 4A95 dec R20
01C0 L43:
01C0 .dbline 89
01C0 4423 tst R20
01C2 D1F7 brne L40
01C4 .dbline 91
01C4 ; Display(Data1);
01C4 ; for(i=50;i!=0;i--)
01C4 42E3 ldi R20,50
01C6 04C0 rjmp L47
01C8 L44:
01C8 .dbline 92
01C8 00E0 ldi R16,<_Data2
01CA 10E0 ldi R17,>_Data2
01CC 2ADF rcall _Display
01CE L45:
01CE .dbline 91
01CE 4A95 dec R20
01D0 L47:
01D0 .dbline 91
01D0 4423 tst R20
01D2 D1F7 brne L44
01D4 .dbline 93
01D4 L38:
01D4 .dbline 86
01D4 EBCF rjmp L37
01D6 X2:
01D6 .dbline -2
01D6 .dbline 94
01D6 ; Display(Data2);
01D6 ; }
01D6 ; }
01D6 L36:
01D6 .dbline 0 ; func end
01D6 0895 ret
01D8 .dbsym r i 20 c
01D8 .dbend
.area bss(ram, con, rel)
0000 .dbfile I:\AVRpractice\BOOK\定时器1\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 + -