📄 洗衣机.s
字号:
ldi R16,2
ldi R17,0
xcall _Delay
.dbline 159
; Char_Set_XY(0,1,"洗衣重复次数 次");
ldi R24,<L260
ldi R25,>L260
std y+1,R25
std y+0,R24
ldi R18,1
clr R16
xcall _Char_Set_XY
.dbline 160
; Char_Set_XY(6,1,":");
ldi R24,<L247
ldi R25,>L247
std y+1,R25
std y+0,R24
ldi R18,1
ldi R16,6
xcall _Char_Set_XY
.dbline 162
;
; Delay(1);
ldi R16,1
ldi R17,0
xcall _Delay
.dbline 163
; W_1byte(0,1,0x30+replay);
lds R24,_replay
subi R24,208 ; addi 48
std y+0,R24
ldi R18,1
clr R16
xcall _W_1byte
.dbline 166
;
;
; set_buff=0;
clr R2
sts _set_buff,R2
xjmp L262
L261:
.dbline 168
; while(nn==4&&flag_start==0)//洗衣强度标志位为4
; {
.dbline 171
;
;
; set_buff=key2_scan();
xcall _key2_scan
sts _set_buff,R16
.dbline 172
; replay+=set_buff;
lds R3,_replay
add R3,R16
sts _replay,R3
.dbline 173
; if(BBBuffer==1)
lds R24,_BBBuffer
cpi R24,1
brne L264
X73:
.dbline 174
; {
.dbline 175
; if(replay>=6)//判断溢出
mov R24,R3
cpi R24,6
brlo L266
X74:
.dbline 176
; replay=1;
ldi R24,1
sts _replay,R24
L266:
.dbline 177
; if(replay<=0)
ldi R24,0
lds R2,_replay
cp R24,R2
brlo L268
X75:
.dbline 178
; replay=5;
ldi R24,5
sts _replay,R24
L268:
.dbline 179
; Char_Set_XY(6,1,":");
ldi R24,<L247
ldi R25,>L247
std y+1,R25
std y+0,R24
ldi R18,1
ldi R16,6
xcall _Char_Set_XY
.dbline 180
; W_1byte(0,1,0x30+replay);//显示数字
lds R24,_replay
subi R24,208 ; addi 48
std y+0,R24
ldi R18,1
clr R16
xcall _W_1byte
.dbline 181
; BBBuffer=0;
clr R2
sts _BBBuffer,R2
.dbline 182
; data_buff[0]='r';
ldi R24,114
sts _data_buff,R24
.dbline 183
; data_buff[1]=replay;
lds R2,_replay
sts _data_buff+1,R2
.dbline 184
; Putstr(data_buff);
ldi R16,<_data_buff
ldi R17,>_data_buff
xcall _Putstr
.dbline 185
; }
L264:
.dbline 186
; key_scan();//扫描设置键盘
xcall _key_scan
.dbline 187
; }
L262:
.dbline 167
lds R24,_nn
cpi R24,4
brne L271
X76:
lds R2,_flag_start
tst R2
brne X78
xjmp L261
X78:
X77:
L271:
.dbline -2
L259:
.dbline 0 ; func end
adiw R28,2
ret
.dbend
.dbfunc e wait_time _wait_time fV
; w_t -> R16
.even
_wait_time::
.dbline -1
.dbline 197
;
;
; }
;
;
;
;
;
; void wait_time(uchar w_t)
; {
.dbline 198
; TCNT0=0;
clr R2
out 0x32,R2
.dbline 199
; count=0;
sts _count,R2
.dbline 200
; endcount=w_t;
sts _endcount,R16
.dbline -2
L272:
.dbline 0 ; func end
ret
.dbsym r w_t 16 c
.dbend
.dbfunc e PWM_motor_going _PWM_motor_going fV
; dir -> R16
.even
_PWM_motor_going::
st -y,R20
st -y,R21
.dbline -1
.dbline 204
; }
;
; void PWM_motor_going(uchar dir)
; {
.dbline 205
; switch (dir)
mov R20,R16
clr R21
cpi R20,0
cpc R20,R21
breq L277
X79:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L278
X80:
xjmp L275
L277:
.dbline 207
; {
; case 0:DDR_PB0=1,_PB0=1;DDR_PB1=1,_PB1=0;break;
in R24,0x17
ori R24,1
out 0x17,R24
in R24,0x18
ori R24,1
out 0x18,R24
.dbline 207
in R24,0x17
ori R24,2
out 0x17,R24
in R24,0x18
andi R24,253
out 0x18,R24
.dbline 207
xjmp L275
L278:
.dbline 208
; case 1:DDR_PB0=1,_PB0=0;DDR_PB1=1,_PB1=1;break;
in R24,0x17
ori R24,1
out 0x17,R24
in R24,0x18
andi R24,254
out 0x18,R24
.dbline 208
in R24,0x17
ori R24,2
out 0x17,R24
in R24,0x18
ori R24,2
out 0x18,R24
.dbline 208
.dbline 209
; default:break;
L275:
.dbline -2
L273:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r dir 16 c
.dbend
.dbfunc e Water_in _Water_in fV
; ff -> R16
.even
_Water_in::
st -y,R20
st -y,R21
.dbline -1
.dbline 214
; }
; }
;
; void Water_in(uchar ff)
; {
.dbline 215
; switch(ff)
mov R20,R16
clr R21
cpi R20,0
cpc R20,R21
breq L283
X81:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L284
X82:
xjmp L281
L283:
.dbline 217
; {
; case 0:DDR_PC4=1;_PC4=0;break;
in R24,0x14
ori R24,16
out 0x14,R24
.dbline 217
in R24,0x15
andi R24,239
out 0x15,R24
.dbline 217
xjmp L281
L284:
.dbline 218
; case 1:DDR_PC4=1;_PC4=1;break;
in R24,0x14
ori R24,16
out 0x14,R24
.dbline 218
in R24,0x15
ori R24,16
out 0x15,R24
.dbline 218
.dbline 219
; default:break;
L281:
.dbline -2
L279:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r ff 16 c
.dbend
.dbfunc e Water_out _Water_out fV
; ff -> R16
.even
_Water_out::
st -y,R20
st -y,R21
.dbline -1
.dbline 224
; }
; }
;
; void Water_out(uchar ff)
; {
.dbline 225
; switch(ff)
mov R20,R16
clr R21
cpi R20,0
cpc R20,R21
breq L289
X83:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L290
X84:
xjmp L287
L289:
.dbline 227
; {
; case 0:DDR_PC5=1;_PC5=0;break;//写语句
in R24,0x14
ori R24,32
out 0x14,R24
.dbline 227
in R24,0x15
andi R24,223
out 0x15,R24
.dbline 227
xjmp L287
L290:
.dbline 228
; case 1:DDR_PC5=1;_PC5=1;break;//写语句
in R24,0x14
ori R24,32
out 0x14,R24
.dbline 228
in R24,0x15
ori R24,32
out 0x15,R24
.dbline 228
.dbline 229
; default:break;
L287:
.dbline -2
L285:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r ff 16 c
.dbend
.dbfunc e get_clean _get_clean fV
.even
_get_clean::
.dbline -1
.dbline 235
; }
; }
;
;
; void get_clean(void)//洗衣
; {
.dbline 236
; SET_PWMA(speed);//设置洗衣强弱模式
lds R16,_speed
xcall _SET_PWMA
.dbline 237
; PWM_on;
ldi R24,35
out 0x2f,R24
.dbline 237
ldi R24,26
out 0x2e,R24
.dbline 237
in R24,0x11
ori R24,16
out 0x11,R24
.dbline 238
; wait_time(8);//定时8s正转
ldi R16,8
xcall _wait_time
.dbline 239
; PWM_motor_going(0);
clr R16
xcall _PWM_motor_going
xjmp L293
L292:
.dbline 241
; while(1)
; {
.dbline 242
; out_o_not;//判断是否应该退出大循环
lds R2,_flag_start
tst R2
brne L295
X85:
.dbline 242
xjmp L294
L295:
.dbline 243
; if(count==endcount)
lds R2,_endcount
lds R3,_count
cp R3,R2
brne L297
X86:
.dbline 244
; break;
xjmp L294
L297:
.dbline 245
; }
L293:
.dbline 240
xjmp L292
L294:
.dbline 246
; PWM_off;
clr R2
out 0x2f,R2
.dbline 246
out 0x2e,R2
.dbline 246
in R24,0x11
andi R24,239
out 0x11,R24
.dbline 247
; wait_time(2);//定时2s停转
ldi R16,2
xcall _wait_time
xjmp L300
L299:
.dbline 249
; while(1)
; {
.dbline 250
; out_o_not;//判断是否应该退出大循环
lds R2,_flag_start
tst R2
brne L302
X87:
.dbline 250
xjmp L301
L302:
.dbline 251
; if(count==endcount)
lds R2,_endcount
lds R3,_count
cp R3,R2
brne L304
X88:
.dbline 252
; break;
xjmp L301
L304:
.dbline 253
; }
L300:
.dbline 248
xjmp L299
L301:
.dbline 254
; PWM_on;
ldi R24,35
out 0x2f,R24
.dbline 254
ldi R24,26
out 0x2e,R24
.dbline 254
in R24,0x11
ori R24,16
out 0x11,R24
.dbline 255
; wait_time(8);//定时8s反转
ldi R16,8
xcall _wait_time
.dbline 256
; PWM_motor_going(1);
ldi R16,1
xcall _PWM_motor_going
xjmp L307
L306:
.dbline 258
; while(1)
; {out_o_not;//判断是否应该退出大循环
.dbline 258
lds R2,_flag_start
tst R2
brne L309
X89:
.dbline 258
xjmp L308
L309:
.dbline 259
; if(count==endcount)
lds R2,_endcount
lds R3,_count
cp R3,R2
brne L311
X90:
.dbline 260
; break;
xjmp L308
L311:
.dbline 261
; }
L307:
.dbline 257
xjmp L306
L308:
.dbline 262
; PWM_off;
clr R2
out 0x2f,R2
.dbline 262
out 0x2e,R2
.dbline 262
in R24,0x11
andi R24,239
out 0x11,R24
.dbline 263
; wait_time(3);//定时3s停转
ldi R16,3
xcall _wait_time
xjmp L314
L313:
.dbline 265
; while(1)
; {out_o_not;//判断是否应该退出大循环
.dbline 265
lds R2,_flag_start
tst R2
brne L316
X91:
.dbline 265
xjmp L315
L316:
.dbline 266
; if(count==endcount)
lds R2,_endcount
lds R3,_count
cp R3,R2
brne L318
X92:
.dbline 267
; break;
xjmp L315
L318:
.dbline 268
; }
L314:
.dbline 264
xjmp L313
L315:
.dbline -2
L291:
.dbline 0 ; func end
ret
.dbend
.dbfunc e get_dry _get_dry fV
.even
_get_dry::
.dbline -1
.dbline 272
; }
;
; void get_dry()//脱水
; {
.dbline 273
; PWM_on;
ldi R24,35
out 0x2f,R24
.dbline 273
ldi R24,26
out 0x2e,R24
.dbline 273
in R24,0x11
ori R24,16
out 0x11,R24
.dbline 274
; wait_time(10);//定时10s狠转
ldi R16,10
xcall _wait_time
xjmp L322
L321:
.dbline 276
; while(1)
; {out_o_not;//判断是否应该退出大循环
.dbline 276
lds R2,_flag_start
tst R2
brne L324
X93:
.dbline 276
xjmp L323
L324:
.dbline 277
; if(count<endcount)
lds R2,_endcount
lds R3,_count
cp R3,R2
brsh L323
X94:
.dbline 278
; PWM_motor_going(0);
clr R16
xcall _PWM_motor_going
.dbline 279
; else break;
L327:
.dbline 280
; }
L322:
.dbline 275
xjmp L321
L323:
.dbline 281
; PWM_off;
clr R2
out 0x2f,R2
.dbline 281
out 0x2e,R2
.dbline 281
in R24,0x11
andi R24,239
out 0x11,R24
.dbline 282
; wait_time(2);//定时2s停转
ldi R16,2
xcall _wait_time
xjmp L329
L328:
.dbline 284
; while(count<endcount)
; {
.dbline 285
; out_o_not;//判断是否应该退出大循环
lds R2,_flag_start
tst R2
brne L331
X95:
.dbline 285
xjmp L330
L331:
.dbline 286
; }
L329:
.dbline 283
lds R2,_endcount
lds R3,_count
cp R3,R2
brlo L328
X96:
L330:
.dbline 288
;
; PWM_on;
ldi R24,35
out 0x2f,R24
.dbline 288
ldi R24,26
out 0x2e,R24
.dbline 288
in R24,0x11
ori R24,16
out 0x11,R24
.dbline 289
; wait_time(10);//定时10s狠转
ldi R16,10
xcall _wait_time
xjmp L334
L333:
.dbline 291
; while(1)
; {
.dbline 292
; out_o_not;//判断是否应该退出大循环
lds R2,_flag_start
tst R2
brne L336
X97:
.dbline 292
xjmp L335
L336:
.dbline 293
; if(count<endcount)
lds R2,_endcount
lds R3,_count
cp R3,R2
brsh L335
X98:
.dbline 294
; PWM_motor_going(1);
ldi R16,1
xcall _PWM_motor_going
.dbline 295
; else break;
L339:
.dbline 296
; }
L334:
.dbline 290
xjmp L333
L335:
.dbline 297
; PWM_off;
clr R2
out 0x2f,R2
.dbline 297
out 0x2e,R2
.dbline 297
in R24,0x11
andi R24,239
out 0x11,R24
.dbline 299
;
; wait_time(2);//定时2s停转
ldi R16,2
xcall _wait_time
xjmp L341
L340:
.dbline 301
; while(count<endcount)
; {
.dbline 302
; out_o_not;//判断是否应该退出大循环
lds R2,_flag_start
tst R2
brne L343
X99:
.dbline 302
xjmp L342
L343:
.dbline 303
; }
L341:
.dbline 300
lds R2,_endcount
lds R3,_count
cp R3,R2
brlo L340
X100:
L342:
.dbline -2
L320:
.dbline 0 ; func end
ret
.dbend
.dbfunc e handle_receive _handle_receive fV
; ceive -> R16,R17
.even
_handle_receive::
st -y,R20
st -y,R21
.dbline -1
.dbline 308
;
; }
;
; void handle_receive(uchar ceive[2])//串口接收处理程序
; {
.dbline 309
; switch (ceive[0])
movw R30,R16
ldd R20,z+0
clr R21
cpi R20,104
ldi R30,0
cpc R21,R30
breq L351
X101:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -