📄 text1.lst
字号:
(0217) delay_ms(touch_time*4);
00D4 EE08 LDI R16,0xE8
00D5 E013 LDI R17,3
00D6 DF8B RCALL _delay_ms
00D7 C019 RJMP 0x00F1
(0218) while(1)
(0219) {
(0220) sw_in = PINC & 0x10;
00D8 B343 IN R20,0x13
00D9 7140 ANDI R20,0x10
(0221) if(sw_in == 0x00)
00DA F409 BNE 0x00DC
(0222) {break;}//首部开关接触继续启动运动
00DB C016 RJMP 0x00F2
(0223) PORTA = 0x55;//停止不运动时pa口指示灯流动闪烁
00DC E585 LDI R24,0x55
00DD BB8B OUT 0x1B,R24
(0224) delay_ms(250);
00DE EF0A LDI R16,0xFA
00DF E010 LDI R17,0
00E0 DF81 RCALL _delay_ms
(0225) PORTA = 0xAA;
00E1 EA8A LDI R24,0xAA
00E2 BB8B OUT 0x1B,R24
(0226) delay_ms(250);
00E3 EF0A LDI R16,0xFA
00E4 E010 LDI R17,0
00E5 DF7C RCALL _delay_ms
(0227) remote_in = PINB & 0xf0;//遥控器控制继续运动
00E6 B366 IN R22,0x16
00E7 7F60 ANDI R22,0xF0
(0228) if(remote_in == 0x10 || remote_in == 0x20 || remote_in == 0x40 || remote_in == 0x80)
00E8 3160 CPI R22,0x10
00E9 F031 BEQ 0x00F0
00EA 3260 CPI R22,0x20
00EB F021 BEQ 0x00F0
00EC 3460 CPI R22,0x40
00ED F011 BEQ 0x00F0
00EE 3860 CPI R22,0x80
00EF F409 BNE 0x00F1
(0229) {break;}
00F0 C001 RJMP 0x00F2
00F1 CFE6 RJMP 0x00D8
(0230) }
(0231) }
00F2 940E01C9 CALL pop_gset2
00F4 9508 RET
(0232) }
(0233)
(0234) void mic_startup()
(0235) {//声控启动程序运行
_mic_startup:
mic_in --> R16
00F5 C004 RJMP 0x00FA
(0236) unsigned char mic_in;
(0237) while(1)//等待PB2按键按下
(0238) { //无键按下等待
(0239) mic_in=PINB & 0x04; //pb2=0
00F6 B306 IN R16,0x16
00F7 7004 ANDI R16,4
(0240) if(mic_in==0){break;}
00F8 F409 BNE 0x00FA
00F9 C001 RJMP 0x00FB
00FA CFFB RJMP 0x00F6
00FB 9508 RET
(0241) }//有键按下运行下面的程序
(0242) }
(0243)
(0244) // #
(0245) // #
(0246) // #
(0247) // #
(0248) // # // delay_time1 转弯时间
(0249) // # # # # # // delay_time2 直行时间
(0250) // # X # //<A> 0x40 delay_time2-50
(0251) // # B C # //<B> 0x20 delay_time1+50
(0252) // # D A # //<C> 0x80 delay_time1-50
(0253) // # # //<D> 0x10 delay_time2+50
(0254) // # # # # // max: 2000 min: 200
(0255)
(0256) unsigned int delay_time1,delay_time2;
(0257)
(0258) void remote_auto_time()
(0259) {
(0260) unsigned char remote_in;
(0261) remote_in = PINB & 0xF0;
_remote_auto_time:
remote_in --> R16
00FC B306 IN R16,0x16
00FD 7F00 ANDI R16,0xF0
(0262) switch (remote_in)
00FE 2711 CLR R17
00FF 3200 CPI R16,0x20
0100 E0E0 LDI R30,0
0101 071E CPC R17,R30
0102 F119 BEQ 0x0126
0103 E280 LDI R24,0x20
0104 E090 LDI R25,0
0105 1780 CP R24,R16
0106 0791 CPC R25,R17
0107 F07C BLT 0x0117
0108 3000 CPI R16,0
0109 0701 CPC R16,R17
010A F409 BNE 0x010C
010B C06A RJMP 0x0176
010C 3000 CPI R16,0
010D E0E0 LDI R30,0
010E 071E CPC R17,R30
010F F40C BGE 0x0111
0110 C065 RJMP 0x0176
0111 3100 CPI R16,0x10
0112 E0E0 LDI R30,0
0113 071E CPC R17,R30
0114 F409 BNE 0x0116
0115 C039 RJMP 0x014F
0116 C05F RJMP 0x0176
0117 3400 CPI R16,0x40
0118 E0E0 LDI R30,0
0119 071E CPC R17,R30
011A F101 BEQ 0x013B
011B 3400 CPI R16,0x40
011C E0E0 LDI R30,0
011D 071E CPC R17,R30
011E F40C BGE 0x0120
011F C056 RJMP 0x0176
0120 3800 CPI R16,0x80
0121 E0E0 LDI R30,0
0122 071E CPC R17,R30
0123 F409 BNE 0x0125
0124 C03E RJMP 0x0163
0125 C050 RJMP 0x0176
(0263) {//检测遥控器是否有键按下
(0264) case 0x20: // < A >
(0265) delay_time2 = delay_time2 - 50;
0126 91800061 LDS R24,delay_time2
0128 91900062 LDS R25,delay_time2+1
012A 97C2 SBIW R24,0x32
012B 93900062 STS delay_time2+1,R25
012D 93800061 STS delay_time2,R24
(0266) if(delay_time2 == 50)
012F 3382 CPI R24,0x32
0130 E0E0 LDI R30,0
0131 079E CPC R25,R30
0132 F009 BEQ 0x0134
0133 C042 RJMP 0x0176
(0267) {delay_time2 = 100;}
0134 E684 LDI R24,0x64
0135 E090 LDI R25,0
0136 93900062 STS delay_time2+1,R25
0138 93800061 STS delay_time2,R24
(0268) break;
013A C03B RJMP 0x0176
(0269) case 0x40: // < B >
(0270) delay_time1 = delay_time1 + 50;
013B 91800063 LDS R24,delay_time1
013D 91900064 LDS R25,delay_time1+1
013F 96C2 ADIW R24,0x32
0140 93900064 STS delay_time1+1,R25
0142 93800063 STS delay_time1,R24
(0271) if(delay_time1 == 2050)
0144 3082 CPI R24,2
0145 E0E8 LDI R30,0x8
0146 079E CPC R25,R30
0147 F571 BNE 0x0176
(0272) {delay_time1 = 2000;}
0148 ED80 LDI R24,0xD0
0149 E097 LDI R25,7
014A 93900064 STS delay_time1+1,R25
014C 93800063 STS delay_time1,R24
(0273) break;
014E C027 RJMP 0x0176
(0274) case 0x10: // < C >
(0275) delay_time1 = delay_time1 - 50;
014F 91800063 LDS R24,delay_time1
0151 91900064 LDS R25,delay_time1+1
0153 97C2 SBIW R24,0x32
0154 93900064 STS delay_time1+1,R25
0156 93800063 STS delay_time1,R24
(0276) if(delay_time1 == 50)
0158 3382 CPI R24,0x32
0159 E0E0 LDI R30,0
015A 079E CPC R25,R30
015B F4D1 BNE 0x0176
(0277) {delay_time1 = 100;}
015C E684 LDI R24,0x64
015D E090 LDI R25,0
015E 93900064 STS delay_time1+1,R25
0160 93800063 STS delay_time1,R24
(0278) break;
0162 C013 RJMP 0x0176
(0279) case 0x80: // < D >
(0280) delay_time2 = delay_time2 + 50;
0163 91800061 LDS R24,delay_time2
0165 91900062 LDS R25,delay_time2+1
0167 96C2 ADIW R24,0x32
0168 93900062 STS delay_time2+1,R25
016A 93800061 STS delay_time2,R24
(0281) if(delay_time2 == 2050)
016C 3082 CPI R24,2
016D E0E8 LDI R30,0x8
016E 079E CPC R25,R30
016F F431 BNE 0x0176
(0282) {delay_time2 = 2000;}
0170 ED80 LDI R24,0xD0
0171 E097 LDI R25,7
0172 93900062 STS delay_time2+1,R25
0174 93800061 STS delay_time2,R24
(0283) break;
(0284) case 0x00: // 无按键
(0285) break;
0176 9508 RET
_remote_car:
0177 940E01D4 CALL push_gset1
FILE: D:\afish\工作内容\DIY-08-16\M16\DIY-08-16\遥控车\remote.c
(0001) /*******************************************/
(0002) /* 广州天河双龙电子公司
(0003) http://www.sl.com.cn
(0004)
(0005)
(0006)
(0007) 功能:
(0008) 遥控机器人
(0009) 通过无线遥控调节机器人行走路线
(0010) 按下A键:机器人右转
(0011) 按下B键:机器人后退
(0012) 按下C键:停止运动
(0013) 按下D键:机器人左转
(0014) */
(0015) /********************************************/
(0016) #include <iom16v.h>
(0017) #include <macros.h>
(0018) #include <diy0206.c>
(0019)
(0020) unsigned char remote_in;
(0021)
(0022) void remote_car()
(0023) {//遥控车程序
(0024)
(0025) port_init();//调用端口初始化函数
0179 DED1 RCALL _port_init
(0026) PORTA = 0xFF;
017A EF8F LDI R24,0xFF
017B BB8B OUT 0x1B,R24
(0027) mic_startup();//等待声控启动函数
017C DF78 RCALL _mic_startup
(0028) PORTA = 0x00;
017D 2422 CLR R2
017E BA2B OUT 0x1B,R2
(0029) delay_ms(20);
017F E104 LDI R16,0x14
0180 E010 LDI R17,0
0181 DEE0 RCALL _delay_ms
0182 C040 RJMP 0x01C3
(0030) while(1)
(0031) {
(0032) remote_in = PINB & 0xF0;
0183 B386 IN R24,0x16
0184 7F80 ANDI R24,0xF0
0185 93800060 STS remote_in,R24
(0033) switch (remote_in)
0187 2F48 MOV R20,R24
0188 2755 CLR R21
0189 3240 CPI R20,0x20
018A E0E0 LDI R30,0
018B 075E CPC R21,R30
018C F119 BEQ 0x01B0
018D E280 LDI R24,0x20
018E E090 LDI R25,0
018F 1784 CP R24,R20
0190 0795 CPC R25,R21
0191 F064 BLT 0x019E
0192 3040 CPI R20,0
0193 0745 CPC R20,R21
0194 F0B1 BEQ 0x01AB
0195 3040 CPI R20,0
0196 E0E0 LDI R30,0
0197 075E CPC R21,R30
0198 F154 BLT 0x01C3
0199 3140 CPI R20,0x10
019A E0E0 LDI R30,0
019B 075E CPC R21,R30
019C F0E9 BEQ 0x01BA
019D C025 RJMP 0x01C3
019E 3440 CPI R20,0x40
019F E0E0 LDI R30,0
01A0 075E CPC R21,R30
01A1 F099 BEQ 0x01B5
01A2 3440 CPI R20,0x40
01A3 E0E0 LDI R30,0
01A4 075E CPC R21,R30
01A5 F0EC BLT 0x01C3
01A6 3840 CPI R20,0x80
01A7 E0E0 LDI R30,0
01A8 075E CPC R21,R30
01A9 F0A9 BEQ 0x01BF
01AA C018 RJMP 0x01C3
(0034) {//检测遥控器是否有键按下
(0035) case 0x00:
(0036) forward(); //前行
01AB DEDE RCALL _forward
(0037) delay_ms(10);
01AC E00A LDI R16,0xA
01AD E010 LDI R17,0
01AE DEB3 RCALL _delay_ms
(0038) break;
01AF C013 RJMP 0x01C3
(0039) case 0x20: // < A >
(0040) turn_right(); //右转
01B0 DEC0 RCALL _turn_right
(0041) delay_ms(10);
01B1 E00A LDI R16,0xA
01B2 E010 LDI R17,0
01B3 DEAE RCALL _delay_ms
(0042) break;
01B4 C00E RJMP 0x01C3
(0043) case 0x40: // < B >
(0044) backward(); //后退
01B5 DECF RCALL _backward
(0045) delay_ms(10);
01B6 E00A LDI R16,0xA
01B7 E010 LDI R17,0
01B8 DEA9 RCALL _delay_ms
(0046) break;
01B9 C009 RJMP 0x01C3
(0047) case 0x10: // < C >
(0048) stop(); //停止运动
01BA DED4 RCALL _stop
(0049) delay_ms(10);
01BB E00A LDI R16,0xA
01BC E010 LDI R17,0
01BD DEA4 RCALL _delay_ms
(0050) break;
01BE C004 RJMP 0x01C3
(0051) case 0x80: // < D >
(0052) turn_left(); //左转
01BF DEB6 RCALL _turn_left
(0053) delay_ms(10);
01C0 E00A LDI R16,0xA
01C1 E010 LDI R17,0
01C2 DE9F RCALL _delay_ms
01C3 CFBF RJMP 0x0183
01C4 940E01D7 CALL pop_gset1
01C6 9508 RET
(0054) break;
(0055) }
(0056)
(0057)
(0058) }
(0059) }
(0060)
(0061) void main()
(0062) {
(0063) remote_car();
FILE: <library>
_main:
01C7 DFAF RCALL _remote_car
01C8 9508 RET
pop_gset2:
01C9 E0E2 LDI R30,2
01CA 940C01D8 JMP pop
push_gset5:
01CC 92FA ST R15,-Y
01CD 92EA ST R14,-Y
push_gset4:
01CE 92DA ST R13,-Y
01CF 92CA ST R12,-Y
push_gset3:
01D0 92BA ST R11,-Y
01D1 92AA ST R10,-Y
push_gset2:
01D2 937A ST R23,-Y
01D3 936A ST R22,-Y
push_gset1:
01D4 935A ST R21,-Y
01D5 934A ST R20,-Y
01D6 9508 RET
pop_gset1:
01D7 E0E1 LDI R30,1
pop:
01D8 9149 LD R20,Y+
01D9 9159 LD R21,Y+
01DA FDE0 SBRC R30,0
01DB 9508 RET
01DC 9169 LD R22,Y+
01DD 9179 LD R23,Y+
01DE FDE1 SBRC R30,1
01DF 9508 RET
01E0 90A9 LD R10,Y+
01E1 90B9 LD R11,Y+
01E2 FDE2 SBRC R30,2
01E3 9508 RET
01E4 90C9 LD R12,Y+
01E5 90D9 LD R13,Y+
01E6 FDE3 SBRC R30,3
01E7 9508 RET
01E8 90E9 LD R14,Y+
01E9 90F9 LD R15,Y+
01EA 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -