📄 cny_car.lst
字号:
(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 D0A9 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 91800061 LDS R24,_delay_time2
00F0 91900062 LDS R25,_delay_time2+1
00F2 97C2 SBIW R24,0x32
00F3 93900062 STS _delay_time2+1,R25
00F5 93800061 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 93900062 STS _delay_time2+1,R25
0100 93800061 STS _delay_time2,R24
(0265) break;
0102 C03B RJMP 0x013E
(0266) case 0x02: // < B >
(0267) delay_time1 = delay_time1 + 50;
0103 91800063 LDS R24,_delay_time1
0105 91900064 LDS R25,_delay_time1+1
0107 96C2 ADIW R24,0x32
0108 93900064 STS _delay_time1+1,R25
010A 93800063 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 93900064 STS _delay_time1+1,R25
0114 93800063 STS _delay_time1,R24
(0270) break;
0116 C027 RJMP 0x013E
(0271) case 0x08: // < C >
(0272) delay_time1 = delay_time1 - 50;
0117 91800063 LDS R24,_delay_time1
0119 91900064 LDS R25,_delay_time1+1
011B 97C2 SBIW R24,0x32
011C 93900064 STS _delay_time1+1,R25
011E 93800063 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 93900064 STS _delay_time1+1,R25
0128 93800063 STS _delay_time1,R24
(0275) break;
012A C013 RJMP 0x013E
(0276) case 0x01: // < D >
(0277) delay_time2 = delay_time2 + 50;
012B 91800061 LDS R24,_delay_time2
012D 91900062 LDS R25,_delay_time2+1
012F 96C2 ADIW R24,0x32
0130 93900062 STS _delay_time2+1,R25
0132 93800061 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 93900062 STS _delay_time2+1,R25
013C 93800061 STS _delay_time2,R24
(0280) break;
(0281) case 0x00: // 无按键
(0282) break;
(0283) }
(0284) }
013E 9508 RET
_cny_car:
cny_times --> R20
013F D038 RCALL push_gset1
FILE: E:\icc\iccavr\sl3010\cny_car\cny_car.c
(0001) //cny_car 探测白底黑线,沿着黑线运动
(0002) #include <io8515v.h>
(0003) #include <macros.h>
(0004) #include <sl3010.c>
(0005)
(0006) unsigned char cny_in;
(0007)
(0008) #define cny_delayms 50
(0009)
(0010) void cny_car()
(0011) {
(0012) unsigned char cny_times;
(0013) port_init();
0140 DEEC RCALL _port_init
(0014) start_up:
(0015) mic_startup();
0141 DF8C RCALL _mic_startup
0142 C02F RJMP 0x0172
(0016)
(0017) while(1)
(0018) {
(0019) // sw_touch();
(0020)
(0021) cny_in = PINC & 0xe0;
0143 B383 IN R24,P13
0144 7E80 ANDI R24,0xE0
0145 93800060 STS _cny_in,R24
(0022) if(cny_in == 0x00 || cny_in == 0x40 || cny_in == 0xa0)
0147 2388 TST R24
0148 F021 BEQ 0x014D
0149 3480 CPI R24,0x40
014A F011 BEQ 0x014D
014B 3A80 CPI R24,0xA0
014C F411 BNE 0x014F
(0023) {//前行
(0024) forward(); //前行
014D DF1E RCALL _forward
(0025) cny_times = 0x00;
014E 2744 CLR R20
(0026) }
(0027) if(cny_in == 0x20 || cny_in == 0x60)
014F 91800060 LDS R24,_cny_in
0151 3280 CPI R24,0x20
0152 F011 BEQ 0x0155
0153 3680 CPI R24,0x60
0154 F429 BNE 0x015A
(0028) {//慢速右转
(0029) turn_right_s(); //慢速右转
0155 DF07 RCALL _turn_right_s
(0030) delay_ms(cny_delayms);
0156 E302 LDI R16,0x32
0157 E010 LDI R17,0
0158 DEEC RCALL _delay_ms
(0031) cny_times = 0x00;
0159 2744 CLR R20
(0032) }
(0033) if(cny_in == 0x80 || cny_in == 0xc0)
015A 91800060 LDS R24,_cny_in
015C 3880 CPI R24,0x80
015D F011 BEQ 0x0160
015E 3C80 CPI R24,0xC0
015F F429 BNE 0x0165
(0034) {//慢速左转
(0035) turn_left_s(); //慢速左转
0160 DF01 RCALL _turn_left_s
(0036) delay_ms(cny_delayms);
0161 E302 LDI R16,0x32
0162 E010 LDI R17,0
0163 DEE1 RCALL _delay_ms
(0037) cny_times = 0x00;
0164 2744 CLR R20
(0038) }
(0039) if(cny_in == 0xe0)
0165 91800060 LDS R24,_cny_in
0167 3E80 CPI R24,0xE0
0168 F449 BNE 0x0172
(0040) {//前行--探测多次都为 0xe0 ,停止运行
(0041) forward();
0169 DF02 RCALL _forward
(0042) cny_times++;
016A 9543 INC R20
(0043) delay_ms(10);
016B E00A LDI R16,0xA
016C E010 LDI R17,0
016D DED7 RCALL _delay_ms
(0044) if(cny_times == 0x64)
016E 3644 CPI R20,0x64
016F F411 BNE 0x0172
(0045) {
(0046) stop(); //停止运动//熄灭指示灯
0170 DF00 RCALL _stop
(0047) goto start_up;
0171 CFCF RJMP 0x0141
0172 CFD0 RJMP 0x0143
(0048) }
(0049) }
(0050) }
(0051) }
0173 D007 RCALL pop_gset1
0174 9508 RET
(0052)
(0053) void main()
(0054) {
(0055) cny_car();
(0056) }
FILE: <library>
_main:
0175 CFC9 RJMP _cny_car
pop_gset2:
0176 E0E2 LDI R30,2
0177 C004 RJMP pop
push_gset1:
0178 935A ST R21,-Y
0179 934A ST R20,-Y
017A 9508 RET
pop_gset1:
017B E0E1 LDI R30,1
pop:
017C 9149 LD R20,Y+
017D 9159 LD R21,Y+
017E FDE0 SBRC R30,0
017F 9508 RET
0180 9169 LD R22,Y+
0181 9179 LD R23,Y+
0182 FDE1 SBRC R30,1
0183 9508 RET
0184 90A9 LD R10,Y+
0185 90B9 LD R11,Y+
0186 FDE2 SBRC R30,2
0187 9508 RET
0188 90C9 LD R12,Y+
0189 90D9 LD R13,Y+
018A FDE3 SBRC R30,3
018B 9508 RET
018C 90E9 LD R14,Y+
018D 90F9 LD R15,Y+
018E 9508 RET
push_gset2:
018F 937A ST R23,-Y
0190 936A ST R22,-Y
0191 CFE6 RJMP push_gset1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -