📄 send_485.lis
字号:
02DA F31D adc R31,R3
02DC 2080 ldd R2,z+0
02DE 20920400 sts _moto1+4,R2
02E2 .dbline 140
02E2 ; moto2[4]=p[i];
02E2 20900000 lds R2,_p
02E6 30900100 lds R3,_p+1
02EA E0910000 lds R30,_i
02EE FF27 clr R31
02F0 E20D add R30,R2
02F2 F31D adc R31,R3
02F4 2080 ldd R2,z+0
02F6 20920400 sts _moto2+4,R2
02FA .dbline 141
02FA ; moto3[4]=p[i];
02FA 20900000 lds R2,_p
02FE 30900100 lds R3,_p+1
0302 E0910000 lds R30,_i
0306 FF27 clr R31
0308 E20D add R30,R2
030A F31D adc R31,R3
030C 2080 ldd R2,z+0
030E 20920400 sts _moto3+4,R2
0312 .dbline 142
0312 ; moto4[4]=p[i];
0312 20900000 lds R2,_p
0316 30900100 lds R3,_p+1
031A E0910000 lds R30,_i
031E FF27 clr R31
0320 E20D add R30,R2
0322 F31D adc R31,R3
0324 2080 ldd R2,z+0
0326 20920400 sts _moto4+4,R2
032A .dbline 144
032A ;
032A ; i++; //变量加1,准备执行下一步
032A 80910000 lds R24,_i
032E 8F5F subi R24,255 ; addi 1
0330 80930000 sts _i,R24
0334 .dbline 146
0334 ;
0334 ; moto1[3]=p[i++]*status[1]/0x64; //运动位置转换后存储
0334 282E mov R2,R24
0336 3324 clr R3
0338 2101 movw R4,R2
033A 8F5F subi R24,255 ; addi 1
033C 80930000 sts _i,R24
0340 20900000 lds R2,_p
0344 30900100 lds R3,_p+1
0348 E42D mov R30,R4
034A FF27 clr R31
034C E20D add R30,R2
034E F31D adc R31,R3
0350 0081 ldd R16,z+0
0352 1127 clr R17
0354 20910200 lds R18,_status+2
0358 30910300 lds R19,_status+2+1
035C 00D0 rcall empy16s
035E 24E6 ldi R18,100
0360 30E0 ldi R19,0
0362 00D0 rcall div16u
0364 00930300 sts _moto1+3,R16
0368 .dbline 147
0368 ; moto2[3]=p[i++]*status[1]/0x64;
0368 20900000 lds R2,_i
036C 3324 clr R3
036E 2101 movw R4,R2
0370 822D mov R24,R2
0372 8F5F subi R24,255 ; addi 1
0374 80930000 sts _i,R24
0378 20900000 lds R2,_p
037C 30900100 lds R3,_p+1
0380 E42D mov R30,R4
0382 FF27 clr R31
0384 E20D add R30,R2
0386 F31D adc R31,R3
0388 0081 ldd R16,z+0
038A 1127 clr R17
038C 20910200 lds R18,_status+2
0390 30910300 lds R19,_status+2+1
0394 00D0 rcall empy16s
0396 24E6 ldi R18,100
0398 30E0 ldi R19,0
039A 00D0 rcall div16u
039C 00930300 sts _moto2+3,R16
03A0 .dbline 148
03A0 ; moto3[3]=p[i++]*status[1]/0x64;
03A0 40910000 lds R20,_i
03A4 5527 clr R21
03A6 842F mov R24,R20
03A8 8F5F subi R24,255 ; addi 1
03AA 80930000 sts _i,R24
03AE 20900000 lds R2,_p
03B2 30900100 lds R3,_p+1
03B6 E42F mov R30,R20
03B8 FF27 clr R31
03BA E20D add R30,R2
03BC F31D adc R31,R3
03BE 0081 ldd R16,z+0
03C0 1127 clr R17
03C2 20910200 lds R18,_status+2
03C6 30910300 lds R19,_status+2+1
03CA 00D0 rcall empy16s
03CC 24E6 ldi R18,100
03CE 30E0 ldi R19,0
03D0 00D0 rcall div16u
03D2 00930300 sts _moto3+3,R16
03D6 .dbline 149
03D6 ; moto4[3]=p[i++]*status[1]/0x64;
03D6 40910000 lds R20,_i
03DA 5527 clr R21
03DC 842F mov R24,R20
03DE 8F5F subi R24,255 ; addi 1
03E0 80930000 sts _i,R24
03E4 20900000 lds R2,_p
03E8 30900100 lds R3,_p+1
03EC E42F mov R30,R20
03EE FF27 clr R31
03F0 E20D add R30,R2
03F2 F31D adc R31,R3
03F4 0081 ldd R16,z+0
03F6 1127 clr R17
03F8 20910200 lds R18,_status+2
03FC 30910300 lds R19,_status+2+1
0400 00D0 rcall empy16s
0402 24E6 ldi R18,100
0404 30E0 ldi R19,0
0406 00D0 rcall div16u
0408 00930300 sts _moto4+3,R16
040C .dbline 151
040C ;
040C ; flag=2; //主函数flag标志置数
040C 82E0 ldi R24,2
040E 80930000 sts _flag,R24
0412 .dbline -2
0412 L65:
0412 .dbline 0 ; func end
0412 5991 ld R21,y+
0414 4991 ld R20,y+
0416 0895 ret
0418 .dbend
0418 .dbfunc e RS485_getchar _RS485_getchar fV
.even
0418 _RS485_getchar::
0418 .dbline -1
0418 .dbline 155
0418 ; }
0418 ; /***************************接收数据决断子程序*******************/
0418 ; void RS485_getchar(void)
0418 ; {
0418 .dbline 157
0418 ;
0418 ; data_decide(); //接收数组判断存储子程序
0418 52DE rcall _data_decide
041A 74C0 rjmp L80
041C L79:
041C .dbline 159
041C ;
041C ; while(1){
041C .dbline 160
041C ; if(second==status[2]){ //运动时间到
041C 20900400 lds R2,_status+4
0420 30900500 lds R3,_status+4+1
0424 40900000 lds R4,_second
0428 50900100 lds R5,_second+1
042C 4214 cp R4,R2
042E 5304 cpc R5,R3
0430 11F4 brne L82
0432 X20:
0432 .dbline 160
0432 .dbline 161
0432 ; moto_stop(); //电机停止函数
0432 B5DE rcall _moto_stop
0434 .dbline 162
0434 ; break;
0434 68C0 rjmp L81
0436 L82:
0436 .dbline 164
0436 ; }//end if
0436 ; if((get[2]==0xff)&&(get[8]==0xff)&& //各节点电机都已停止
0436 80910200 lds R24,_get+2
043A 8F3F cpi R24,255
043C 09F0 breq X29
043E 62C0 rjmp L85
0440 X29:
0440 X21:
0440 80910800 lds R24,_get+8
0444 8F3F cpi R24,255
0446 09F0 breq X30
0448 5DC0 rjmp L85
044A X30:
044A X22:
044A 80910E00 lds R24,_get+14
044E 8F3F cpi R24,255
0450 09F0 breq X31
0452 58C0 rjmp L85
0454 X31:
0454 X23:
0454 80911400 lds R24,_get+20
0458 8F3F cpi R24,255
045A 09F0 breq X32
045C 53C0 rjmp L85
045E X32:
045E X24:
045E .dbline 165
045E ; (get[14]==0xff)&&(get[20]==0xff)){
045E .dbline 167
045E ;
045E ; get[2]=0x00; //各节点控制指令清零
045E 2224 clr R2
0460 20920200 sts _get+2,R2
0464 .dbline 168
0464 ; get[8]=0x00;
0464 20920800 sts _get+8,R2
0468 .dbline 169
0468 ; get[14]=0x00;
0468 20920E00 sts _get+14,R2
046C .dbline 170
046C ; get[20]=0x00;
046C 20921400 sts _get+20,R2
0470 .dbline 172
0470 ;
0470 ; if(i<((p[1]-1)*5+1)){ //未到达设定的循环开始步数
0470 E0910000 lds R30,_p
0474 F0910100 lds R31,_p+1
0478 2180 ldd R2,z+1
047A 85E0 ldi R24,5
047C 829D mul R24,R2
047E 802D mov R24,R0
0480 8550 subi R24,5
0482 8F5F subi R24,255 ; addi 1
0484 20900000 lds R2,_i
0488 2816 cp R2,R24
048A 10F4 brsh L95
048C X25:
048C .dbline 172
048C .dbline 173
048C ; step_for(); //相应处理函数
048C A7DE rcall _step_for
048E .dbline 174
048E ; }//end if
048E 25C0 rjmp L96
0490 L95:
0490 .dbline 175
0490 ; else if((i>(p[1]-1)*5+1)&&(j==1)){ //已经到达设定的运动步数
0490 E0910000 lds R30,_p
0494 F0910100 lds R31,_p+1
0498 2180 ldd R2,z+1
049A 85E0 ldi R24,5
049C 829D mul R24,R2
049E C001 movw R24,R0
04A0 0597 sbiw R24,5
04A2 0196 adiw R24,1
04A4 20900000 lds R2,_i
04A8 3324 clr R3
04AA 8215 cp R24,R2
04AC 9305 cpc R25,R3
04AE 34F4 brge L97
04B0 X26:
04B0 80910000 lds R24,_j
04B4 8130 cpi R24,1
04B6 11F4 brne L97
04B8 X27:
04B8 .dbline 175
04B8 .dbline 176
04B8 ; step_back(); //相应处理函数
04B8 06DF rcall _step_back
04BA .dbline 177
04BA ; }//end else if
04BA 0FC0 rjmp L98
04BC L97:
04BC .dbline 178
04BC ; else{ //是否到达运动循环开始的第一步
04BC .dbline 179
04BC ; j=1;
04BC 81E0 ldi R24,1
04BE 80930000 sts _j,R24
04C2 .dbline 180
04C2 ; i=((p[1]-1)*5+2); //准备执行下一步
04C2 E0910000 lds R30,_p
04C6 F0910100 lds R31,_p+1
04CA 2180 ldd R2,z+1
04CC 85E0 ldi R24,5
04CE 829D mul R24,R2
04D0 802D mov R24,R0
04D2 8550 subi R24,5
04D4 8E5F subi R24,254 ; addi 2
04D6 80930000 sts _i,R24
04DA .dbline 181
04DA ; }//end else
04DA L98:
04DA L96:
04DA .dbline 182
04DA ; if(i==(p[0]*5+2)){ //是否到达最后一步
04DA E0910000 lds R30,_p
04DE F0910100 lds R31,_p+1
04E2 2080 ldd R2,z+0
04E4 85E0 ldi R24,5
04E6 829D mul R24,R2
04E8 802D mov R24,R0
04EA 8E5F subi R24,254 ; addi 2
04EC 20900000 lds R2,_i
04F0 2816 cp R2,R24
04F2 41F4 brne L99
04F4 X28:
04F4 .dbline 182
04F4 .dbline 183
04F4 ; i=(p[1]-1)*5+2; //重新从第一条指令开始执行
04F4 2180 ldd R2,z+1
04F6 85E0 ldi R24,5
04F8 829D mul R24,R2
04FA 802D mov R24,R0
04FC 8550 subi R24,5
04FE 8E5F subi R24,254 ; addi 2
0500 80930000 sts _i,R24
0504 .dbline 184
0504 ; }//end if
0504 L99:
0504 .dbline 185
0504 ; }//end if
0504 L85:
0504 .dbline 186
0504 ; }//end while
0504 L80:
0504 .dbline 159
0504 8BCF rjmp L79
0506 L81:
0506 .dbline -2
0506 L78:
0506 .dbline 0 ; func end
0506 0895 ret
0508 .dbend
0508 ; }
0508 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -