📄 text1.lst
字号:
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 91800064 LDS R24,delay_time2
0128 91900065 LDS R25,delay_time2+1
012A 97C2 SBIW R24,0x32
012B 93900065 STS delay_time2+1,R25
012D 93800064 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 93900065 STS delay_time2+1,R25
0138 93800064 STS delay_time2,R24
(0268) break;
013A C03B RJMP 0x0176
(0269) case 0x40: // < B >
(0270) delay_time1 = delay_time1 + 50;
013B 91800066 LDS R24,delay_time1
013D 91900067 LDS R25,delay_time1+1
013F 96C2 ADIW R24,0x32
0140 93900067 STS delay_time1+1,R25
0142 93800066 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 93900067 STS delay_time1+1,R25
014C 93800066 STS delay_time1,R24
(0273) break;
014E C027 RJMP 0x0176
(0274) case 0x10: // < C >
(0275) delay_time1 = delay_time1 - 50;
014F 91800066 LDS R24,delay_time1
0151 91900067 LDS R25,delay_time1+1
0153 97C2 SBIW R24,0x32
0154 93900067 STS delay_time1+1,R25
0156 93800066 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 93900067 STS delay_time1+1,R25
0160 93800066 STS delay_time1,R24
(0278) break;
0162 C013 RJMP 0x0176
(0279) case 0x80: // < D >
(0280) delay_time2 = delay_time2 + 50;
0163 91800064 LDS R24,delay_time2
0165 91900065 LDS R25,delay_time2+1
0167 96C2 ADIW R24,0x32
0168 93900065 STS delay_time2+1,R25
016A 93800064 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 93900065 STS delay_time2+1,R25
0174 93800064 STS delay_time2,R24
(0283) break;
(0284) case 0x00: // 无按键
(0285) break;
0176 9508 RET
_xuanya_car:
0177 940E0214 CALL push_gset1
FILE: D:\afish\工作内容\DIY-08-16\M16\DIY-08-16\避悬崖障碍\xuanya.c
(0001) /************功能介绍************************
(0002) 广州双龙电子
(0003) WWW.SL.COM.CN
(0004) Chip type : ATMEGA16
(0005) Clock frequency : 8MHz
(0006) ********************************************
(0007)
(0008) 自走车,机器人向前方行走,实现自动避悬崖障碍
(0009) PB2声控启动
(0010) 前方碰到障碍,机器人后退,左转,前进
(0011) 左方碰到障碍,机器人后退,右转,前进
(0012) 右方碰到障碍,机器人后退,左转,前进
(0013) 前方碰到悬涯,机器人后退,左转,前进
(0014) 左方碰到悬涯,机器人后退,右转,前进
(0015) 右方碰到悬涯,机器人后退,左转,前进
(0016) 左侧和右侧同时碰到悬涯,机器人停止待命,同时PA口的LED流水灯显示,
(0017) 电机驱动信号 led灯指示电机状态
(0018) PD = 0xA0;//前行 //1010 0000//P0 = 0xC3;//1100,0011
(0019) PD = 0x60;//快速左转//0110 0000//P0 = 0x33;//0011,0011
(0020) PD = 0x20;//慢速左转//0010 0000//P0 = 0xF3;//1111,0011
(0021) PD = 0x90;//快速右转//1001 0000//P0 = 0xCC;//1100,1100
(0022) PD = 0x80;//慢速右转//1000 0000//P0 = 0xCF;//1100,1111
(0023) PD = 0x50;//后退 //0101 0000//P0 = 0x3C;//0011,1100
(0024)
(0025) ********************************************/
(0026) #include <iom16v.h>
(0027) #include <macros.h>
(0028) #define xuanya_delayms 300
(0029) #include <diy0206.c>
(0030)
(0031)
(0032) unsigned char pa,pb,pc,pd;
(0033)
(0034) void xuanya_car(void)
(0035) {
(0036) port_init(); //PA,PB,PC,PD 初始化
0179 DED1 RCALL _port_init
(0037)
(0038) mic_startup(); //等待声控启动
017A DF7A RCALL _mic_startup
017B C087 RJMP 0x0203
(0039)
(0040) while(1)
(0041) {//左(pc7) 中(pc6) 右(pc5)
(0042)
(0043) switch(PINB&0x0b)
017C B346 IN R20,0x16
017D 2755 CLR R21
017E 704B ANDI R20,0xB
017F 7050 ANDI R21,0
0180 3042 CPI R20,2
0181 E0E0 LDI R30,0
0182 075E CPC R21,R30
0183 F161 BEQ 0x01B0
0184 3043 CPI R20,3
0185 E0E0 LDI R30,0
0186 075E CPC R21,R30
0187 F0F9 BEQ 0x01A7
0188 3042 CPI R20,2
0189 E0E0 LDI R30,0
018A 075E CPC R21,R30
018B F144 BLT 0x01B4
018C 3049 CPI R20,0x9
018D E0E0 LDI R30,0
018E 075E CPC R21,R30
018F F029 BEQ 0x0195
0190 304A CPI R20,0xA
0191 E0E0 LDI R30,0
0192 075E CPC R21,R30
0193 F051 BEQ 0x019E
0194 C01F RJMP 0x01B4
(0044) {
(0045) case 0x09:forward();delay_ms(touch_time); turn_left();delay_ms(touch_time);break;
0195 DEF4 RCALL _forward
0196 EF0A LDI R16,0xFA
0197 E010 LDI R17,0
0198 DEC9 RCALL _delay_ms
0199 DEDC RCALL _turn_left
019A EF0A LDI R16,0xFA
019B E010 LDI R17,0
019C DEC5 RCALL _delay_ms
019D C016 RJMP 0x01B4
(0046) // 0b 0000,1001 尾部开关接触 ,前行,左转
(0047)
(0048) case 0x0a:backward();delay_ms(touch_time);turn_left();delay_ms(touch_time); break;
019E DEE6 RCALL _backward
019F EF0A LDI R16,0xFA
01A0 E010 LDI R17,0
01A1 DEC0 RCALL _delay_ms
01A2 DED3 RCALL _turn_left
01A3 EF0A LDI R16,0xFA
01A4 E010 LDI R17,0
01A5 DEBC RCALL _delay_ms
01A6 C00D RJMP 0x01B4
(0049) //右侧开关接触 ,后退,左转
(0050)
(0051) case 0x03:backward();delay_ms(touch_time);turn_left();delay_ms(touch_time);break;
01A7 DEDD RCALL _backward
01A8 EF0A LDI R16,0xFA
01A9 E010 LDI R17,0
01AA DEB7 RCALL _delay_ms
01AB DECA RCALL _turn_left
01AC EF0A LDI R16,0xFA
01AD E010 LDI R17,0
01AE DEB3 RCALL _delay_ms
01AF C004 RJMP 0x01B4
(0052) //左侧开关接触,后退,左转
(0053)
(0054) case 0x02:stop();delay_ms(touch_time*4); break;
01B0 DEDE RCALL _stop
01B1 EE08 LDI R16,0xE8
01B2 E013 LDI R17,3
01B3 DEAE RCALL _delay_ms
(0055) // 0b 0000,0010 两侧开关同时接触,停止运动,熄灭指示灯
(0056) }
(0057) pc = PINC & 0xE0;
01B4 B383 IN R24,0x13
01B5 7E80 ANDI R24,0xE0
01B6 93800061 STS pc,R24
(0058) if(pc == 0x40)
01B8 3480 CPI R24,0x40
01B9 F441 BNE 0x01C2
(0059) {//后退//左转
(0060) backward();//后退
01BA DECA RCALL _backward
(0061) delay_ms(xuanya_delayms);
01BB E20C LDI R16,0x2C
01BC E011 LDI R17,1
01BD DEA4 RCALL _delay_ms
(0062) turn_left();//左转
01BE DEB7 RCALL _turn_left
(0063) delay_ms(xuanya_delayms/2);
01BF E906 LDI R16,0x96
01C0 E010 LDI R17,0
01C1 DEA0 RCALL _delay_ms
(0064) }
(0065) if(pc == 0x80)
01C2 91800061 LDS R24,pc
01C4 3880 CPI R24,0x80
01C5 F441 BNE 0x01CE
(0066) {//后退//左转
(0067) backward();//后退
01C6 DEBE RCALL _backward
(0068) delay_ms(xuanya_delayms);
01C7 E20C LDI R16,0x2C
01C8 E011 LDI R17,1
01C9 DE98 RCALL _delay_ms
(0069) turn_left();//左转
01CA DEAB RCALL _turn_left
(0070) delay_ms(xuanya_delayms/2);
01CB E906 LDI R16,0x96
01CC E010 LDI R17,0
01CD DE94 RCALL _delay_ms
(0071) }
(0072) if(pc == 0x20)
01CE 91800061 LDS R24,pc
01D0 3280 CPI R24,0x20
01D1 F441 BNE 0x01DA
(0073) {//后退//左转
(0074) backward();//后退
01D2 DEB2 RCALL _backward
(0075) delay_ms(xuanya_delayms);
01D3 E20C LDI R16,0x2C
01D4 E011 LDI R17,1
01D5 DE8C RCALL _delay_ms
(0076) turn_left();//左转
01D6 DE9F RCALL _turn_left
(0077) delay_ms(xuanya_delayms/2);
01D7 E906 LDI R16,0x96
01D8 E010 LDI R17,0
01D9 DE88 RCALL _delay_ms
(0078) }
(0079) if(pc == 0xc0)
01DA 91800061 LDS R24,pc
01DC 3C80 CPI R24,0xC0
01DD F441 BNE 0x01E6
(0080) {//后退//左转
(0081) backward();//后退
01DE DEA6 RCALL _backward
(0082) delay_ms(xuanya_delayms);
01DF E20C LDI R16,0x2C
01E0 E011 LDI R17,1
01E1 DE80 RCALL _delay_ms
(0083) turn_left();//左转
01E2 DE93 RCALL _turn_left
(0084) delay_ms(xuanya_delayms/2);
01E3 E906 LDI R16,0x96
01E4 E010 LDI R17,0
01E5 DE7C RCALL _delay_ms
(0085) }
(0086) if(pc == 0x60)
01E6 91800061 LDS R24,pc
01E8 3680 CPI R24,0x60
01E9 F441 BNE 0x01F2
(0087) {//后退//左转
(0088) backward();//后退
01EA DE9A RCALL _backward
(0089) delay_ms(xuanya_delayms);
01EB E20C LDI R16,0x2C
01EC E011 LDI R17,1
01ED DE74 RCALL _delay_ms
(0090) turn_left();//左转
01EE DE87 RCALL _turn_left
(0091) delay_ms(xuanya_delayms/2);
01EF E906 LDI R16,0x96
01F0 E010 LDI R17,0
01F1 DE70 RCALL _delay_ms
(0092) }
(0093) if(pc == 0xE0)
01F2 91800061 LDS R24,pc
01F4 3E80 CPI R24,0xE0
01F5 F461 BNE 0x0202
(0094) {
(0095) //刹车 //led灯为流水灯
(0096) stop();
01F6 DE98 RCALL _stop
(0097) PORTA = 0x3C;
01F7 E38C LDI R24,0x3C
01F8 BB8B OUT 0x1B,R24
(0098) delay_ms(xuanya_delayms);
01F9 E20C LDI R16,0x2C
01FA E011 LDI R17,1
01FB DE66 RCALL _delay_ms
(0099) PORTA = 0xC3;
01FC EC83 LDI R24,0xC3
01FD BB8B OUT 0x1B,R24
(0100) delay_ms(xuanya_delayms);
01FE E20C LDI R16,0x2C
01FF E011 LDI R17,1
0200 DE61 RCALL _delay_ms
(0101) }
0201 C001 RJMP 0x0203
(0102) else
(0103) {
(0104) forward();//前行
0202 DE87 RCALL _forward
0203 CF78 RJMP 0x017C
0204 940E0217 CALL pop_gset1
0206 9508 RET
(0105) }
(0106) }
(0107) }
(0108)
(0109) void main()
(0110) {
(0111) xuanya_car();
FILE: <library>
_main:
0207 DF6F RCALL _xuanya_car
0208 9508 RET
pop_gset2:
0209 E0E2 LDI R30,2
020A 940C0218 JMP pop
push_gset5:
020C 92FA ST R15,-Y
020D 92EA ST R14,-Y
push_gset4:
020E 92DA ST R13,-Y
020F 92CA ST R12,-Y
push_gset3:
0210 92BA ST R11,-Y
0211 92AA ST R10,-Y
push_gset2:
0212 937A ST R23,-Y
0213 936A ST R22,-Y
push_gset1:
0214 935A ST R21,-Y
0215 934A ST R20,-Y
0216 9508 RET
pop_gset1:
0217 E0E1 LDI R30,1
pop:
0218 9149 LD R20,Y+
0219 9159 LD R21,Y+
021A FDE0 SBRC R30,0
021B 9508 RET
021C 9169 LD R22,Y+
021D 9179 LD R23,Y+
021E FDE1 SBRC R30,1
021F 9508 RET
0220 90A9 LD R10,Y+
0221 90B9 LD R11,Y+
0222 FDE2 SBRC R30,2
0223 9508 RET
0224 90C9 LD R12,Y+
0225 90D9 LD R13,Y+
0226 FDE3 SBRC R30,3
0227 9508 RET
0228 90E9 LD R14,Y+
0229 90F9 LD R15,Y+
022A 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -