📄 sl3010_2.lst
字号:
04C2 706F ANDI R22,0xF
(0384) switch (remote_in)
04C3 2F46 MOV R20,R22
04C4 2755 CLR R21
04C5 3040 CPI R20,0
04C6 0745 CPC R20,R21
04C7 F0C9 BEQ 0x04E1
04C8 3041 CPI R20,1
04C9 E0E0 LDI R30,0
04CA 075E CPC R21,R30
04CB F099 BEQ 0x04DF
04CC 3042 CPI R20,2
04CD E0E0 LDI R30,0
04CE 075E CPC R21,R30
04CF F059 BEQ 0x04DB
04D0 3044 CPI R20,4
04D1 E0E0 LDI R30,0
04D2 075E CPC R21,R30
04D3 F029 BEQ 0x04D9
04D4 3048 CPI R20,0x8
04D5 E0E0 LDI R30,0
04D6 075E CPC R21,R30
04D7 F029 BEQ 0x04DD
04D8 C009 RJMP 0x04E2
(0385) {//检测遥控器是否有键按下
(0386) case 0x04: // < A >
(0387) turn_right(); //右转
04D9 DBC4 RCALL _turn_right
(0388) break;
04DA C007 RJMP 0x04E2
(0389) case 0x02: // < B >
(0390) backward(); //后退
04DB DBD6 RCALL _backward
(0391) break;
04DC C005 RJMP 0x04E2
(0392) case 0x08: // < C >
(0393) stop(); //停止运动
04DD DBDE RCALL _stop
(0394) break;
04DE C003 RJMP 0x04E2
(0395) case 0x01: // < D >
(0396) turn_left(); //左转
04DF DBC3 RCALL _turn_left
(0397) break;
04E0 C001 RJMP 0x04E2
(0398) case 0x00:
(0399) forward(); //前行
04E1 DBD5 RCALL _forward
(0400) break;
(0401) }
(0402) delay_ms(100);
04E2 E604 LDI R16,0x64
04E3 E010 LDI R17,0
04E4 DBAB RCALL _delay_ms
04E5 CFDA RJMP 0x04C0
(0403) }
(0404) }
04E6 D139 RCALL pop_gset2
04E7 9508 RET
(0405)
(0406) //自走车 机器人走四方形路线,遥控器调节行走路线
(0407) unsigned int delay_time1,delay_time2;
(0408)
(0409) void auto_car1()
(0410) {
(0411) port_init();//PA,PB,PC,PD 初始化
_auto_car1:
04E8 DB8F RCALL _port_init
(0412)
(0413) work_status = 0x51;//置对应的工作状态标志
04E9 E581 LDI R24,0x51
04EA 938000E8 STS _work_status,R24
(0414)
(0415) PORTA = 0x44;//0100,0100
04EC E484 LDI R24,0x44
04ED BB8B OUT 0x1B,R24
(0416)
(0417) delay_time1=510; //转弯时间
04EE EF8E LDI R24,0xFE
04EF E091 LDI R25,1
04F0 939000E4 STS _delay_time1+1,R25
04F2 938000E3 STS _delay_time1,R24
(0418) delay_time2=1200; //前行时间
04F4 EB80 LDI R24,0xB0
04F5 E094 LDI R25,4
04F6 939000E2 STS _delay_time2+1,R25
04F8 938000E1 STS _delay_time2,R24
(0419)
(0420) mic_startup();//等待声控启动
04FA DC2D RCALL _mic_startup
(0421)
(0422) forward(); //前行
04FB DBBB RCALL _forward
(0423) delay_ms(200);
04FC EC08 LDI R16,0xC8
04FD E010 LDI R17,0
04FE DB91 RCALL _delay_ms
04FF C01A RJMP 0x051A
(0424)
(0425) while(1)
(0426) {
(0427) sw_touch(); //检测轻触开关
0500 DBBF RCALL _sw_touch
(0428)
(0429) remote_auto_time(); //遥控器控制直行和转弯时间
0501 DC30 RCALL _remote_auto_time
(0430)
(0431) turn_right(); //右转
0502 DB9B RCALL _turn_right
(0432) delay_ms(delay_time1);
0503 910000E3 LDS R16,_delay_time1
0505 911000E4 LDS R17,_delay_time1+1
0507 DB88 RCALL _delay_ms
(0433)
(0434) forward(); //前行
0508 DBAE RCALL _forward
(0435) delay_ms(delay_time2);
0509 910000E1 LDS R16,_delay_time2
050B 911000E2 LDS R17,_delay_time2+1
050D DB82 RCALL _delay_ms
(0436)
(0437) turn_right(); //右转
050E DB8F RCALL _turn_right
(0438) delay_ms(delay_time1);
050F 910000E3 LDS R16,_delay_time1
0511 911000E4 LDS R17,_delay_time1+1
0513 DB7C RCALL _delay_ms
(0439)
(0440) forward(); //前行
0514 DBA2 RCALL _forward
(0441) delay_ms(delay_time2);
0515 910000E1 LDS R16,_delay_time2
0517 911000E2 LDS R17,_delay_time2+1
0519 DB76 RCALL _delay_ms
051A CFE5 RJMP 0x0500
(0442) }
(0443) }
051B 9508 RET
(0444)
(0445) //自走车 机器人走< 8 >字,遥控器调节行走路线
(0446) void auto_car8()
(0447) {
(0448) port_init(); //PA,PB,PC,PD 初始化
_auto_car8:
051C DB5B RCALL _port_init
(0449)
(0450) work_status = 0x50;//置对应的工作状态标志
051D E580 LDI R24,0x50
051E 938000E8 STS _work_status,R24
(0451)
(0452) PORTA = 0x88;//1000,1000
0520 E888 LDI R24,0x88
0521 BB8B OUT 0x1B,R24
(0453)
(0454) delay_time1=1000; //转弯时间
0522 EE88 LDI R24,0xE8
0523 E093 LDI R25,3
0524 939000E4 STS _delay_time1+1,R25
0526 938000E3 STS _delay_time1,R24
(0455) delay_time2=1200; //前行时间
0528 EB80 LDI R24,0xB0
0529 E094 LDI R25,4
052A 939000E2 STS _delay_time2+1,R25
052C 938000E1 STS _delay_time2,R24
(0456)
(0457) mic_startup(); //等待声控启动
052E DBF9 RCALL _mic_startup
(0458)
(0459) forward(); //前行
052F DB87 RCALL _forward
(0460) delay_ms(delay_time2);
0530 910000E1 LDS R16,_delay_time2
0532 911000E2 LDS R17,_delay_time2+1
0534 DB5B RCALL _delay_ms
0535 C01A RJMP 0x0550
(0461)
(0462) while(1)
(0463) {
(0464) sw_touch(); //检测轻触开关
0536 DB89 RCALL _sw_touch
(0465)
(0466) remote_auto_time(); //遥控器控制直行和转弯时间
0537 DBFA RCALL _remote_auto_time
(0467)
(0468) turn_right(); //右转
0538 DB65 RCALL _turn_right
(0469) delay_ms(delay_time1);
0539 910000E3 LDS R16,_delay_time1
053B 911000E4 LDS R17,_delay_time1+1
053D DB52 RCALL _delay_ms
(0470)
(0471) forward(); //前行
053E DB78 RCALL _forward
(0472) delay_ms(delay_time2);
053F 910000E1 LDS R16,_delay_time2
0541 911000E2 LDS R17,_delay_time2+1
0543 DB4C RCALL _delay_ms
(0473)
(0474) turn_left(); //左转
0544 DB5E RCALL _turn_left
(0475) delay_ms(delay_time1);
0545 910000E3 LDS R16,_delay_time1
0547 911000E4 LDS R17,_delay_time1+1
0549 DB46 RCALL _delay_ms
(0476)
(0477) forward(); //前行
054A DB6C RCALL _forward
(0478) delay_ms(delay_time2);
054B 910000E1 LDS R16,_delay_time2
054D 911000E2 LDS R17,_delay_time2+1
054F DB40 RCALL _delay_ms
0550 CFE5 RJMP 0x0536
(0479) }
(0480) }
0551 9508 RET
(0481)
(0482) //cny_car 探测白底黑线,沿着黑线运动
(0483) unsigned char cny_in;
(0484)
(0485) #define cny_delayms 50
(0486)
(0487) void cny_car()
(0488) {
(0489) unsigned char cny_times;
(0490) port_init();
_cny_car:
cny_times --> Y+1
0552 DB25 RCALL _port_init
(0491)
(0492) PORTA = 0xc3;//1100,0011
0553 EC83 LDI R24,0xC3
0554 BB8B OUT 0x1B,R24
(0493)
(0494) mic_startup();
0555 DBD2 RCALL _mic_startup
0556 C024 RJMP 0x057B
(0495)
(0496) while(1)
(0497) {
(0498) sw_touch();
0557 DB68 RCALL _sw_touch
(0499)
(0500) cny_in = PINC & 0xe0;
0558 B383 IN R24,0x13
0559 7E80 ANDI R24,0xE0
055A 938000D9 STS _cny_in,R24
(0501) if(cny_in == 0x00 || cny_in == 0x40 || cny_in == 0xa0)
055C 2388 TST R24
055D F021 BEQ 0x0562
055E 3480 CPI R24,0x40
055F F011 BEQ 0x0562
0560 3A80 CPI R24,0xA0
0561 F409 BNE 0x0563
(0502) {//前行
(0503) forward(); //前行
0562 DB54 RCALL _forward
(0504) }
(0505) if(cny_in == 0x20 || cny_in == 0x60)
0563 918000D9 LDS R24,_cny_in
0565 3280 CPI R24,0x20
0566 F011 BEQ 0x0569
0567 3680 CPI R24,0x60
0568 F421 BNE 0x056D
(0506) {//慢速右转
(0507) turn_right_s(); //慢速右转
0569 DB3E RCALL _turn_right_s
(0508) delay_ms(cny_delayms);
056A E302 LDI R16,0x32
056B E010 LDI R17,0
056C DB23 RCALL _delay_ms
(0509) }
(0510) if(cny_in == 0x80 || cny_in == 0xc0)
056D 918000D9 LDS R24,_cny_in
056F 3880 CPI R24,0x80
0570 F011 BEQ 0x0573
0571 3C80 CPI R24,0xC0
0572 F421 BNE 0x0577
(0511) {//慢速左转
(0512) turn_left_s(); //慢速左转
0573 DB39 RCALL _turn_left_s
(0513) delay_ms(cny_delayms);
0574 E302 LDI R16,0x32
0575 E010 LDI R17,0
0576 DB19 RCALL _delay_ms
(0514) }
(0515) if(cny_in == 0xe0)
0577 918000D9 LDS R24,_cny_in
0579 3E80 CPI R24,0xE0
057A F401 BNE 0x057B
057B CFDB RJMP 0x0557
(0516) {//前行--探测多次都为 0xe0 ,停止运行
(0517) // stop(); //停止运动//熄灭指示灯
(0518) /*
(0519) PORTD = 0xA0; //前行//1010 0000
(0520) PORTA = 0xC3; //1100,0011
(0521) cny_times = 0;
(0522) delay_ms(cny_delayms);
(0523) while(1)
(0524) {
(0525) cny_in = PINC & 0xe0;
(0526) if(cny_in != 0xe0)
(0527) {
(0528) break;
(0529) }
(0530) if(cny_in == 0xe0)
(0531) {
(0532) cny_times++;
(0533) if(cny_times == 5)
(0534) {
(0535) while(1)
(0536) {
(0537) PORTD = 0xff; //停止运动
(0538) PORTA = 0xff; //熄灭指示灯
(0539) }
(0540) }
(0541) }
(0542) }
(0543) */
(0544) }
(0545) }
(0546) }
057C 9508 RET
(0547)
(0548) //追光机器人
(0549) unsigned char cds;
(0550) #define light_delay 100
(0551) void trace_light()
(0552) {
(0553) port_init(); //PA,PB,PC,PD 初始化
_trace_light:
057D DAFA RCALL _port_init
(0554)
(0555) PORTA = 0xbd;//1011,1101
057E EB8D LDI R24,0xBD
057F BB8B OUT 0x1B,R24
(0556)
(0557) work_status = 0x70; //置对应的工作状态标志
0580 E780 LDI R24,0x70
0581 938000E8 STS _work_status,R24
(0558)
(0559) mic_startup(); //等待声控启动
0583 DBA4 RCALL _mic_startup
0584 C025 RJMP 0x05AA
(0560)
(0561) while(1)
(0562) {
(0563) sw_touch(); //检测轻触开关
0585 DB3A RCALL _sw_touch
(0564)
(0565) cds = PINC & 0x06; //0b0000,0110
0586 B383 IN R24,0x13
0587 7086 ANDI R24,6
0588 938000D8 STS _cds,R24
(0566)
(0567) if(cds == 0x00) //左右两侧都感测到光
058A 2388 TST R24
058B F421 BNE 0x0590
(0568) {//直行
(0569) forward();
058C DB2A RCALL _forward
(0570) delay_ms(light_delay); //延时
058D E604 LDI R16,0x64
058E E010 LDI R17,0
058F DB00 RCALL _delay_ms
(0571) }
(0572) if(cds == 0x02) //0b0000,0010___pc2(右侧)感测到光
0590 918000D8 LDS R24,_cds
0592 3082 CPI R24,2
0593 F421 BNE 0x0598
(0573) {//慢速右转
(0574) turn_right_s();
0594 DB13 RCALL _turn_right_s
(0575) delay_ms(light_delay); //延时
0595 E604 LDI R16,0x64
0596 E010 LDI R17,0
0597 DAF8 RCALL _delay_ms
(0576) }
(0577) if(cds == 0x04) //0b0000,0100___pc1(左侧)感测到光
0598 918000D8 LDS R24,_cds
059A 3084 CPI R24,4
059B F421 BNE 0x05A0
(0578) {//慢速左转
(0579) turn_left_s();
059C DB10 RCALL _turn_left_s
(0580) delay_ms(light_delay); //延时
059D E604 LDI R16,0x64
059E E010 LDI R17,0
059F DAF0 RCALL _delay_ms
(0581) }
(0582) if(cds == 0x06)
05A0 918000D8 LDS R24,_cds
05A2 3086 CPI R24,6
05A3 F431 BNE 0x05AA
(0583) {//停止动作
(0584) PORTA = 0x55; //延时后停止动作,等待光照重新动作
05A4 E585 LDI R24,0x55
05A5 BB8B OUT 0x1B,R24
(0585) delay_ms(light_delay*2);
05A6 EC08 LDI R16,0xC8
05A7 E010 LDI R17,0
0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -