📄 robbot.lis
字号:
0048 0CC0 rjmp L10
004A L7:
004A .dbline 89
004A .dbline 89
004A 6627 clr R22
004C 7727 clr R23
004E 02C0 rjmp L14
0050 L11:
0050 .dbline 89
0050 L12:
0050 .dbline 89
0050 6F5F subi R22,255 ; offset = 1
0052 7F4F sbci R23,255
0054 L14:
0054 .dbline 89
0054 8EEF ldi R24,65534
0056 9FEF ldi R25,255
0058 8617 cp R24,R22
005A 9707 cpc R25,R23
005C C8F7 brsh L11
005E .dbline 89
005E L8:
005E .dbline 88
005E 4F5F subi R20,255 ; offset = 1
0060 5F4F sbci R21,255
0062 L10:
0062 .dbline 88
0062 0417 cp R16,R20
0064 1507 cpc R17,R21
0066 8CF7 brge L7
0068 .dbline -2
0068 .dbline 90
0068 ; {for (j=0;j<=0xFFFE;j++) ;}
0068 ; }
0068 L6:
0068 00D0 rcall pop_gset2
006A .dbline 0 ; func end
006A 0895 ret
006C .dbsym r i 20 I
006C .dbsym r j 22 I
006C .dbsym r delaytime 16 I
006C .dbend
006C .dbfunc e delay _delay fV
006C ; j -> R20,R21
006C ; i -> R16,R17
.even
006C _delay::
006C 00D0 rcall push_gset1
006E .dbline -1
006E .dbline 94
006E ;
006E ; //******************************短延时函数***************************//
006E ; void delay(int i)
006E ; {int j;
006E .dbline 95
006E 4427 clr R20
0070 5527 clr R21
0072 02C0 rjmp L19
0074 L16:
0074 .dbline 95
0074 L17:
0074 .dbline 95
0074 4F5F subi R20,255 ; offset = 1
0076 5F4F sbci R21,255
0078 L19:
0078 .dbline 95
0078 ; for(j=0;j<=i;j++) ;
0078 0417 cp R16,R20
007A 1507 cpc R17,R21
007C DCF7 brge L16
007E .dbline -2
007E .dbline 96
007E ; }
007E L15:
007E 00D0 rcall pop_gset1
0080 .dbline 0 ; func end
0080 0895 ret
0082 .dbsym r j 20 I
0082 .dbsym r i 16 I
0082 .dbend
0082 .dbfunc e PIDA _PIDA fV
0082 ; z -> R12,R13
0082 ; u -> y+0
0082 ; y -> R10
0082 ; temp1 -> R10,R11
.even
0082 _PIDA::
0082 00D0 rcall push_gset4
0084 2497 sbiw R28,4
0086 .dbline -1
0086 .dbline 100
0086 ;
0086 ; //******************************PID调节:左电机***********************//
0086 ; void PIDA()
0086 ; {char y; //本次采样速度值
0086 .dbline 104
0086 ; float u; //电压差值
0086 ; int z; //本次输出增量
0086 ; int temp1; //临时记录值
0086 ; y = TCNT1;
0086 ACB4 in R10,0x2c
0088 .dbline 105
0088 ; EkA=y-desireV;
0088 20901600 lds R2,_desireV
008C 30901700 lds R3,_desireV+1
0090 0A2D mov R16,R10
0092 1127 clr R17
0094 0219 sub R16,R2
0096 1309 sbc R17,R3
0098 00D0 rcall int2fp
009A 10930500 sts _EkA+1,R17
009E 00930400 sts _EkA,R16
00A2 30930700 sts _EkA+2+1,R19
00A6 20930600 sts _EkA+2,R18
00AA .dbline 106
00AA ; if (EkA==(0-desireV)) //当Ek大于某一值时直接加最大
00AA 3A93 st -y,R19
00AC 2A93 st -y,R18
00AE 1A93 st -y,R17
00B0 0A93 st -y,R16
00B2 20901600 lds R2,_desireV
00B6 30901700 lds R3,_desireV+1
00BA 0027 clr R16
00BC 1127 clr R17
00BE 0219 sub R16,R2
00C0 1309 sbc R17,R3
00C2 00D0 rcall int2fp
00C4 3A93 st -y,R19
00C6 2A93 st -y,R18
00C8 1A93 st -y,R17
00CA 0A93 st -y,R16
00CC 00D0 rcall cmp32f
00CE 31F4 brne L21
00D0 .dbline 107
00D0 ; {temp1=0x0000;
00D0 .dbline 107
00D0 AA24 clr R10
00D2 BB24 clr R11
00D4 .dbline 108
00D4 ; SetOutputComReg1A(temp1);}
00D4 0A2D mov R16,R10
00D6 1B2D mov R17,R11
00D8 9EDF rcall _SetOutputComReg1A
00DA .dbline 108
00DA C5C0 rjmp L22
00DC L21:
00DC .dbline 110
00DC ; else
00DC ; {EkA=Aa*EkA;
00DC .dbline 110
00DC 00E0 ldi R16,<L23
00DE 10E0 ldi R17,>L23
00E0 00D0 rcall lpm32
00E2 3A93 st -y,R19
00E4 2A93 st -y,R18
00E6 1A93 st -y,R17
00E8 0A93 st -y,R16
00EA 40900600 lds R4,_EkA+2
00EE 50900700 lds R5,_EkA+2+1
00F2 20900400 lds R2,_EkA
00F6 30900500 lds R3,_EkA+1
00FA 5A92 st -y,R5
00FC 4A92 st -y,R4
00FE 3A92 st -y,R3
0100 2A92 st -y,R2
0102 00D0 rcall mpy32f
0104 10930500 sts _EkA+1,R17
0108 00930400 sts _EkA,R16
010C 30930700 sts _EkA+2+1,R19
0110 20930600 sts _EkA+2,R18
0114 .dbline 111
0114 ; EkA_1=Ba*EkA_1;
0114 00E0 ldi R16,<L24
0116 10E0 ldi R17,>L24
0118 00D0 rcall lpm32
011A 3A93 st -y,R19
011C 2A93 st -y,R18
011E 1A93 st -y,R17
0120 0A93 st -y,R16
0122 40900500 lds R4,_EkA_1+2
0126 50900600 lds R5,_EkA_1+2+1
012A 20900300 lds R2,_EkA_1
012E 30900400 lds R3,_EkA_1+1
0132 5A92 st -y,R5
0134 4A92 st -y,R4
0136 3A92 st -y,R3
0138 2A92 st -y,R2
013A 00D0 rcall mpy32f
013C 10930400 sts _EkA_1+1,R17
0140 00930300 sts _EkA_1,R16
0144 30930600 sts _EkA_1+2+1,R19
0148 20930500 sts _EkA_1+2,R18
014C .dbline 112
014C ; EkA_2=Ca*EkA_2;
014C 00E0 ldi R16,<L25
014E 10E0 ldi R17,>L25
0150 00D0 rcall lpm32
0152 3A93 st -y,R19
0154 2A93 st -y,R18
0156 1A93 st -y,R17
0158 0A93 st -y,R16
015A 40900900 lds R4,_EkA_2+2
015E 50900A00 lds R5,_EkA_2+2+1
0162 20900700 lds R2,_EkA_2
0166 30900800 lds R3,_EkA_2+1
016A 5A92 st -y,R5
016C 4A92 st -y,R4
016E 3A92 st -y,R3
0170 2A92 st -y,R2
0172 00D0 rcall mpy32f
0174 10930800 sts _EkA_2+1,R17
0178 00930700 sts _EkA_2,R16
017C 30930A00 sts _EkA_2+2+1,R19
0180 20930900 sts _EkA_2+2,R18
0184 .dbline 113
0184 ; u=EkA+EkA_1+EkA_2;
0184 40900600 lds R4,_EkA+2
0188 50900700 lds R5,_EkA+2+1
018C 20900400 lds R2,_EkA
0190 30900500 lds R3,_EkA+1
0194 5A92 st -y,R5
0196 4A92 st -y,R4
0198 3A92 st -y,R3
019A 2A92 st -y,R2
019C 40900500 lds R4,_EkA_1+2
01A0 50900600 lds R5,_EkA_1+2+1
01A4 20900300 lds R2,_EkA_1
01A8 30900400 lds R3,_EkA_1+1
01AC 5A92 st -y,R5
01AE 4A92 st -y,R4
01B0 3A92 st -y,R3
01B2 2A92 st -y,R2
01B4 00D0 rcall add32fs
01B6 40900900 lds R4,_EkA_2+2
01BA 50900A00 lds R5,_EkA_2+2+1
01BE 20900700 lds R2,_EkA_2
01C2 30900800 lds R3,_EkA_2+1
01C6 5A92 st -y,R5
01C8 4A92 st -y,R4
01CA 3A92 st -y,R3
01CC 2A92 st -y,R2
01CE 00D0 rcall add32f
01D0 EC2F mov R30,R28
01D2 FD2F mov R31,R29
01D4 0083 std z+0,R16
01D6 1183 std z+1,R17
01D8 2283 std z+2,R18
01DA 3383 std z+3,R19
01DC .dbline 114
01DC ; z=u/U1*0x03FF;
01DC 00E0 ldi R16,<L26
01DE 10E0 ldi R17,>L26
01E0 00D0 rcall lpm32
01E2 3A93 st -y,R19
01E4 2A93 st -y,R18
01E6 1A93 st -y,R17
01E8 0A93 st -y,R16
01EA EC2F mov R30,R28
01EC FD2F mov R31,R29
01EE ; stack offset 4
01EE 2480 ldd R2,z+4
01F0 3580 ldd R3,z+5
01F2 4680 ldd R4,z+6
01F4 5780 ldd R5,z+7
01F6 5A92 st -y,R5
01F8 4A92 st -y,R4
01FA 3A92 st -y,R3
01FC 2A92 st -y,R2
01FE 00E0 ldi R16,<L27
0200 10E0 ldi R17,>L27
0202 00D0 rcall lpm32
0204 3A93 st -y,R19
0206 2A93 st -y,R18
0208 1A93 st -y,R17
020A 0A93 st -y,R16
020C 00D0 rcall div32fs
020E 00D0 rcall mpy32f
0210 00D0 rcall fp2int
0212 C02E mov R12,R16
0214 D12E mov R13,R17
0216 .dbline 115
0216 ; temp1=GetOutputComReg1A();
0216 0FDF rcall _GetOutputComReg1A
0218 A02E mov R10,R16
021A B12E mov R11,R17
021C .dbline 116
021C ; temp1=temp1+z;
021C AC0C add R10,R12
021E BD1C adc R11,R13
0220 .dbline 117
0220 ; SetOutputComReg1A(temp1);
0220 0A2D mov R16,R10
0222 1B2D mov R17,R11
0224 F8DE rcall _SetOutputComReg1A
0226 .dbline 118
0226 ; EkA_2=EkA_1;
0226 40900500 lds R4,_EkA_1+2
022A 50900600 lds R5,_EkA_1+2+1
022E 20900300 lds R2,_EkA_1
0232 30900400 lds R3,_EkA_1+1
0236 30920800 sts _EkA_2+1,R3
023A 20920700 sts _EkA_2,R2
023E 50920A00 sts _EkA_2+2+1,R5
0242 40920900 sts _EkA_2+2,R4
0246 .dbline 119
0246 ; EkA_1=EkA;}
0246 40900600 lds R4,_EkA+2
024A 50900700 lds R5,_EkA+2+1
024E 20900400 lds R2,_EkA
0252 30900500 lds R3,_EkA+1
0256 30920400 sts _EkA_1+1,R3
025A 20920300 sts _EkA_1,R2
025E 50920600 sts _EkA_1+2+1,R5
0262 40920500 sts _EkA_1+2,R4
0266 .dbline 119
0266 L22:
0266 .dbline 120
0266 ; TCNT1=0x00;
0266 2224 clr R2
0268 3324 clr R3
026A 3DBC out 0x2d,R3
026C 2CBC out 0x2c,R2
026E .dbline -2
026E .dbline 121
026E ; }
026E L20:
026E 2496 adiw R28,4
0270 00D0 rcall pop_gset4
0272 .dbline 0 ; func end
0272 0895 ret
0274 .dbsym r z 12 I
0274 .dbsym l u 0 D
0274 .dbsym r y 10 c
0274 .dbsym r temp1 10 I
0274 .dbend
0274 .dbfunc e PIDB _PIDB fV
0274 ; z -> R12,R13
0274 ; u -> y+0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -