📄 图康科技.lst
字号:
3FE 2FE0 MOV R30,R16
3FF 27FF CLR R31
400 0FE8 ADD R30,R24
401 1FF9 ADC R31,R25
402 8220 STD Z+0,R2
(0079) RS_j++;
403 9503 INC R16
404 3006 CPI R16,6
405 F378 BCS 0x03F5
(0080) }
(0081) break;
406 C035 RJMP 0x043C
(0082) case 0x2d: //节点2
(0083) while(RS_j<6){
(0084) get[6+RS_j]=getchar[RS_j];
407 ED80 LDI R24,0xD0
408 E091 LDI R25,1
409 2FE0 MOV R30,R16
40A 27FF CLR R31
40B 0FE8 ADD R30,R24
40C 1FF9 ADC R31,R25
40D 8020 LDD R2,Z+0
40E ED8F LDI R24,0xDF
40F E091 LDI R25,1
410 2FE0 MOV R30,R16
411 27FF CLR R31
412 0FE8 ADD R30,R24
413 1FF9 ADC R31,R25
414 8220 STD Z+0,R2
(0085) RS_j++;
415 9503 INC R16
416 3006 CPI R16,6
417 F378 BCS 0x0407
(0086) }
(0087) break;
418 C023 RJMP 0x043C
(0088) case 0x3c: //节点3
(0089) while(RS_j<6){
(0090) get[12+RS_j]=getchar[RS_j];
419 ED80 LDI R24,0xD0
41A E091 LDI R25,1
41B 2FE0 MOV R30,R16
41C 27FF CLR R31
41D 0FE8 ADD R30,R24
41E 1FF9 ADC R31,R25
41F 8020 LDD R2,Z+0
420 EE85 LDI R24,0xE5
421 E091 LDI R25,1
422 2FE0 MOV R30,R16
423 27FF CLR R31
424 0FE8 ADD R30,R24
425 1FF9 ADC R31,R25
426 8220 STD Z+0,R2
(0091) RS_j++;
427 9503 INC R16
428 3006 CPI R16,6
429 F378 BCS 0x0419
(0092) }
(0093) break;
42A C011 RJMP 0x043C
(0094) case 0x4b: //节点4
(0095) while(RS_j<6){
(0096) get[18+RS_j]=getchar[RS_j];
42B ED80 LDI R24,0xD0
42C E091 LDI R25,1
42D 2FE0 MOV R30,R16
42E 27FF CLR R31
42F 0FE8 ADD R30,R24
430 1FF9 ADC R31,R25
431 8020 LDD R2,Z+0
432 EE8B LDI R24,0xEB
433 E091 LDI R25,1
434 2FE0 MOV R30,R16
435 27FF CLR R31
436 0FE8 ADD R30,R24
437 1FF9 ADC R31,R25
438 8220 STD Z+0,R2
(0097) RS_j++;
439 9503 INC R16
43A 3006 CPI R16,6
43B F378 BCS 0x042B
(0098) }//end while
(0099) break;
(0100) }//end switch
(0101) }//end if
43C 9508 RET
(0102) }
(0103)
(0104) /***************************各电机停止函数,相关变量清零***********/
(0105) void moto_stop(void)
(0106) {
(0107) moto1[2]=0xb4; //向各节点停止命令
_moto_stop:
43D EB84 LDI R24,0xB4
43E 9380 0116 STS moto1+2,R24
(0108) moto2[2]=0xb4;
440 9380 011C STS moto2+2,R24
(0109) moto3[2]=0xb4;
442 9380 0122 STS moto3+2,R24
(0110) moto4[2]=0xb4;
444 9380 0128 STS moto4+2,R24
(0111)
(0112) get[2]=0x00; //接收控制指令数组清零
446 2422 CLR R2
447 9220 01DB STS get+2,R2
(0113) get[8]=0x00;
449 9220 01E1 STS 0x01E1,R2
(0114) get[14]=0x00;
44B 9220 01E7 STS 0x01E7,R2
(0115) get[20]=0x00;
44D 9220 01ED STS 0x01ED,R2
(0116)
(0117) status[2]=0; //状态数组之时间清0
44F 2433 CLR R3
450 9230 01CA STS 0x01CA,R3
452 9220 01C9 STS 0x01C9,R2
(0118) TIMSK=0x00; //定时器关闭
454 BE29 OUT 0x39,R2
(0119) page=4; //显示第四页停止页面
455 E084 LDI R24,4
456 9380 01CF STS page,R24
(0120) flag=2; //flag标志清零
458 E082 LDI R24,2
459 9380 01D6 STS flag,R24
45B 9508 RET
(0121) }
(0122) /**************运动到达指定循环步数之前***********/
(0123) void step_for(void)
(0124) {
(0125) moto1[4]=p[++i]; //存储各节点的运动速度(时间)
_step_for:
45C 9180 012D LDS R24,i
45E 5F8F SUBI R24,0xFF
45F 2E48 MOV R4,R24
460 9240 012D STS i,R4
462 9020 01D7 LDS R2,p
464 9030 01D8 LDS R3,p+1
466 2FE8 MOV R30,R24
467 27FF CLR R31
468 0DE2 ADD R30,R2
469 1DF3 ADC R31,R3
46A 8020 LDD R2,Z+0
46B 9220 0118 STS 0x0118,R2
(0126) moto2[4]=p[i];
46D 9020 01D7 LDS R2,p
46F 9030 01D8 LDS R3,p+1
471 2FE8 MOV R30,R24
472 27FF CLR R31
473 0DE2 ADD R30,R2
474 1DF3 ADC R31,R3
475 8020 LDD R2,Z+0
476 9220 011E STS 0x011E,R2
(0127) moto3[4]=p[i];
478 9020 01D7 LDS R2,p
47A 9030 01D8 LDS R3,p+1
47C 2FE8 MOV R30,R24
47D 27FF CLR R31
47E 0DE2 ADD R30,R2
47F 1DF3 ADC R31,R3
480 8020 LDD R2,Z+0
481 9220 0124 STS 0x0124,R2
(0128) moto4[4]=p[i];
483 9020 01D7 LDS R2,p
485 9030 01D8 LDS R3,p+1
487 2FE8 MOV R30,R24
488 27FF CLR R31
489 0DE2 ADD R30,R2
48A 1DF3 ADC R31,R3
48B 8020 LDD R2,Z+0
48C 9220 012A STS 0x012A,R2
(0129) i++;
48E 5F8F SUBI R24,0xFF
48F 9380 012D STS i,R24
(0130) moto1[3]=p[i++]; //存储各节点的运动位置
491 2E28 MOV R2,R24
492 2433 CLR R3
493 0121 MOVW R4,R2
494 5F8F SUBI R24,0xFF
495 9380 012D STS i,R24
497 9020 01D7 LDS R2,p
499 9030 01D8 LDS R3,p+1
49B 2DE4 MOV R30,R4
49C 27FF CLR R31
49D 0DE2 ADD R30,R2
49E 1DF3 ADC R31,R3
49F 8020 LDD R2,Z+0
4A0 9220 0117 STS moto1+3,R2
(0131) moto2[3]=p[i++];
4A2 2F08 MOV R16,R24
4A3 2711 CLR R17
4A4 5F8F SUBI R24,0xFF
4A5 9380 012D STS i,R24
4A7 9020 01D7 LDS R2,p
4A9 9030 01D8 LDS R3,p+1
4AB 2FE0 MOV R30,R16
4AC 27FF CLR R31
4AD 0DE2 ADD R30,R2
4AE 1DF3 ADC R31,R3
4AF 8020 LDD R2,Z+0
4B0 9220 011D STS moto2+3,R2
(0132) moto3[3]=p[i++];
4B2 2F08 MOV R16,R24
4B3 2711 CLR R17
4B4 5F8F SUBI R24,0xFF
4B5 9380 012D STS i,R24
4B7 9020 01D7 LDS R2,p
4B9 9030 01D8 LDS R3,p+1
4BB 2FE0 MOV R30,R16
4BC 27FF CLR R31
4BD 0DE2 ADD R30,R2
4BE 1DF3 ADC R31,R3
4BF 8020 LDD R2,Z+0
4C0 9220 0123 STS moto3+3,R2
(0133) moto4[3]=p[i];
4C2 9020 01D7 LDS R2,p
4C4 9030 01D8 LDS R3,p+1
4C6 2FE8 MOV R30,R24
4C7 27FF CLR R31
4C8 0DE2 ADD R30,R2
4C9 1DF3 ADC R31,R3
4CA 8020 LDD R2,Z+0
4CB 9220 0129 STS moto4+3,R2
(0134) flag=2; //主函数flag标志置数
4CD E082 LDI R24,2
4CE 9380 01D6 STS flag,R24
4D0 9508 RET
_step_back:
4D1 934A ST R20,-Y
4D2 935A ST R21,-Y
(0135) }
(0136) /***************运动到达指定循环步数之后***********/
(0137) void step_back(void)
(0138) {
(0139) moto1[4]=p[i]; //存储各节点运动速度(时间)
4D3 9020 01D7 LDS R2,p
4D5 9030 01D8 LDS R3,p+1
4D7 91E0 012D LDS R30,i
4D9 27FF CLR R31
4DA 0DE2 ADD R30,R2
4DB 1DF3 ADC R31,R3
4DC 8020 LDD R2,Z+0
4DD 9220 0118 STS 0x0118,R2
(0140) moto2[4]=p[i];
4DF 9020 01D7 LDS R2,p
4E1 9030 01D8 LDS R3,p+1
4E3 91E0 012D LDS R30,i
4E5 27FF CLR R31
4E6 0DE2 ADD R30,R2
4E7 1DF3 ADC R31,R3
4E8 8020 LDD R2,Z+0
4E9 9220 011E STS 0x011E,R2
(0141) moto3[4]=p[i];
4EB 9020 01D7 LDS R2,p
4ED 9030 01D8 LDS R3,p+1
4EF 91E0 012D LDS R30,i
4F1 27FF CLR R31
4F2 0DE2 ADD R30,R2
4F3 1DF3 ADC R31,R3
4F4 8020 LDD R2,Z+0
4F5 9220 0124 STS 0x0124,R2
(0142) moto4[4]=p[i];
4F7 9020 01D7 LDS R2,p
4F9 9030 01D8 LDS R3,p+1
4FB 91E0 012D LDS R30,i
4FD 27FF CLR R31
4FE 0DE2 ADD R30,R2
4FF 1DF3 ADC R31,R3
500 8020 LDD R2,Z+0
501 9220 012A STS 0x012A,R2
(0143)
(0144) i++; //变量加1,准备执行下一步
503 9180 012D LDS R24,i
505 5F8F SUBI R24,0xFF
506 9380 012D STS i,R24
(0145)
(0146) moto1[3]=p[i++]*status[1]/0x64; //运动位置转换后存储
508 2E28 MOV R2,R24
509 2433 CLR R3
50A 0121 MOVW R4,R2
50B 5F8F SUBI R24,0xFF
50C 9380 012D STS i,R24
50E 9020 01D7 LDS R2,p
510 9030 01D8 LDS R3,p+1
512 2DE4 MOV R30,R4
513 27FF CLR R31
514 0DE2 ADD R30,R2
515 1DF3 ADC R31,R3
516 8100 LDD R16,Z+0
517 2711 CLR R17
518 9120 01C7 LDS R18,status+2
51A 9130 01C8 LDS R19,status+3
51C D2F8 RCALL empy16s
51D E624 LDI R18,0x64
51E E030 LDI R19,0
51F D2DB RCALL div16u
520 9300 0117 STS moto1+3,R16
(0147) moto2[3]=p[i++]*status[1]/0x64;
522 9020 012D LDS R2,i
524 2433 CLR R3
525 0121 MOVW R4,R2
526 2D82 MOV R24,R2
527 5F8F SUBI R24,0xFF
528 9380 012D STS i,R24
52A 9020 01D7 LDS R2,p
52C 9030 01D8 LDS R3,p+1
52E 2DE4 MOV R30,R4
52F 27FF CLR R31
530 0DE2 ADD R30,R2
531 1DF3 ADC R31,R3
532 8100 LDD R16,Z+0
533 2711 CLR R17
534 9120 01C7 LDS R18,status+2
536 9130 01C8 LDS R19,status+3
538 D2DC RCALL empy16s
539 E624 LDI R18,0x64
53A E030 LDI R19,0
53B D2BF RCALL div16u
53C 9300 011D STS moto2+3,R16
(0148) moto3[3]=p[i++]*status[1]/0x64;
53E 9140 012D LDS R20,i
540 2755 CLR R21
541 2F84 MOV R24,R20
542 5F8F SUBI R24,0xFF
543 9380 012D STS i,R24
545 9020 01D7 LDS R2,p
547 9030 01D8 LDS R3,p+1
549 2FE4 MOV R30,R20
54A 27FF CLR R31
54B 0DE2 ADD R30,R2
54C 1DF3 ADC R31,R3
54D 8100 LDD R16,Z+0
54E 2711 CLR R17
54F 9120 01C7 LDS R18,status+2
551 9130 01C8 LDS R19,status+3
553 D2C1 RCALL empy16s
554 E624 LDI R18,0x64
555 E030 LDI R19,0
556 D2A4 RCALL div16u
557 9300 0123 STS moto3+3,R16
(0149) moto4[3]=p[i++]*status[1]/0x64;
559 9140 012D LDS R20,i
55B 2755 CLR R21
55C 2F84 MOV R24,R20
55D 5F8F SUBI R24,0xFF
55E 9380 012D STS i,R24
560 9020 01D7 LDS R2,p
562 9030 01D8 LDS R3,p+1
564 2FE4 MOV R30,R20
565 27FF CLR R31
566 0DE2 ADD R30,R2
567 1DF3 ADC R31,R3
568 8100 LDD R16,Z+0
569 2711 CLR R17
56A 9120 01C7 LDS R18,status+2
56C 9130 01C8 LDS R19,status+3
56E D2A6 RCALL empy16s
56F E624 LDI R18,0x64
570 E030 LDI R19,0
571 D289 RCALL div16u
572 9300 0129 STS moto4+3,R16
(0150)
(0151) flag=2; //主函数flag标志置数
574 E082 LDI R24,2
575 9380 01D6 STS flag,R24
577 9159 LD R21,Y+
578 9149 LD R20,Y+
579 9508 RET
(0152) }
(0153) /***************************接收数据决断子程序*******************/
(0154) void RS485_getchar(void)
(0155) {
(0156)
(0157) data_decide(); //接收数组判断存储子程序
_RS485_getchar:
57A DE52 RCALL _data_decide
57B C074 RJMP 0x05F0
(0158)
(0159) while(1){
(0160) if(second==status[2]){ //运动时间到
57C 9020 01C9 LDS R2,0x01C9
57E 9030 01CA LDS R3,0x01CA
580 9040 012F LDS R4,second
582 9050 0130 LDS R5,second+1
584 1442 CP R4,R2
585 0453 CPC R5,R3
586 F411 BNE 0x0589
(0161) moto_stop(); //电机停止函数
587 DEB5 RCALL _moto_stop
(0162) break;
588 C068 RJMP 0x05F1
(0163) }//end if
(0164) if((get[2]==0xff)&&(get[8]==0xff)&& //各节点电机都已停止
589 9180 01DB LDS R24,get+2
58B 3F8F CPI R24,0xFF
58C F009 BEQ 0x058E
58D C062 RJMP 0x05F0
58E 9180 01E1 LDS R24,0x01E1
590 3F8F CPI R24,0xFF
591 F009 BEQ 0x0593
592 C05D RJMP 0x05F0
593 9180 01E7 LDS R24,0x01E7
595 3F8F CPI R24,0xFF
596 F009 BEQ 0x0598
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -