📄 auto_car2.lst
字号:
(0210) if(sw_in == 0x20)// 0b 0010,0000 两侧开关同时接触,停止运动
00B2 3240 CPI R20,0x20
00B3 F4C1 BNE 0x00CC
(0211) {
(0212) stop(); //停止运动,熄灭指示灯
00B4 DFBC RCALL _stop
(0213) delay_ms(touch_time*4);
00B5 EE08 LDI R16,0xE8
00B6 E013 LDI R17,3
00B7 DF8D RCALL _delay_ms
00B8 C012 RJMP 0x00CB
(0214) while(1)
(0215) {
(0216) sw_in = PINC & 0x10;
00B9 B343 IN R20,P13
00BA 7140 ANDI R20,0x10
(0217) if(sw_in == 0x00)
00BB F409 BNE 0x00BD
(0218) {break;}
00BC C00F RJMP 0x00CC
(0219) PORTA = 0x55;
00BD E585 LDI R24,0x55
00BE BB8B OUT P1B,R24
(0220) delay_ms(250);
00BF EF0A LDI R16,0xFA
00C0 E010 LDI R17,0
00C1 DF83 RCALL _delay_ms
(0221) PORTA = 0xAA;
00C2 EA8A LDI R24,0xAA
00C3 BB8B OUT P1B,R24
(0222) delay_ms(250);
00C4 EF0A LDI R16,0xFA
00C5 E010 LDI R17,0
00C6 DF7E RCALL _delay_ms
(0223) remote_in = PINB & 0x0f;
00C7 B366 IN R22,P16
00C8 706F ANDI R22,0xF
(0224) if(remote_in != 0x00)
00C9 F009 BEQ 0x00CB
(0225) {break;}
00CA C001 RJMP 0x00CC
00CB CFED RJMP 0x00B9
(0226) }
(0227) }
(0228) }
00CC D0E4 RCALL pop_gset2
00CD 9508 RET
(0229)
(0230) void mic_startup()
(0231) {//声控启动程序运行
_mic_startup:
mic_in --> R16
00CE C004 RJMP 0x00D3
(0232) unsigned char mic_in;
(0233)
(0234) while(1)//等待pc3(声控键)按键按下
(0235) { //无键按下等待
(0236) mic_in = PINC & 0x08; //pc2=0
00CF B303 IN R16,P13
00D0 7008 ANDI R16,0x8
(0237) if(mic_in == 0){break;}
00D1 F409 BNE 0x00D3
00D2 C001 RJMP 0x00D4
00D3 CFFB RJMP 0x00CF
(0238) }//有键按下运行下面的程序
(0239) }
00D4 9508 RET
(0240)
(0241) // #
(0242) // #
(0243) // #
(0244) // #
(0245) // # // delay_time1 转弯时间
(0246) // # # # # # // delay_time2 直行时间
(0247) // # X # //<A> 0x04 delay_time2-50
(0248) // # B C # //<B> 0x02 delay_time1+50
(0249) // # D A # //<C> 0x08 delay_time1-50
(0250) // # # //<D> 0x01 delay_time2+50
(0251) // # # # # // max: 2000 min: 200
(0252)
(0253) unsigned int delay_time1,delay_time2;
(0254)
(0255) void remote_auto_time()
(0256) {
(0257) unsigned char remote_in;
(0258) remote_in = PINB & 0x0F;
_remote_auto_time:
remote_in --> R16
00D5 B306 IN R16,P16
00D6 700F ANDI R16,0xF
(0259) switch (remote_in)
00D7 2711 CLR R17
00D8 3000 CPI R16,0
00D9 0701 CPC R16,R17
00DA F409 BNE 0x00DC
00DB C062 RJMP 0x013E
00DC 3001 CPI R16,1
00DD E0E0 LDI R30,0
00DE 071E CPC R17,R30
00DF F409 BNE 0x00E1
00E0 C04A RJMP 0x012B
00E1 3002 CPI R16,2
00E2 E0E0 LDI R30,0
00E3 071E CPC R17,R30
00E4 F0F1 BEQ 0x0103
00E5 3004 CPI R16,4
00E6 E0E0 LDI R30,0
00E7 071E CPC R17,R30
00E8 F029 BEQ 0x00EE
00E9 3008 CPI R16,0x8
00EA E0E0 LDI R30,0
00EB 071E CPC R17,R30
00EC F151 BEQ 0x0117
00ED C050 RJMP 0x013E
(0260) {//检测遥控器是否有键按下
(0261) case 0x04: // < A >
(0262) delay_time2 = delay_time2 - 50;
00EE 91800060 LDS R24,_delay_time2
00F0 91900061 LDS R25,_delay_time2+1
00F2 97C2 SBIW R24,0x32
00F3 93900061 STS _delay_time2+1,R25
00F5 93800060 STS _delay_time2,R24
(0263) if(delay_time2 == 50)
00F7 3382 CPI R24,0x32
00F8 E0E0 LDI R30,0
00F9 079E CPC R25,R30
00FA F009 BEQ 0x00FC
00FB C042 RJMP 0x013E
(0264) {delay_time2 = 100;}
00FC E684 LDI R24,0x64
00FD E090 LDI R25,0
00FE 93900061 STS _delay_time2+1,R25
0100 93800060 STS _delay_time2,R24
(0265) break;
0102 C03B RJMP 0x013E
(0266) case 0x02: // < B >
(0267) delay_time1 = delay_time1 + 50;
0103 91800062 LDS R24,_delay_time1
0105 91900063 LDS R25,_delay_time1+1
0107 96C2 ADIW R24,0x32
0108 93900063 STS _delay_time1+1,R25
010A 93800062 STS _delay_time1,R24
(0268) if(delay_time1 == 2050)
010C 3082 CPI R24,2
010D E0E8 LDI R30,0x8
010E 079E CPC R25,R30
010F F571 BNE 0x013E
(0269) {delay_time1 = 2000;}
0110 ED80 LDI R24,0xD0
0111 E097 LDI R25,7
0112 93900063 STS _delay_time1+1,R25
0114 93800062 STS _delay_time1,R24
(0270) break;
0116 C027 RJMP 0x013E
(0271) case 0x08: // < C >
(0272) delay_time1 = delay_time1 - 50;
0117 91800062 LDS R24,_delay_time1
0119 91900063 LDS R25,_delay_time1+1
011B 97C2 SBIW R24,0x32
011C 93900063 STS _delay_time1+1,R25
011E 93800062 STS _delay_time1,R24
(0273) if(delay_time1 == 50)
0120 3382 CPI R24,0x32
0121 E0E0 LDI R30,0
0122 079E CPC R25,R30
0123 F4D1 BNE 0x013E
(0274) {delay_time1 = 100;}
0124 E684 LDI R24,0x64
0125 E090 LDI R25,0
0126 93900063 STS _delay_time1+1,R25
0128 93800062 STS _delay_time1,R24
(0275) break;
012A C013 RJMP 0x013E
(0276) case 0x01: // < D >
(0277) delay_time2 = delay_time2 + 50;
012B 91800060 LDS R24,_delay_time2
012D 91900061 LDS R25,_delay_time2+1
012F 96C2 ADIW R24,0x32
0130 93900061 STS _delay_time2+1,R25
0132 93800060 STS _delay_time2,R24
(0278) if(delay_time2 == 2050)
0134 3082 CPI R24,2
0135 E0E8 LDI R30,0x8
0136 079E CPC R25,R30
0137 F431 BNE 0x013E
(0279) {delay_time2 = 2000;}
0138 ED80 LDI R24,0xD0
0139 E097 LDI R25,7
013A 93900061 STS _delay_time2+1,R25
013C 93800060 STS _delay_time2,R24
(0280) break;
(0281) case 0x00: // 无按键
(0282) break;
(0283) }
(0284) }
013E 9508 RET
FILE: E:\icc\iccavr\sl3010\auto_car2\atuo_car2.c
(0001) //自走车 机器人走螺旋线,由内往外绕
(0002)
(0003) #include <io8515v.h>
(0004) #include <macros.h>
(0005) #include <sl3010.c>
(0006)
(0007) unsigned int delay_time1,delay_time2;
(0008)
(0009) void auto_car2()
(0010) {
(0011) port_init();//PA,PB,PC,PD 初始化
_auto_car2:
013F DEED RCALL _port_init
(0012)
(0013) work_status = 0x51;//置对应的工作状态标志
0140 E581 LDI R24,0x51
0141 93800064 STS _work_status,R24
(0014)
(0015) delay_time1=300; //转弯时间
0143 E28C LDI R24,0x2C
0144 E091 LDI R25,1
0145 93900063 STS _delay_time1+1,R25
0147 93800062 STS _delay_time1,R24
(0016) delay_time2=100; //前行时间
0149 E684 LDI R24,0x64
014A E090 LDI R25,0
014B 93900061 STS _delay_time2+1,R25
014D 93800060 STS _delay_time2,R24
(0017)
(0018) mic_startup();//等待声控启动
014F DF7E RCALL _mic_startup
(0019)
(0020) forward(); //前行
0150 DF1B RCALL _forward
(0021) delay_ms(200);
0151 EC08 LDI R16,0xC8
0152 E010 LDI R17,0
0153 DEF1 RCALL _delay_ms
0154 C059 RJMP 0x01AE
(0022)
(0023) while(1)
(0024) {
(0025) sw_touch(); //检测轻触开关
0155 DF1F RCALL _sw_touch
(0026)
(0027) remote_auto_time(); //遥控器控制直行和转弯时间
0156 DF7E RCALL _remote_auto_time
(0028)
(0029) turn_right(); //右转
0157 DEFB RCALL _turn_right
(0030) delay_ms(delay_time1);
0158 91000062 LDS R16,_delay_time1
015A 91100063 LDS R17,_delay_time1+1
015C DEE8 RCALL _delay_ms
(0031)
(0032) forward(); //前行
015D DF0E RCALL _forward
(0033) delay_ms(delay_time2);
015E 91000060 LDS R16,_delay_time2
0160 91100061 LDS R17,_delay_time2+1
0162 DEE2 RCALL _delay_ms
(0034)
(0035) turn_right(); //右转
0163 DEEF RCALL _turn_right
(0036) delay_ms(delay_time1);
0164 91000062 LDS R16,_delay_time1
0166 91100063 LDS R17,_delay_time1+1
0168 DEDC RCALL _delay_ms
(0037)
(0038) forward(); //前行
0169 DF02 RCALL _forward
(0039) delay_ms(delay_time2);
016A 91000060 LDS R16,_delay_time2
016C 91100061 LDS R17,_delay_time2+1
016E DED6 RCALL _delay_ms
(0040)
(0041) turn_right(); //右转
016F DEE3 RCALL _turn_right
(0042) delay_ms(delay_time1);
0170 91000062 LDS R16,_delay_time1
0172 91100063 LDS R17,_delay_time1+1
0174 DED0 RCALL _delay_ms
(0043)
(0044) forward(); //前行
0175 DEF6 RCALL _forward
(0045) delay_ms(delay_time2);
0176 91000060 LDS R16,_delay_time2
0178 91100061 LDS R17,_delay_time2+1
017A DECA RCALL _delay_ms
(0046)
(0047) turn_right(); //右转
017B DED7 RCALL _turn_right
(0048) delay_ms(delay_time1);
017C 91000062 LDS R16,_delay_time1
017E 91100063 LDS R17,_delay_time1+1
0180 DEC4 RCALL _delay_ms
(0049)
(0050) forward(); //前行
0181 DEEA RCALL _forward
(0051) delay_ms(delay_time2);
0182 91000060 LDS R16,_delay_time2
0184 91100061 LDS R17,_delay_time2+1
0186 DEBE RCALL _delay_ms
(0052)
(0053) turn_right(); //右转
0187 DECB RCALL _turn_right
(0054) delay_ms(delay_time1);
0188 91000062 LDS R16,_delay_time1
018A 91100063 LDS R17,_delay_time1+1
018C DEB8 RCALL _delay_ms
(0055)
(0056) forward(); //前行
018D DEDE RCALL _forward
(0057) delay_ms(delay_time2);
018E 91000060 LDS R16,_delay_time2
0190 91100061 LDS R17,_delay_time2+1
0192 DEB2 RCALL _delay_ms
(0058)
(0059) turn_right(); //右转
0193 DEBF RCALL _turn_right
(0060) delay_ms(delay_time1);
0194 91000062 LDS R16,_delay_time1
0196 91100063 LDS R17,_delay_time1+1
0198 DEAC RCALL _delay_ms
(0061)
(0062) forward(); //前行
0199 DED2 RCALL _forward
(0063) delay_ms(delay_time2);
019A 91000060 LDS R16,_delay_time2
019C 91100061 LDS R17,_delay_time2+1
019E DEA6 RCALL _delay_ms
(0064)
(0065) delay_time2 = delay_time2 + 50;
019F 91800060 LDS R24,_delay_time2
01A1 91900061 LDS R25,_delay_time2+1
01A3 96C2 ADIW R24,0x32
01A4 93900061 STS _delay_time2+1,R25
01A6 93800060 STS _delay_time2,R24
(0066) if(delay_time2 == 800)
01A8 3280 CPI R24,0x20
01A9 E0E3 LDI R30,3
01AA 079E CPC R25,R30
01AB F411 BNE 0x01AE
(0067) {
(0068) stop();
01AC DEC4 RCALL _stop
(0069) while(1);
01AD CFFF RJMP 0x01AD
01AE CFA6 RJMP 0x0155
(0070) }
(0071) }
(0072) }
01AF 9508 RET
(0073)
(0074) void main()
(0075) {
(0076) auto_car2();
(0077) }
FILE: <library>
_main:
01B0 CF8E RJMP _auto_car2
pop_gset2:
01B1 E0E2 LDI R30,2
01B2 C004 RJMP pop
push_gset1:
01B3 935A ST R21,-Y
01B4 934A ST R20,-Y
01B5 9508 RET
pop_gset1:
01B6 E0E1 LDI R30,1
pop:
01B7 9149 LD R20,Y+
01B8 9159 LD R21,Y+
01B9 FDE0 SBRC R30,0
01BA 9508 RET
01BB 9169 LD R22,Y+
01BC 9179 LD R23,Y+
01BD FDE1 SBRC R30,1
01BE 9508 RET
01BF 90A9 LD R10,Y+
01C0 90B9 LD R11,Y+
01C1 FDE2 SBRC R30,2
01C2 9508 RET
01C3 90C9 LD R12,Y+
01C4 90D9 LD R13,Y+
01C5 FDE3 SBRC R30,3
01C6 9508 RET
01C7 90E9 LD R14,Y+
01C8 90F9 LD R15,Y+
01C9 9508 RET
push_gset2:
01CA 937A ST R23,-Y
01CB 936A ST R22,-Y
01CC CFE6 RJMP push_gset1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -