⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 图康科技.lst

📁 基于ATmega8开发的关于医疗康复的机器人
💻 LST
📖 第 1 页 / 共 5 页
字号:
     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 + -