📄 send_485.s
字号:
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 + -