📄 auto_car8.lst
字号:
(0193) }
(0194) if(sw_in == 0x30)// 0b 0011,0000 右侧开关接触
009E 3340 CPI R20,0x30
009F F441 BNE 0x00A8
(0195) {//后退,左转
(0196) backward(); //后退
00A0 DFC6 RCALL _backward
(0197) delay_ms(touch_time);
00A1 EF0A LDI R16,0xFA
00A2 E010 LDI R17,0
00A3 DFA1 RCALL _delay_ms
(0198)
(0199) turn_left(); //左转
00A4 DFB3 RCALL _turn_left
(0200) delay_ms(touch_time);
00A5 EF0A LDI R16,0xFA
00A6 E010 LDI R17,0
00A7 DF9D RCALL _delay_ms
(0201) }
(0202) if(sw_in == 0x60)// 0b 0110,0000 左侧开关接触
00A8 3640 CPI R20,0x60
00A9 F441 BNE 0x00B2
(0203) {//后退,左转
(0204) backward(); //后退
00AA DFBC RCALL _backward
(0205) delay_ms(touch_time);
00AB EF0A LDI R16,0xFA
00AC E010 LDI R17,0
00AD DF97 RCALL _delay_ms
(0206)
(0207) turn_left(); //左转
00AE DFA9 RCALL _turn_left
(0208) delay_ms(touch_time);
00AF EF0A LDI R16,0xFA
00B0 E010 LDI R17,0
00B1 DF93 RCALL _delay_ms
(0209) }
(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 D0A7 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_car8\auto_car8.c
(0001) //自走车 机器人走< 8 >字,遥控器调节行走路线
(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_car8()
(0010) {
(0011) port_init(); //PA,PB,PC,PD 初始化
_auto_car8:
013F DEED RCALL _port_init
(0012)
(0013) work_status = 0x50;//置对应的工作状态标志
0140 E580 LDI R24,0x50
0141 93800064 STS _work_status,R24
(0014)
(0015) delay_time1=1000; //转弯时间
0143 EE88 LDI R24,0xE8
0144 E093 LDI R25,3
0145 93900063 STS _delay_time1+1,R25
0147 93800062 STS _delay_time1,R24
(0016) delay_time2=1200; //前行时间
0149 EB80 LDI R24,0xB0
014A E094 LDI R25,4
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(delay_time2);
0151 91000060 LDS R16,_delay_time2
0153 91100061 LDS R17,_delay_time2+1
0155 DEEF RCALL _delay_ms
0156 C01A RJMP 0x0171
(0022)
(0023) while(1)
(0024) {
(0025) sw_touch(); //检测轻触开关
0157 DF1D RCALL _sw_touch
(0026)
(0027) remote_auto_time(); //遥控器控制直行和转弯时间
0158 DF7C RCALL _remote_auto_time
(0028)
(0029) turn_right(); //右转
0159 DEF9 RCALL _turn_right
(0030) delay_ms(delay_time1);
015A 91000062 LDS R16,_delay_time1
015C 91100063 LDS R17,_delay_time1+1
015E DEE6 RCALL _delay_ms
(0031)
(0032) forward(); //前行
015F DF0C RCALL _forward
(0033) delay_ms(delay_time2);
0160 91000060 LDS R16,_delay_time2
0162 91100061 LDS R17,_delay_time2+1
0164 DEE0 RCALL _delay_ms
(0034)
(0035) turn_left(); //左转
0165 DEF2 RCALL _turn_left
(0036) delay_ms(delay_time1);
0166 91000062 LDS R16,_delay_time1
0168 91100063 LDS R17,_delay_time1+1
016A DEDA RCALL _delay_ms
(0037)
(0038) forward(); //前行
016B DF00 RCALL _forward
(0039) delay_ms(delay_time2);
016C 91000060 LDS R16,_delay_time2
016E 91100061 LDS R17,_delay_time2+1
0170 DED4 RCALL _delay_ms
0171 CFE5 RJMP 0x0157
(0040) }
(0041) }
0172 9508 RET
(0042)
(0043) void main()
(0044) {
(0045) auto_car8();
(0046) }
FILE: <library>
_main:
0173 CFCB RJMP _auto_car8
pop_gset2:
0174 E0E2 LDI R30,2
0175 C004 RJMP pop
push_gset1:
0176 935A ST R21,-Y
0177 934A ST R20,-Y
0178 9508 RET
pop_gset1:
0179 E0E1 LDI R30,1
pop:
017A 9149 LD R20,Y+
017B 9159 LD R21,Y+
017C FDE0 SBRC R30,0
017D 9508 RET
017E 9169 LD R22,Y+
017F 9179 LD R23,Y+
0180 FDE1 SBRC R30,1
0181 9508 RET
0182 90A9 LD R10,Y+
0183 90B9 LD R11,Y+
0184 FDE2 SBRC R30,2
0185 9508 RET
0186 90C9 LD R12,Y+
0187 90D9 LD R13,Y+
0188 FDE3 SBRC R30,3
0189 9508 RET
018A 90E9 LD R14,Y+
018B 90F9 LD R15,Y+
018C 9508 RET
push_gset2:
018D 937A ST R23,-Y
018E 936A ST R22,-Y
018F CFE6 RJMP push_gset1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -