📄 text1.lst
字号:
(0208) backward(); //后退
00C9 DFBB RCALL _backward
(0209) delay_ms(touch_time);
00CA EF0A LDI R16,0xFA
00CB E010 LDI R17,0
00CC DF95 RCALL _delay_ms
(0210)
(0211) turn_left(); //左转
00CD DFA8 RCALL _turn_left
(0212) delay_ms(touch_time);
00CE EF0A LDI R16,0xFA
00CF E010 LDI R17,0
00D0 DF91 RCALL _delay_ms
(0213) }
(0214) if(sw_in == 0x02)// 0b 0000,0010 两侧开关同时接触,停止运动
00D1 3042 CPI R20,2
00D2 F4F9 BNE 0x00F2
(0215) {
(0216) stop(); //停止运动,熄灭指示灯
00D3 DFBB RCALL _stop
(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 940E01A6 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
FILE: D:\afish\工作内容\DIY-08-16\M16\DIY-08-16\追光\trace-light.c
(0001) /**********************************************************/
(0002) /* 广州天河双龙电子公司
(0003) http://www.sl.com.cn
(0004) PC.1检测右光敏电阻
(0005) PC.2检测左光敏电阻
(0006) 功能:
(0007) 追光程序,小车追着光走。
(0008) Chip type : ATMEGA16
(0009) Clock frequency : 8MHz
(0010) */
(0011) /**********************************************************/
(0012) #include <iom16v.h>
(0013) #include <macros.h>
(0014) #include <diy0206.c> //调用sldiy0206机器人的子函数库
(0015)
(0016) #define light_delay 100
(0017)
(0018) unsigned char cds;
(0019)
(0020) void trace_light()
(0021) {
(0022) port_init(); //PA,PB,PC,PD 初始化
_trace_light:
0177 DED3 RCALL _port_init
(0023)
(0024) work_status = 0x70; //置对应的工作状态标志
0178 E780 LDI R24,0x70
0179 93800065 STS work_status,R24
(0025)
(0026) mic_startup(); //等待声控启动
017B DF79 RCALL _mic_startup
017C C025 RJMP 0x01A2
(0027)
(0028) while(1)
(0029) {
(0030) sw_touch(); //检测轻触开关
017D DF15 RCALL _sw_touch
(0031)
(0032) cds = PINC & 0x06; //0b0000,0110
017E B383 IN R24,0x13
017F 7086 ANDI R24,6
0180 93800060 STS cds,R24
(0033)
(0034) if(cds == 0x00) //左右两侧都感测到光
0182 2388 TST R24
0183 F421 BNE 0x0188
(0035) {//直行
(0036) forward();
0184 DF05 RCALL _forward
(0037) delay_ms(light_delay); //延时
0185 E604 LDI R16,0x64
0186 E010 LDI R17,0
0187 DEDA RCALL _delay_ms
(0038) }
(0039) if(cds == 0x02) //0b0000,0010___pc2(右侧)感测到光
0188 91800060 LDS R24,cds
018A 3082 CPI R24,2
018B F421 BNE 0x0190
(0040) {//慢速右转
(0041) turn_right_s();
018C DEEE RCALL _turn_right_s
(0042) delay_ms(light_delay); //延时
018D E604 LDI R16,0x64
018E E010 LDI R17,0
018F DED2 RCALL _delay_ms
(0043) }
(0044) if(cds == 0x04) //0b0000,0100___pc1(左侧)感测到光
0190 91800060 LDS R24,cds
0192 3084 CPI R24,4
0193 F421 BNE 0x0198
(0045) {//慢速左转
(0046) turn_left_s();
0194 DEEB RCALL _turn_left_s
(0047) delay_ms(light_delay); //延时
0195 E604 LDI R16,0x64
0196 E010 LDI R17,0
0197 DECA RCALL _delay_ms
(0048) }
(0049) if(cds == 0x06)
0198 91800060 LDS R24,cds
019A 3086 CPI R24,6
019B F431 BNE 0x01A2
(0050) {//停止动作
(0051) PORTA = 0x55; //延时后停止动作,等待光照重新动作
019C E585 LDI R24,0x55
019D BB8B OUT 0x1B,R24
(0052) delay_ms(light_delay*2);
019E EC08 LDI R16,0xC8
019F E010 LDI R17,0
01A0 DEC1 RCALL _delay_ms
(0053) stop();
01A1 DEED RCALL _stop
01A2 CFDA RJMP 0x017D
01A3 9508 RET
(0054)
(0055) }
(0056) }
(0057) }
(0058)
(0059) void main()
(0060) {
(0061) trace_light();
FILE: <library>
_main:
01A4 DFD2 RCALL _trace_light
01A5 9508 RET
pop_gset2:
01A6 E0E2 LDI R30,2
01A7 940C01B5 JMP pop
push_gset5:
01A9 92FA ST R15,-Y
01AA 92EA ST R14,-Y
push_gset4:
01AB 92DA ST R13,-Y
01AC 92CA ST R12,-Y
push_gset3:
01AD 92BA ST R11,-Y
01AE 92AA ST R10,-Y
push_gset2:
01AF 937A ST R23,-Y
01B0 936A ST R22,-Y
push_gset1:
01B1 935A ST R21,-Y
01B2 934A ST R20,-Y
01B3 9508 RET
pop_gset1:
01B4 E0E1 LDI R30,1
pop:
01B5 9149 LD R20,Y+
01B6 9159 LD R21,Y+
01B7 FDE0 SBRC R30,0
01B8 9508 RET
01B9 9169 LD R22,Y+
01BA 9179 LD R23,Y+
01BB FDE1 SBRC R30,1
01BC 9508 RET
01BD 90A9 LD R10,Y+
01BE 90B9 LD R11,Y+
01BF FDE2 SBRC R30,2
01C0 9508 RET
01C1 90C9 LD R12,Y+
01C2 90D9 LD R13,Y+
01C3 FDE3 SBRC R30,3
01C4 9508 RET
01C5 90E9 LD R14,Y+
01C6 90F9 LD R15,Y+
01C7 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -