📄 sl3010_3.lst
字号:
(0187) temp1=EEPROMread((int)&sound[sound_add]);
0258 E081 LDI R24,1
0259 E090 LDI R25,0
025A 91000060 LDS R16,0x60
025C 91100061 LDS R17,0x61
025E 0F08 ADD R16,R24
025F 1F19 ADC R17,R25
0260 D252 RCALL _EEPROMread
0261 93000071 STS _temp1,R16
0263 90200071 LDS R2,_temp1
0265 2022 TST R2
0266 F009 BEQ 0x0268
0267 CFB0 RJMP 0x0218
(0188) }
(0189) delay_ms(1000);
0268 EE08 LDI R16,0xE8
0269 E013 LDI R17,3
(0190) }
026A CE26 RJMP _delay_ms
(0191)
(0192) // 电机驱动信号 led灯指示电机状态
(0193) //PORTD = 0xA0;//前行//1010 0000 //PORTA = 0xC3;//1100,0011
(0194) //PORTD = 0x90;//左转//1001 0000快速左转//PORTA = 0x33;//0011,0011
(0195) //PORTD = 0x80;//左转//1000 0000慢速左转//PORTA = 0xF3;//1111,0011
(0196) //PORTD = 0x60;//右转//0110 0000快速右转//PORTA = 0xCC;//1100,1100
(0197) //PORTD = 0x20;//右转//0010 0000慢速右转//PORTA = 0xCF;//1100,1111
(0198) //PORTD = 0x50;//后退//0101 0000 //PORTA = 0x3C;//0011,1100
(0199)
(0200) //PC3声控启动
(0201) // 用PD7~PD4来作为电机驱动端
(0202)
(0203) void xuanya_car(void)
(0204) {
(0205) PORTA = 0xa5;//1010,0101
_xuanya_car:
026B EA85 LDI R24,0xA5
026C BB8B OUT 0x1B,R24
(0206)
(0207) work_status = 0x20;//置对应的工作状态标志
026D E280 LDI R24,0x20
026E 9380007C STS _work_status,R24
(0208)
(0209) mic_startup(); //等待声控启动
0270 DEB8 RCALL _mic_startup
0271 C05E RJMP 0x02D0
(0210)
(0211) while(1)
(0212) {//左(pc7) 中(pc6) 右(pc5)
(0213)
(0214) sw_touch(); //检测轻触开关
0272 DE4E RCALL _sw_touch
(0215)
(0216) pc = PINC & 0x10;
0273 B383 IN R24,0x13
0274 7180 ANDI R24,0x10
0275 9380006E STS _pc,R24
(0217) if(pc == 0x00)
0277 2388 TST R24
0278 F441 BNE 0x0281
(0218) {//后退//左转
(0219) backward();//后退
0279 DE39 RCALL _backward
(0220) delay_ms(xuanya_delayms);
027A E20C LDI R16,0x2C
027B E011 LDI R17,1
027C DE14 RCALL _delay_ms
(0221) turn_right();//左转
027D DE21 RCALL _turn_right
(0222) delay_ms(xuanya_delayms/2);
027E E906 LDI R16,0x96
027F E010 LDI R17,0
0280 DE10 RCALL _delay_ms
(0223) }
(0224) pc = PINC & 0xE0;
0281 B383 IN R24,0x13
0282 7E80 ANDI R24,0xE0
0283 9380006E STS _pc,R24
(0225) if(pc == 0x40)
0285 3480 CPI R24,0x40
0286 F441 BNE 0x028F
(0226) {//后退//左转
(0227) backward();//后退
0287 DE2B RCALL _backward
(0228) delay_ms(xuanya_delayms);
0288 E20C LDI R16,0x2C
0289 E011 LDI R17,1
028A DE06 RCALL _delay_ms
(0229) turn_right();//左转
028B DE13 RCALL _turn_right
(0230) delay_ms(xuanya_delayms/2);
028C E906 LDI R16,0x96
028D E010 LDI R17,0
028E DE02 RCALL _delay_ms
(0231) }
(0232) if(pc == 0x80)
028F 9180006E LDS R24,_pc
0291 3880 CPI R24,0x80
0292 F441 BNE 0x029B
(0233) {//后退//左转
(0234) backward();//后退
0293 DE1F RCALL _backward
(0235) delay_ms(xuanya_delayms);
0294 E20C LDI R16,0x2C
0295 E011 LDI R17,1
0296 DDFA RCALL _delay_ms
(0236) turn_right();//左转
0297 DE07 RCALL _turn_right
(0237) delay_ms(xuanya_delayms/2);
0298 E906 LDI R16,0x96
0299 E010 LDI R17,0
029A DDF6 RCALL _delay_ms
(0238) }
(0239) if(pc == 0x20)
029B 9180006E LDS R24,_pc
029D 3280 CPI R24,0x20
029E F441 BNE 0x02A7
(0240) {//后退//左转
(0241) backward();//后退
029F DE13 RCALL _backward
(0242) delay_ms(xuanya_delayms);
02A0 E20C LDI R16,0x2C
02A1 E011 LDI R17,1
02A2 DDEE RCALL _delay_ms
(0243) turn_right();//左转
02A3 DDFB RCALL _turn_right
(0244) delay_ms(xuanya_delayms/2);
02A4 E906 LDI R16,0x96
02A5 E010 LDI R17,0
02A6 DDEA RCALL _delay_ms
(0245) }
(0246) if(pc == 0xc0)
02A7 9180006E LDS R24,_pc
02A9 3C80 CPI R24,0xC0
02AA F441 BNE 0x02B3
(0247) {//后退//左转
(0248) backward();//后退
02AB DE07 RCALL _backward
(0249) delay_ms(xuanya_delayms);
02AC E20C LDI R16,0x2C
02AD E011 LDI R17,1
02AE DDE2 RCALL _delay_ms
(0250) turn_right();//左转
02AF DDEF RCALL _turn_right
(0251) delay_ms(xuanya_delayms/2);
02B0 E906 LDI R16,0x96
02B1 E010 LDI R17,0
02B2 DDDE RCALL _delay_ms
(0252) }
(0253) if(pc == 0x60)
02B3 9180006E LDS R24,_pc
02B5 3680 CPI R24,0x60
02B6 F441 BNE 0x02BF
(0254) {//后退//左转
(0255) backward();//后退
02B7 DDFB RCALL _backward
(0256) delay_ms(xuanya_delayms);
02B8 E20C LDI R16,0x2C
02B9 E011 LDI R17,1
02BA DDD6 RCALL _delay_ms
(0257) turn_right();//左转
02BB DDE3 RCALL _turn_right
(0258) delay_ms(xuanya_delayms/2);
02BC E906 LDI R16,0x96
02BD E010 LDI R17,0
02BE DDD2 RCALL _delay_ms
(0259) }
(0260) if(pc == 0xE0)
02BF 9180006E LDS R24,_pc
02C1 3E80 CPI R24,0xE0
02C2 F461 BNE 0x02CF
(0261) {
(0262) //刹车 //led灯为流水灯
(0263) stop();
02C3 DDF9 RCALL _stop
(0264) PORTA = 0x3C;
02C4 E38C LDI R24,0x3C
02C5 BB8B OUT 0x1B,R24
(0265) delay_ms(xuanya_delayms);
02C6 E20C LDI R16,0x2C
02C7 E011 LDI R17,1
02C8 DDC8 RCALL _delay_ms
(0266) PORTA = 0xC3;
02C9 EC83 LDI R24,0xC3
02CA BB8B OUT 0x1B,R24
(0267) delay_ms(xuanya_delayms);
02CB E20C LDI R16,0x2C
02CC E011 LDI R17,1
02CD DDC3 RCALL _delay_ms
(0268) }
02CE C001 RJMP 0x02D0
(0269) else
(0270) {
(0271) forward();//前行
02CF DDE8 RCALL _forward
02D0 CFA1 RJMP 0x0272
(0272) }
(0273) }
(0274) }
02D1 9508 RET
_remote_car:
02D2 D179 RCALL push_gset1
(0275)
(0276) void remote_car()
(0277) {//遥控车程序
(0278)
(0279) port_init();//调用端口初始化函数
02D3 DDA5 RCALL _port_init
(0280)
(0281) work_status = 0x60;//置对应的工作状态标志
02D4 E680 LDI R24,0x60
02D5 9380007C STS _work_status,R24
(0282) remote_rst:
(0283) PORTA = 0x0F;
02D7 E08F LDI R24,0xF
02D8 BB8B OUT 0x1B,R24
(0284) mic_startup();//等待声控启动函数
02D9 DE4F RCALL _mic_startup
02DA C040 RJMP 0x031B
(0285)
(0286) while(1)
(0287) {
(0288)
(0289) sw_touch();//检测轻触开关
02DB DDE5 RCALL _sw_touch
(0290)
(0291) remote_in = PINB & 0x0F;
02DC B386 IN R24,0x16
02DD 708F ANDI R24,0xF
02DE 9380007A STS _remote_in,R24
(0292) switch (remote_in)
02E0 2F48 MOV R20,R24
02E1 2755 CLR R21
02E2 3040 CPI R20,0
02E3 0745 CPC R20,R21
02E4 F089 BEQ 0x02F6
02E5 3041 CPI R20,1
02E6 E0E0 LDI R30,0
02E7 075E CPC R21,R30
02E8 F119 BEQ 0x030C
02E9 3042 CPI R20,2
02EA E0E0 LDI R30,0
02EB 075E CPC R21,R30
02EC F099 BEQ 0x0300
02ED 3044 CPI R20,4
02EE E0E0 LDI R30,0
02EF 075E CPC R21,R30
02F0 F051 BEQ 0x02FB
02F1 3048 CPI R20,0x8
02F2 E0E0 LDI R30,0
02F3 075E CPC R21,R30
02F4 F081 BEQ 0x0305
02F5 C01A RJMP 0x0310
(0293) {//检测遥控器是否有键按下
(0294) case 0x00:
(0295) forward(); //前行
02F6 DDC1 RCALL _forward
(0296) rst_time=0;
02F7 2422 CLR R2
02F8 92200069 STS _rst_time,R2
(0297) break;
02FA C015 RJMP 0x0310
(0298) case 0x04: // < A >
(0299) turn_right(); //右转
02FB DDA3 RCALL _turn_right
(0300) rst_time=0;
02FC 2422 CLR R2
02FD 92200069 STS _rst_time,R2
(0301) break;
02FF C010 RJMP 0x0310
(0302) case 0x02: // < B >
(0303) backward(); //后退
0300 DDB2 RCALL _backward
(0304) rst_time=0;
0301 2422 CLR R2
0302 92200069 STS _rst_time,R2
(0305) break;
0304 C00B RJMP 0x0310
(0306) case 0x08: // < C >
(0307) stop(); //停止运动
0305 DDB7 RCALL _stop
(0308) rst_time++;
0306 91800069 LDS R24,_rst_time
0308 5F8F SUBI R24,0xFF
0309 93800069 STS _rst_time,R24
(0309) break;
030B C004 RJMP 0x0310
(0310) case 0x01: // < D >
(0311) turn_left(); //左转
030C DD97 RCALL _turn_left
(0312) rst_time=0;
030D 2422 CLR R2
030E 92200069 STS _rst_time,R2
(0313) break;
(0314) }
(0315) delay_ms(200);
0310 EC08 LDI R16,0xC8
0311 E010 LDI R17,0
0312 DD7E RCALL _delay_ms
(0316) if(rst_time == 50)
0313 91800069 LDS R24,_rst_time
0315 3382 CPI R24,0x32
0316 F421 BNE 0x031B
(0317) {//当按住< C > 键的持续时间超过10S,遥控机器人复位,等待声控重起运行
(0318) rst_time=0;
0317 2422 CLR R2
0318 92200069 STS _rst_time,R2
(0319) goto remote_rst;
031A CFBC RJMP 0x02D7
031B CFBF RJMP 0x02DB
(0320) }
(0321) }
(0322) }
031C D132 RCALL pop_gset1
031D 9508 RET
(0323)
(0324) //自走车 机器人走四方形路线,遥控器调节行走路线
(0325)
(0326) void auto_car()
(0327) {
(0328) port_init();//PA,PB,PC,PD 初始化
_auto_car:
031E DD5A RCALL _port_init
(0329)
(0330) work_status = 0x51;//置对应的工作状态标志
031F E581 LDI R24,0x51
0320 9380007C STS _work_status,R24
(0331)
(0332) PORTA = 0x44;//0100,0100
0322 E484 LDI R24,0x44
0323 BB8B OUT 0x1B,R24
(0333)
(0334) delay_time1=22; //转弯时间 22*25ms = 550ms
0324 E186 LDI R24,0x16
0325 E090 LDI R25,0
0326 93900078 STS _delay_time1+1,R25
0328 93800077 STS _delay_time1,R24
(0335) delay_time2=48; //前行时间 48*25ms = 1200ms
032A E380 LDI R24,0x30
032B 93900076 STS _delay_time2+1,R25
032D 93800075 STS _delay_time2,R24
(0336)
(0337) mic_startup();//等待声控启动
032F DDF9 RCALL _mic_startup
(0338)
(0339) gzsl=0x11;t0_times=0;
0330 E181 LDI R24,0x11
0331 93800065 STS _gzsl,R24
0333 2422 CLR R2
0334 92200064 STS _t0_times,R2
(0340) CLI(); //disable all interrupts
0336 94F8 BCLR 7
(0341) timer0_init();
0337 DE68 RCALL _timer0_init
(0342)
(0343) MCUCR = 0x00;
0338 2422 CLR R2
0339 BE25 OUT 0x35,R2
(0344) GIMSK = 0x00;
033A BE2B OUT 0x3B,R2
(0345) TIMSK|=(1<<TOIE0);
033B B789 IN R24,0x39
033C 6082 ORI R24,2
033D BF89 OUT 0x39,R24
(0346) SEI(); //re-enable interrupts
033E 9478 BSET 7
(0347)
(0348) forward(); //前行
033F DD78 RCALL _forward
(0349) delay_ms(200);
0340 EC08 LDI R16,0xC8
0341 E010 LDI R17,0
0342 DD4E RCALL _delay_ms
0343 C001 RJMP 0x0345
(0350)
(0351) while(1)
(0352) {
(0353) music_car();
0344 DEC3 RCALL _music_car
0345 CFFE RJMP 0x0344
(0354) }
(0355) }
0346 9508 RET
(0356)
(0357) //cny_car 探测白底黑线,沿着黑线运动
(0358) void cny_car()
(0359) {
(0360) port_init(); //PA,PB,PC,PD 初始化
_cny_car:
0347 DD31 RCALL _port_init
(0361)
(0362) PORTA = 0xc3; //1100,0011
0348 EC83 LDI R24,0xC3
0349 BB8B OUT 0x1B,R24
(0363)
(0364) cny_car_start:
(0365) mic_startup(); //等待声控启动
034A DDDE RCALL _mic_startup
034B C03C RJMP 0x0388
(0366)
(0367) while(1)
(0368) {
(0369) sw_touch();
034C DD74 RCALL _sw_touch
(0370)
(0371) cny_in = PINC & 0xe0;
034D B383 IN R24,0x13
034E 7E80 ANDI R24,0xE0
034F 9380006B STS _cny_in,R24
(0372) if(cny_in == 0x00 || cny_in == 0x40 || cny_in == 0xa0)
0351 2388 TST R24
0352 F021 BEQ 0x0357
0353 3480 CPI R24,0x40
0354 F011 BEQ 0x0357
0355 3A80 CPI R24,0xA0
0356 F421 BNE 0x035B
(0373) {//前行
(0374) forward(); //前行
0357 DD60 RCALL _forward
(0375) cny_times = 0x00;
0358 2422 CLR R2
0359 9220006A STS _cny_times,R2
(0376) }
(0377) if(cny_in == 0x20 || cny_in == 0x60)
035B 9180006B LDS R24,_cny_in
035D 3280 CPI R24,0x20
035E F011 BEQ 0x0361
035F 3680 CPI R24,0x60
0360 F439 BNE 0x0368
(0378) {//慢速右转
(0379) turn_right_s(); //慢速右转
0361 DD47 RCALL _turn_right_s
(0380) delay_ms(cny_delayms);
0362 E302 LDI R16,0x32
0363 E010 LDI R17,0
0364 DD2C RCALL _delay_ms
(0381) cny_times = 0x00;
0365 2422 CLR R2
0366 9220006A STS _cny_times,R2
(0382) }
(0383) if(cny_in == 0x80 || cny_in == 0xc0)
0368 9180006B LDS R24,_cny_in
036A 3880 CPI R24,0x80
036B F011 BEQ 0x036E
036C 3C80 CPI R24,0xC0
036D F439 BNE 0x0375
(0384) {//慢速左转
(0385) turn_left_s(); //慢速左转
036E DD3F RCALL _turn_left_s
(0386) delay_ms(cny_delayms);
036F E302 LDI R16,0x32
0370 E010 LDI R17,0
0371 DD1F RCALL _delay_ms
(0387) cny_times = 0x00;
0372 2422 CLR R2
0373 9220006A STS _cny_times,R2
(0388) }
(0389) if(cny_in == 0xe0)
0375 9180006B LDS R24,_cny_in
0377 3E80 CPI R24,0xE0
0378 F479 BNE 0x0388
(0390) {//前行--探测多次都为 0xe0 ,停止运行
(0391) forward();
0379 DD3E RCALL _forward
(0392) cny_times++;
037A 9180006A LDS R24,_cny_times
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -