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

📄 send_485.s

📁 基于ATmega8开发的关于医疗康复的机器人
💻 S
📖 第 1 页 / 共 2 页
字号:
	sts _get+2,R2
	.dbline 113
;    	get[8]=0x00;
	sts _get+8,R2
	.dbline 114
;    	get[14]=0x00;
	sts _get+14,R2
	.dbline 115
;    	get[20]=0x00;
	sts _get+20,R2
	.dbline 117
;    
;   	status[2]=0;   		//状态数组之时间清0
	clr R3
	sts _status+4+1,R3
	sts _status+4,R2
	.dbline 118
;    	TIMSK=0x00;    		//定时器关闭 	
	out 0x39,R2
	.dbline 119
;    	page=4;        		//显示第四页停止页面 
	ldi R24,4
	sts _page,R24
	.dbline 120
;    	flag=2; 			//flag标志清零
	ldi R24,2
	sts _flag,R24
	.dbline -2
L46:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e step_for _step_for fV
	.even
_step_for::
	.dbline -1
	.dbline 124
; }
;  /**************运动到达指定循环步数之前***********/
; void step_for(void)
; {
	.dbline 125
;   	moto1[4]=p[++i];	//存储各节点的运动速度(时间)
	lds R24,_i
	subi R24,255    ; addi 1
	mov R4,R24
	sts _i,R4
	lds R2,_p
	lds R3,_p+1
	mov R30,R24
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	sts _moto1+4,R2
	.dbline 126
;   	moto2[4]=p[i];
	lds R2,_p
	lds R3,_p+1
	mov R30,R24
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	sts _moto2+4,R2
	.dbline 127
;   	moto3[4]=p[i];
	lds R2,_p
	lds R3,_p+1
	mov R30,R24
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	sts _moto3+4,R2
	.dbline 128
;   	moto4[4]=p[i];   
	lds R2,_p
	lds R3,_p+1
	mov R30,R24
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	sts _moto4+4,R2
	.dbline 129
;   	i++;
	subi R24,255    ; addi 1
	sts _i,R24
	.dbline 130
;   	moto1[3]=p[i++];	//存储各节点的运动位置
	mov R2,R24
	clr R3
	movw R4,R2
	subi R24,255    ; addi 1
	sts _i,R24
	lds R2,_p
	lds R3,_p+1
	mov R30,R4
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	sts _moto1+3,R2
	.dbline 131
;   	moto2[3]=p[i++];
	mov R16,R24
	clr R17
	subi R24,255    ; addi 1
	sts _i,R24
	lds R2,_p
	lds R3,_p+1
	mov R30,R16
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	sts _moto2+3,R2
	.dbline 132
;   	moto3[3]=p[i++];
	mov R16,R24
	clr R17
	subi R24,255    ; addi 1
	sts _i,R24
	lds R2,_p
	lds R3,_p+1
	mov R30,R16
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	sts _moto3+3,R2
	.dbline 133
;   	moto4[3]=p[i];
	lds R2,_p
	lds R3,_p+1
	mov R30,R24
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	sts _moto4+3,R2
	.dbline 134
;  	flag=2;  			//主函数flag标志置数
	ldi R24,2
	sts _flag,R24
	.dbline -2
L56:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e step_back _step_back fV
	.even
_step_back::
	st -y,R20
	st -y,R21
	.dbline -1
	.dbline 138
; }
; /***************运动到达指定循环步数之后***********/
; void step_back(void)
; {
	.dbline 139
;   	moto1[4]=p[i];					//存储各节点运动速度(时间)
	lds R2,_p
	lds R3,_p+1
	lds R30,_i
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	sts _moto1+4,R2
	.dbline 140
;   	moto2[4]=p[i];
	lds R2,_p
	lds R3,_p+1
	lds R30,_i
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	sts _moto2+4,R2
	.dbline 141
;   	moto3[4]=p[i];
	lds R2,_p
	lds R3,_p+1
	lds R30,_i
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	sts _moto3+4,R2
	.dbline 142
;   	moto4[4]=p[i]; 
	lds R2,_p
	lds R3,_p+1
	lds R30,_i
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	sts _moto4+4,R2
	.dbline 144
;   
;   	i++;							//变量加1,准备执行下一步
	lds R24,_i
	subi R24,255    ; addi 1
	sts _i,R24
	.dbline 146
;   
;   	moto1[3]=p[i++]*status[1]/0x64; //运动位置转换后存储
	mov R2,R24
	clr R3
	movw R4,R2
	subi R24,255    ; addi 1
	sts _i,R24
	lds R2,_p
	lds R3,_p+1
	mov R30,R4
	clr R31
	add R30,R2
	adc R31,R3
	ldd R16,z+0
	clr R17
	lds R18,_status+2
	lds R19,_status+2+1
	rcall empy16s
	ldi R18,100
	ldi R19,0
	rcall div16u
	sts _moto1+3,R16
	.dbline 147
;   	moto2[3]=p[i++]*status[1]/0x64;  
	lds R2,_i
	clr R3
	movw R4,R2
	mov R24,R2
	subi R24,255    ; addi 1
	sts _i,R24
	lds R2,_p
	lds R3,_p+1
	mov R30,R4
	clr R31
	add R30,R2
	adc R31,R3
	ldd R16,z+0
	clr R17
	lds R18,_status+2
	lds R19,_status+2+1
	rcall empy16s
	ldi R18,100
	ldi R19,0
	rcall div16u
	sts _moto2+3,R16
	.dbline 148
;   	moto3[3]=p[i++]*status[1]/0x64; 
	lds R20,_i
	clr R21
	mov R24,R20
	subi R24,255    ; addi 1
	sts _i,R24
	lds R2,_p
	lds R3,_p+1
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	ldd R16,z+0
	clr R17
	lds R18,_status+2
	lds R19,_status+2+1
	rcall empy16s
	ldi R18,100
	ldi R19,0
	rcall div16u
	sts _moto3+3,R16
	.dbline 149
;   	moto4[3]=p[i++]*status[1]/0x64; 
	lds R20,_i
	clr R21
	mov R24,R20
	subi R24,255    ; addi 1
	sts _i,R24
	lds R2,_p
	lds R3,_p+1
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	ldd R16,z+0
	clr R17
	lds R18,_status+2
	lds R19,_status+2+1
	rcall empy16s
	ldi R18,100
	ldi R19,0
	rcall div16u
	sts _moto4+3,R16
	.dbline 151
;     
;  	flag=2;							//主函数flag标志置数
	ldi R24,2
	sts _flag,R24
	.dbline -2
L65:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbend
	.dbfunc e RS485_getchar _RS485_getchar fV
	.even
_RS485_getchar::
	.dbline -1
	.dbline 155
; }
; /***************************接收数据决断子程序*******************/
; void RS485_getchar(void)
; {
	.dbline 157
;   	
;   	data_decide();					//接收数组判断存储子程序
	rcall _data_decide
	rjmp L80
L79:
	.dbline 159
;    
; 	while(1){
	.dbline 160
; 	 	if(second==status[2]){ 		//运动时间到  
	lds R2,_status+4
	lds R3,_status+4+1
	lds R4,_second
	lds R5,_second+1
	cp R4,R2
	cpc R5,R3
	brne L82
X20:
	.dbline 160
	.dbline 161
;     		moto_stop();			//电机停止函数
	rcall _moto_stop
	.dbline 162
; 			break;
	rjmp L81
L82:
	.dbline 164
;   		}//end if
; 		if((get[2]==0xff)&&(get[8]==0xff)&&	//各节点电机都已停止
	lds R24,_get+2
	cpi R24,255
	breq X29
	rjmp L85
X29:
X21:
	lds R24,_get+8
	cpi R24,255
	breq X30
	rjmp L85
X30:
X22:
	lds R24,_get+14
	cpi R24,255
	breq X31
	rjmp L85
X31:
X23:
	lds R24,_get+20
	cpi R24,255
	breq X32
	rjmp L85
X32:
X24:
	.dbline 165
; 			(get[14]==0xff)&&(get[20]==0xff)){
	.dbline 167
;      		
; 			get[2]=0x00;					//各节点控制指令清零
	clr R2
	sts _get+2,R2
	.dbline 168
;      		get[8]=0x00;
	sts _get+8,R2
	.dbline 169
;      		get[14]=0x00;
	sts _get+14,R2
	.dbline 170
;      		get[20]=0x00;		
	sts _get+20,R2
	.dbline 172
;   			
; 			if(i<((p[1]-1)*5+1)){		  	//未到达设定的循环开始步数
	lds R30,_p
	lds R31,_p+1
	ldd R2,z+1
	ldi R24,5
	mul R24,R2
	mov R24,R0
	subi R24,5
	subi R24,255    ; addi 1
	lds R2,_i
	cp R2,R24
	brsh L95
X25:
	.dbline 172
	.dbline 173
;   				step_for();					//相应处理函数
	rcall _step_for
	.dbline 174
;   			}//end if  	
	rjmp L96
L95:
	.dbline 175
;  			else if((i>(p[1]-1)*5+1)&&(j==1)){ 	//已经到达设定的运动步数
	lds R30,_p
	lds R31,_p+1
	ldd R2,z+1
	ldi R24,5
	mul R24,R2
	movw R24,R0
	sbiw R24,5
	adiw R24,1
	lds R2,_i
	clr R3
	cp R24,R2
	cpc R25,R3
	brge L97
X26:
	lds R24,_j
	cpi R24,1
	brne L97
X27:
	.dbline 175
	.dbline 176
;  				step_back(); 				//相应处理函数
	rcall _step_back
	.dbline 177
;   			}//end else if
	rjmp L98
L97:
	.dbline 178
;   			else{ 							//是否到达运动循环开始的第一步
	.dbline 179
; 				j=1;							
	ldi R24,1
	sts _j,R24
	.dbline 180
; 				i=((p[1]-1)*5+2);			//准备执行下一步
	lds R30,_p
	lds R31,_p+1
	ldd R2,z+1
	ldi R24,5
	mul R24,R2
	mov R24,R0
	subi R24,5
	subi R24,254    ; addi 2
	sts _i,R24
	.dbline 181
; 			}//end else
L98:
L96:
	.dbline 182
; 			if(i==(p[0]*5+2)){				//是否到达最后一步
	lds R30,_p
	lds R31,_p+1
	ldd R2,z+0
	ldi R24,5
	mul R24,R2
	mov R24,R0
	subi R24,254    ; addi 2
	lds R2,_i
	cp R2,R24
	brne L99
X28:
	.dbline 182
	.dbline 183
; 				i=(p[1]-1)*5+2;				//重新从第一条指令开始执行
	ldd R2,z+1
	ldi R24,5
	mul R24,R2
	mov R24,R0
	subi R24,5
	subi R24,254    ; addi 2
	sts _i,R24
	.dbline 184
; 			}//end if
L99:
	.dbline 185
;   		}//end if		 
L85:
	.dbline 186
; 	}//end while
L80:
	.dbline 159
	rjmp L79
L81:
	.dbline -2
L78:
	.dbline 0 ; func end
	ret
	.dbend
; }
; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -