📄 sl3010.lst
字号:
0087 DFBD RCALL _delay_ms
(0176) PORTA = 0xAA;
0088 EA8A LDI R24,0xAA
0089 BB8B OUT 0x1B,R24
(0177) delay_ms(250);
008A EF0A LDI R16,0xFA
008B E010 LDI R17,0
008C DFB8 RCALL _delay_ms
008D CFF5 RJMP 0x0083
(0178) }
(0179) }
(0180)
(0181) turn_left(); //左转
008E DFC9 RCALL _turn_left
(0182) delay_ms(touch_time);
008F EF0A LDI R16,0xFA
0090 E010 LDI R17,0
0091 DFB3 RCALL _delay_ms
(0183) }
(0184)
(0185) sw_in = PINB & 0x70;
0092 B346 IN R20,0x16
0093 7740 ANDI R20,0x70
(0186) if(sw_in == 0x50)// 0b 0101,0000 尾部开关接触
0094 3540 CPI R20,0x50
0095 F441 BNE 0x009E
(0187) {//前行,左转
(0188) forward(); //前行
0096 DFD5 RCALL _forward
(0189) delay_ms(touch_time);
0097 EF0A LDI R16,0xFA
0098 E010 LDI R17,0
0099 DFAB RCALL _delay_ms
(0190)
(0191) turn_left(); //左转
009A DFBD RCALL _turn_left
(0192) delay_ms(touch_time);
009B EF0A LDI R16,0xFA
009C E010 LDI R17,0
009D DFA7 RCALL _delay_ms
(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,0x13
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 0x1B,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 0x1B,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,0x16
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 D073 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,0x13
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,0x16
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
(0285) void main()
(0286) {
(0287)
(0288) }
FILE: <library>
_main:
013F 9508 RET
pop_gset2:
0140 E0E2 LDI R30,2
0141 C004 RJMP pop
push_gset1:
0142 935A ST R21,-Y
0143 934A ST R20,-Y
0144 9508 RET
pop_gset1:
0145 E0E1 LDI R30,1
pop:
0146 9149 LD R20,Y+
0147 9159 LD R21,Y+
0148 FDE0 SBRC R30,0
0149 9508 RET
014A 9169 LD R22,Y+
014B 9179 LD R23,Y+
014C FDE1 SBRC R30,1
014D 9508 RET
014E 90A9 LD R10,Y+
014F 90B9 LD R11,Y+
0150 FDE2 SBRC R30,2
0151 9508 RET
0152 90C9 LD R12,Y+
0153 90D9 LD R13,Y+
0154 FDE3 SBRC R30,3
0155 9508 RET
0156 90E9 LD R14,Y+
0157 90F9 LD R15,Y+
0158 9508 RET
push_gset2:
0159 937A ST R23,-Y
015A 936A ST R22,-Y
015B CFE6 RJMP push_gset1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -