📄 robbot.lis
字号:
0274 ; y -> R10
0274 ; temp1 -> R10,R11
.even
0274 _PIDB::
0274 00D0 rcall push_gset4
0276 2497 sbiw R28,4
0278 .dbline -1
0278 .dbline 125
0278 ;
0278 ; //******************************PID调节:右电机***********************//
0278 ; void PIDB()
0278 ; {char y;
0278 .dbline 129
0278 ; float u; //电压差值
0278 ; int z;
0278 ; int temp1;
0278 ; y = TCNT2;
0278 A4B4 in R10,0x24
027A .dbline 130
027A ; EkB=y-desireV;
027A 20901600 lds R2,_desireV
027E 30901700 lds R3,_desireV+1
0282 0A2D mov R16,R10
0284 1127 clr R17
0286 0219 sub R16,R2
0288 1309 sbc R17,R3
028A 00D0 rcall int2fp
028C 10930100 sts _EkB+1,R17
0290 00930000 sts _EkB,R16
0294 30930300 sts _EkB+2+1,R19
0298 20930200 sts _EkB+2,R18
029C .dbline 131
029C ; if(EkB==(0-desireV)) //当Ek大于某一值时直接加最大//
029C 3A93 st -y,R19
029E 2A93 st -y,R18
02A0 1A93 st -y,R17
02A2 0A93 st -y,R16
02A4 20901600 lds R2,_desireV
02A8 30901700 lds R3,_desireV+1
02AC 0027 clr R16
02AE 1127 clr R17
02B0 0219 sub R16,R2
02B2 1309 sbc R17,R3
02B4 00D0 rcall int2fp
02B6 3A93 st -y,R19
02B8 2A93 st -y,R18
02BA 1A93 st -y,R17
02BC 0A93 st -y,R16
02BE 00D0 rcall cmp32f
02C0 31F4 brne L29
02C2 .dbline 132
02C2 ; {temp1=0x0000;
02C2 .dbline 132
02C2 AA24 clr R10
02C4 BB24 clr R11
02C6 .dbline 133
02C6 ; SetOutputComReg1B(temp1);}
02C6 0A2D mov R16,R10
02C8 1B2D mov R17,R11
02CA ADDE rcall _SetOutputComReg1B
02CC .dbline 133
02CC C5C0 rjmp L30
02CE L29:
02CE .dbline 135
02CE ; else
02CE ; {EkB =Ab*EkB;
02CE .dbline 135
02CE 00E0 ldi R16,<L31
02D0 10E0 ldi R17,>L31
02D2 00D0 rcall lpm32
02D4 3A93 st -y,R19
02D6 2A93 st -y,R18
02D8 1A93 st -y,R17
02DA 0A93 st -y,R16
02DC 40900200 lds R4,_EkB+2
02E0 50900300 lds R5,_EkB+2+1
02E4 20900000 lds R2,_EkB
02E8 30900100 lds R3,_EkB+1
02EC 5A92 st -y,R5
02EE 4A92 st -y,R4
02F0 3A92 st -y,R3
02F2 2A92 st -y,R2
02F4 00D0 rcall mpy32f
02F6 10930100 sts _EkB+1,R17
02FA 00930000 sts _EkB,R16
02FE 30930300 sts _EkB+2+1,R19
0302 20930200 sts _EkB+2,R18
0306 .dbline 136
0306 ; EkB_1=Bb*EkB_1;
0306 00E0 ldi R16,<L32
0308 10E0 ldi R17,>L32
030A 00D0 rcall lpm32
030C 3A93 st -y,R19
030E 2A93 st -y,R18
0310 1A93 st -y,R17
0312 0A93 st -y,R16
0314 40900D00 lds R4,_EkB_1+2
0318 50900E00 lds R5,_EkB_1+2+1
031C 20900B00 lds R2,_EkB_1
0320 30900C00 lds R3,_EkB_1+1
0324 5A92 st -y,R5
0326 4A92 st -y,R4
0328 3A92 st -y,R3
032A 2A92 st -y,R2
032C 00D0 rcall mpy32f
032E 10930C00 sts _EkB_1+1,R17
0332 00930B00 sts _EkB_1,R16
0336 30930E00 sts _EkB_1+2+1,R19
033A 20930D00 sts _EkB_1+2,R18
033E .dbline 137
033E ; EkB_2=Cb*EkB_2;
033E 00E0 ldi R16,<L25
0340 10E0 ldi R17,>L25
0342 00D0 rcall lpm32
0344 3A93 st -y,R19
0346 2A93 st -y,R18
0348 1A93 st -y,R17
034A 0A93 st -y,R16
034C 40901100 lds R4,_EkB_2+2
0350 50901200 lds R5,_EkB_2+2+1
0354 20900F00 lds R2,_EkB_2
0358 30901000 lds R3,_EkB_2+1
035C 5A92 st -y,R5
035E 4A92 st -y,R4
0360 3A92 st -y,R3
0362 2A92 st -y,R2
0364 00D0 rcall mpy32f
0366 10931000 sts _EkB_2+1,R17
036A 00930F00 sts _EkB_2,R16
036E 30931200 sts _EkB_2+2+1,R19
0372 20931100 sts _EkB_2+2,R18
0376 .dbline 138
0376 ; u=EkB+EkB_1+EkB_2;
0376 40900200 lds R4,_EkB+2
037A 50900300 lds R5,_EkB+2+1
037E 20900000 lds R2,_EkB
0382 30900100 lds R3,_EkB+1
0386 5A92 st -y,R5
0388 4A92 st -y,R4
038A 3A92 st -y,R3
038C 2A92 st -y,R2
038E 40900D00 lds R4,_EkB_1+2
0392 50900E00 lds R5,_EkB_1+2+1
0396 20900B00 lds R2,_EkB_1
039A 30900C00 lds R3,_EkB_1+1
039E 5A92 st -y,R5
03A0 4A92 st -y,R4
03A2 3A92 st -y,R3
03A4 2A92 st -y,R2
03A6 00D0 rcall add32fs
03A8 40901100 lds R4,_EkB_2+2
03AC 50901200 lds R5,_EkB_2+2+1
03B0 20900F00 lds R2,_EkB_2
03B4 30901000 lds R3,_EkB_2+1
03B8 5A92 st -y,R5
03BA 4A92 st -y,R4
03BC 3A92 st -y,R3
03BE 2A92 st -y,R2
03C0 00D0 rcall add32f
03C2 EC2F mov R30,R28
03C4 FD2F mov R31,R29
03C6 0083 std z+0,R16
03C8 1183 std z+1,R17
03CA 2283 std z+2,R18
03CC 3383 std z+3,R19
03CE .dbline 139
03CE ; z=u/U1*0x03FF;
03CE 00E0 ldi R16,<L26
03D0 10E0 ldi R17,>L26
03D2 00D0 rcall lpm32
03D4 3A93 st -y,R19
03D6 2A93 st -y,R18
03D8 1A93 st -y,R17
03DA 0A93 st -y,R16
03DC EC2F mov R30,R28
03DE FD2F mov R31,R29
03E0 ; stack offset 4
03E0 2480 ldd R2,z+4
03E2 3580 ldd R3,z+5
03E4 4680 ldd R4,z+6
03E6 5780 ldd R5,z+7
03E8 5A92 st -y,R5
03EA 4A92 st -y,R4
03EC 3A92 st -y,R3
03EE 2A92 st -y,R2
03F0 00E0 ldi R16,<L27
03F2 10E0 ldi R17,>L27
03F4 00D0 rcall lpm32
03F6 3A93 st -y,R19
03F8 2A93 st -y,R18
03FA 1A93 st -y,R17
03FC 0A93 st -y,R16
03FE 00D0 rcall div32fs
0400 00D0 rcall mpy32f
0402 00D0 rcall fp2int
0404 C02E mov R12,R16
0406 D12E mov R13,R17
0408 .dbline 140
0408 ; temp1=GetOutputComReg1B();
0408 19DE rcall _GetOutputComReg1B
040A A02E mov R10,R16
040C B12E mov R11,R17
040E .dbline 141
040E ; temp1=temp1+z;
040E AC0C add R10,R12
0410 BD1C adc R11,R13
0412 .dbline 142
0412 ; SetOutputComReg1B(temp1);
0412 0A2D mov R16,R10
0414 1B2D mov R17,R11
0416 07DE rcall _SetOutputComReg1B
0418 .dbline 143
0418 ; EkB_2=EkB_1;
0418 40900D00 lds R4,_EkB_1+2
041C 50900E00 lds R5,_EkB_1+2+1
0420 20900B00 lds R2,_EkB_1
0424 30900C00 lds R3,_EkB_1+1
0428 30921000 sts _EkB_2+1,R3
042C 20920F00 sts _EkB_2,R2
0430 50921200 sts _EkB_2+2+1,R5
0434 40921100 sts _EkB_2+2,R4
0438 .dbline 144
0438 ; EkB_1=EkB;}
0438 40900200 lds R4,_EkB+2
043C 50900300 lds R5,_EkB+2+1
0440 20900000 lds R2,_EkB
0444 30900100 lds R3,_EkB+1
0448 30920C00 sts _EkB_1+1,R3
044C 20920B00 sts _EkB_1,R2
0450 50920E00 sts _EkB_1+2+1,R5
0454 40920D00 sts _EkB_1+2,R4
0458 .dbline 144
0458 L30:
0458 .dbline 145
0458 ; TCNT2=0x00;
0458 2224 clr R2
045A 24BC out 0x24,R2
045C .dbline -2
045C .dbline 146
045C ; }
045C L28:
045C 2496 adiw R28,4
045E 00D0 rcall pop_gset4
0460 .dbline 0 ; func end
0460 0895 ret
0462 .dbsym r z 12 I
0462 .dbsym l u 0 D
0462 .dbsym r y 10 c
0462 .dbsym r temp1 10 I
0462 .dbend
0462 .dbfunc e Talone _Talone fc
.even
0462 _Talone::
0462 .dbline -1
0462 .dbline 150
0462 ;
0462 ; //***************************寻线处理函数1***************************//
0462 ; char Talone()
0462 ; {if ((forlight&0x09)==0) //3单独亮
0462 .dbline 150
0462 80910800 lds R24,_forlight
0466 8970 andi R24,9
0468 11F4 brne L34
046A .dbline 151
046A ; return(0);
046A 0027 clr R16
046C 01C0 rjmp L33
046E L34:
046E .dbline 153
046E ; else
046E ; return(1); //返回为校偏状态值
046E 01E0 ldi R16,1
0470 .dbline -2
0470 L33:
0470 .dbline 0 ; func end
0470 0895 ret
0472 .dbend
0472 .dbfunc e FUalone _FUalone fc
.even
0472 _FUalone::
0472 .dbline -1
0472 .dbline 158
0472 ; }
0472 ;
0472 ; //***************************寻线处理函数2***************************//
0472 ; char FUalone() //4单独亮
0472 ; {if ((forlight&0x05)==0)
0472 .dbline 158
0472 80910800 lds R24,_forlight
0476 8570 andi R24,5
0478 11F4 brne L37
047A .dbline 159
047A ; return(0);
047A 0027 clr R16
047C 01C0 rjmp L36
047E L37:
047E .dbline 161
047E ; else
047E ; return(2);
047E 02E0 ldi R16,2
0480 .dbline -2
0480 L36:
0480 .dbline 0 ; func end
0480 0895 ret
0482 .dbend
0482 .dbfunc e FIalone _FIalone fc
.even
0482 _FIalone::
0482 .dbline -1
0482 .dbline 166
0482 ; }
0482 ;
0482 ; //***************************寻线处理函数3***************************//
0482 ; char FIalone() //5单独亮
0482 ; {if ((forlight&0x22)==0)
0482 .dbline 166
0482 80910800 lds R24,_forlight
0486 8272 andi R24,34
0488 11F4 brne L40
048A .dbline 167
048A ; return(0);
048A 0027 clr R16
048C 01C0 rjmp L39
048E L40:
048E .dbline 169
048E ; else
048E ; return(1);
048E 01E0 ldi R16,1
0490 .dbline -2
0490 L39:
0490 .dbline 0 ; func end
0490 0895 ret
0492 .dbend
0492 .dbfunc e Salone _Salone fc
.even
0492 _Salone::
0492 .dbline -1
0492 .dbline 174
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -