📄 ji_qi_ren.lst
字号:
0146 E005 LDI R16,5
0147 E010 LDI R17,0
0148 DF0A RCALL _delay_us
(0175) display>>=1;
0149 9566 LSR R22
014A 9543 INC R20
014B 3048 CPI R20,0x8
014C F308 BCS 0x012E
(0176) }
(0177) display=number[minute%10];
014D E02A LDI R18,0xA
014E E030 LDI R19,0
014F 2D0E MOV R16,R14
0150 2711 CLR R17
0151 940E03EE CALL mod16s
0153 01F8 MOVW R30,R16
0154 E683 LDI R24,0x63
0155 E090 LDI R25,0
0156 0FE8 ADD R30,R24
0157 1FF9 ADC R31,R25
0158 8160 LDD R22,Z+0
(0178) if(point) //显示路程时米与厘米之加小数点
0159 20CC TST R12
015A F009 BEQ 0x015C
(0179) display&=0x7f;
015B 776F ANDI R22,0x7F
(0180) for(j=0;j<8;j++)
015C 2744 CLR R20
015D C01D RJMP 0x017B
(0181) {
(0182) PORTC|=0x10;delay_us(5);
015E 9AAC SBI 0x15,4
015F E005 LDI R16,5
0160 E010 LDI R17,0
0161 DEF1 RCALL _delay_us
(0183) PORTC&=0xf7;delay_us(5);
0162 B385 IN R24,0x15
0163 7F87 ANDI R24,0xF7
0164 BB85 OUT 0x15,R24
0165 E005 LDI R16,5
0166 E010 LDI R17,0
0167 DEEB RCALL _delay_us
(0184) PORTC|=((display&0x01)<<3);delay_us(5);
0168 2F86 MOV R24,R22
0169 7081 ANDI R24,1
016A 0F88 LSL R24
016B 0F88 LSL R24
016C 0F88 LSL R24
016D B225 IN R2,0x15
016E 2A28 OR R2,R24
016F BA25 OUT 0x15,R2
0170 E005 LDI R16,5
0171 E010 LDI R17,0
0172 DEE0 RCALL _delay_us
(0185) PORTC&=0xef;delay_us(5);
0173 B385 IN R24,0x15
0174 7E8F ANDI R24,0xEF
0175 BB85 OUT 0x15,R24
0176 E005 LDI R16,5
0177 E010 LDI R17,0
0178 DEDA RCALL _delay_us
(0186) display>>=1;
0179 9566 LSR R22
017A 9543 INC R20
017B 3048 CPI R20,0x8
017C F308 BCS 0x015E
(0187) }
(0188) display=number[second/10];
017D E02A LDI R18,0xA
017E E030 LDI R19,0
017F 2D0A MOV R16,R10
0180 2711 CLR R17
0181 940E03F2 CALL div16s
0183 01F8 MOVW R30,R16
0184 E683 LDI R24,0x63
0185 E090 LDI R25,0
0186 0FE8 ADD R30,R24
0187 1FF9 ADC R31,R25
0188 8160 LDD R22,Z+0
(0189) for(j=0;j<8;j++)
0189 2744 CLR R20
018A C01D RJMP 0x01A8
(0190) {
(0191) PORTC|=0x10;delay_us(5);
018B 9AAC SBI 0x15,4
018C E005 LDI R16,5
018D E010 LDI R17,0
018E DEC4 RCALL _delay_us
(0192) PORTC&=0xf7;delay_us(5);
018F B385 IN R24,0x15
0190 7F87 ANDI R24,0xF7
0191 BB85 OUT 0x15,R24
0192 E005 LDI R16,5
0193 E010 LDI R17,0
0194 DEBE RCALL _delay_us
(0193) PORTC|=((display&0x01)<<3);delay_us(5);
0195 2F86 MOV R24,R22
0196 7081 ANDI R24,1
0197 0F88 LSL R24
0198 0F88 LSL R24
0199 0F88 LSL R24
019A B225 IN R2,0x15
019B 2A28 OR R2,R24
019C BA25 OUT 0x15,R2
019D E005 LDI R16,5
019E E010 LDI R17,0
019F DEB3 RCALL _delay_us
(0194) PORTC&=0xef;delay_us(5);
01A0 B385 IN R24,0x15
01A1 7E8F ANDI R24,0xEF
01A2 BB85 OUT 0x15,R24
01A3 E005 LDI R16,5
01A4 E010 LDI R17,0
01A5 DEAD RCALL _delay_us
(0195) display>>=1;
01A6 9566 LSR R22
01A7 9543 INC R20
01A8 3048 CPI R20,0x8
01A9 F308 BCS 0x018B
(0196) }
(0197) display=number[second%10];
01AA E02A LDI R18,0xA
01AB E030 LDI R19,0
01AC 2D0A MOV R16,R10
01AD 2711 CLR R17
01AE 940E03EE CALL mod16s
01B0 01F8 MOVW R30,R16
01B1 E683 LDI R24,0x63
01B2 E090 LDI R25,0
01B3 0FE8 ADD R30,R24
01B4 1FF9 ADC R31,R25
01B5 8160 LDD R22,Z+0
(0198) for(j=0;j<8;j++)
01B6 2744 CLR R20
01B7 C01D RJMP 0x01D5
(0199) {
(0200) PORTC|=0x10;delay_us(5);
01B8 9AAC SBI 0x15,4
01B9 E005 LDI R16,5
01BA E010 LDI R17,0
01BB DE97 RCALL _delay_us
(0201) PORTC&=0xf7;delay_us(5);
01BC B385 IN R24,0x15
01BD 7F87 ANDI R24,0xF7
01BE BB85 OUT 0x15,R24
01BF E005 LDI R16,5
01C0 E010 LDI R17,0
01C1 DE91 RCALL _delay_us
(0202) PORTC|=((display&0x01)<<3);delay_us(5);
01C2 2F86 MOV R24,R22
01C3 7081 ANDI R24,1
01C4 0F88 LSL R24
01C5 0F88 LSL R24
01C6 0F88 LSL R24
01C7 B225 IN R2,0x15
01C8 2A28 OR R2,R24
01C9 BA25 OUT 0x15,R2
01CA E005 LDI R16,5
01CB E010 LDI R17,0
01CC DE86 RCALL _delay_us
(0203) PORTC&=0xef;delay_us(5);
01CD B385 IN R24,0x15
01CE 7E8F ANDI R24,0xEF
01CF BB85 OUT 0x15,R24
01D0 E005 LDI R16,5
01D1 E010 LDI R17,0
01D2 DE80 RCALL _delay_us
(0204) display>>=1;
01D3 9566 LSR R22
01D4 9543 INC R20
01D5 3048 CPI R20,0x8
01D6 F308 BCS 0x01B8
01D7 940E042B CALL pop_gset5
01D9 9508 RET
(0205) }
(0206) }
(0207) /////////////液晶屏显示函数/////////////////////////////////////
(0208)
(0209)
(0210)
(0211) /////////////////寻找黑线////////////////////////////////////////
(0212) void trace_road(void) //黑线寻迹函数
(0213) {
(0214) unsigned char pinc;
(0215) PINC=PINC&0x07; //PC0~PC2信号送给变量pinc
_trace_road:
pinc --> Y+1
01DA B383 IN R24,0x13
01DB 7087 ANDI R24,7
01DC BB83 OUT 0x13,R24
(0216) if((PINC==0x02)||(PINC==0x07))//只有中间传感器有信号,
01DD B383 IN R24,0x13
01DE 3082 CPI R24,2
01DF F019 BEQ 0x01E3
01E0 B383 IN R24,0x13
01E1 3087 CPI R24,7
01E2 F439 BNE 0x01EA
(0217) { run();turn_state0=0; turn_state1=0;}//或三个均有信号,则直走
01E3 DEDD RCALL _run
01E4 2422 CLR R2
01E5 92200060 STS turn_state0,R2
01E7 92200061 STS turn_state1,R2
01E9 C033 RJMP 0x021D
(0218) else if(PINC==0x06)//若右边无信号
01EA B383 IN R24,0x13
01EB 3086 CPI R24,6
01EC F429 BNE 0x01F2
(0219) {turn_left();turn_state0=1;} //左转
01ED DEF3 RCALL _turn_left
01EE E081 LDI R24,1
01EF 93800060 STS turn_state0,R24
01F1 C02B RJMP 0x021D
(0220) else if(PINC==0x03)//若左边无信号
01F2 B383 IN R24,0x13
01F3 3083 CPI R24,3
01F4 F429 BNE 0x01FA
(0221) {turn_right(); turn_state1=1;} //右转
01F5 DEF5 RCALL _turn_right
01F6 E081 LDI R24,1
01F7 93800061 STS turn_state1,R24
01F9 C023 RJMP 0x021D
(0222) else if(PINC==0x04)//若右边和中间均无信号
01FA B383 IN R24,0x13
01FB 3084 CPI R24,4
01FC F429 BNE 0x0202
(0223) { turn_left();turn_state0=1;} //左转
01FD DEE3 RCALL _turn_left
01FE E081 LDI R24,1
01FF 93800060 STS turn_state0,R24
0201 C01B RJMP 0x021D
(0224) else if(PINC==0x01)//若左边和中间均无信号
0202 B383 IN R24,0x13
0203 3081 CPI R24,1
0204 F429 BNE 0x020A
(0225) {turn_right();turn_state1=1;} //右转
0205 DEE5 RCALL _turn_right
0206 E081 LDI R24,1
0207 93800061 STS turn_state1,R24
0209 C013 RJMP 0x021D
(0226) else if((turn_state0==1)&&(PINC==0))//若三个均无信号
020A 91800060 LDS R24,turn_state0
020C 3081 CPI R24,1
020D F429 BNE 0x0213
020E B223 IN R2,0x13
020F 2022 TST R2
0210 F411 BNE 0x0213
(0227) turn_left(); //左转半圈
0211 DECF RCALL _turn_left
0212 C00A RJMP 0x021D
(0228) else if((turn_state1==1)&&(PINC==0))
0213 91800061 LDS R24,turn_state1
0215 3081 CPI R24,1
0216 F429 BNE 0x021C
0217 B223 IN R2,0x13
0218 2022 TST R2
0219 F411 BNE 0x021C
(0229) turn_right();
021A DED0 RCALL _turn_right
021B C001 RJMP 0x021D
(0230) else
(0231) run();
021C DEA4 RCALL _run
021D 9508 RET
(0232) }
(0233) ///////////////////寻找黑线////////////////////////////////////////
(0234)
(0235)
(0236)
(0237) ////////////////////探测光源函数///////////////////////////////////
(0238) void trace_light_init(void)
(0239) {
(0240) DDRA&=0xf8; // PC0 1分别为探测光源的左 右端口,
_trace_light_init:
021E B38A IN R24,0x1A
021F 7F88 ANDI R24,0xF8
0220 BB8A OUT 0x1A,R24
(0241) PORTA&=0xf8;
0221 B38B IN R24,0x1B
0222 7F88 ANDI R24,0xF8
0223 BB8B OUT 0x1B,R24
(0242) ADMUX=0x60; //初始化ADC0
0224 E680 LDI R24,0x60
0225 B987 OUT 0x07,R24
(0243) ADCSRA=0x82; //初始化ADC0,64分频
0226 E882 LDI R24,0x82
0227 B986 OUT 0x06,R24
0228 9508 RET
_trace_light:
adc --> R20
0229 940E0434 CALL push_gset2
(0244) }
(0245) void trace_light(void)
(0246) {
(0247) unsigned char adc;
(0248) for(adc=0;adc<3;adc++)
022B 2744 CLR R20
022C C042 RJMP 0x026F
(0249) {
(0250) if(adc==0)
022D 2344 TST R20
022E F419 BNE 0x0232
(0251) ADMUX=0x60;
022F E680 LDI R24,0x60
0230 B987 OUT 0x07,R24
0231 C007 RJMP 0x0239
(0252) else if(adc==1)
0232 3041 CPI R20,1
0233 F419 BNE 0x0237
(0253) ADMUX=0x61;
0234 E681 LDI R24,0x61
0235 B987 OUT 0x07,R24
0236 C002 RJMP 0x0239
(0254) else
(0255) ADMUX=0x62;
0237 E682 LDI R24,0x62
0238 B987 OUT 0x07,R24
(0256) delay_us(10);
0239 E00A LDI R16,0xA
023A E010 LDI R17,0
023B DE17 RCALL _delay_us
(0257) ADCSRA|=0x40;
023C 9A36 SBI 0x06,6
(0258) delay_ms(100);
023D E604 LDI R16,0x64
023E E010 LDI R17,0
023F DE1B RCALL _delay_ms
(0259) switch(adc)
0240 2F64 MOV R22,R20
0241 2777 CLR R23
0242 3060 CPI R22,0
0243 0767 CPC R22,R23
0244 F049 BEQ 0x024E
0245 3061 CPI R22,1
0246 E0E0 LDI R30,0
0247 077E CPC R23,R30
0248 F081 BEQ 0x0259
0249 3062 CPI R22,2
024A E0E0 LDI R30,0
024B 077E CPC R23,R30
024C F0B9 BEQ 0x0264
024D C020 RJMP 0x026E
(0260) {
(0261) case 0: left=(ADC>>6);break;
024E E026 LDI R18,6
024F E030 LDI R19,0
0250 B104 IN R16,0x04
0251 B115 IN R17,0x05
0252 940E047B CALL lsr16
0254 93100076 STS left+1,R17
0256 93000075 STS left,R16
0258 C015 RJMP 0x026E
(0262) case 1: right=(ADC>>6);break;
0259 E026 LDI R18,6
025A E030 LDI R19,0
025B B104 IN R16,0x04
025C B115 IN R17,0x05
025D 940E047B CALL lsr16
025F 93100074 STS right+1,R17
0261 93000073 STS right,R16
0263 C00A RJMP 0x026E
(0263) case 2: interval=(ADC>>6);break;
0264 E026 LDI R18,6
0265 E030 LDI R19,0
0266 B104 IN R16,0x04
0267 B115 IN R17,0x05
0268 940E047B CALL lsr16
026A 93100070 STS interval+1,R17
026C 9300006F STS interval,R16
026E 9543 INC R20
026F 3043 CPI R20,3
0270 F408 BCC 0x0272
0271 CFBB RJMP 0x022D
(0264) default: break;
(0265) }
(0266) }
(0267) zhong=right-left;
0272 90200075 LDS R2,left
0274 90300076 LDS R3,left+1
0276 90400073 LDS R4,right
0278 90500074 LDS R5,right+1
027A 1842 SUB R4,R2
027B 0853 SBC R5,R3
027C 92500072 STS zhong+1,R5
027E 92400071 STS zhong,R4
(0268) right=1024-right;
0280 90200073 LDS R2,right
0282 90300074 LDS R3,right+1
0284 E080 LDI R24,0
0285 E094 LDI R25,4
0286 1982 SUB R24,R2
0287 0993 SBC R25,R3
0288 93900074 STS right+1,R25
028A 93800073 STS right,R24
(0269) if(interval<420)
028C 9180006F LDS R24,interval
028E 91900070 LDS R25,interval+1
0290 3A84 CPI R24,0xA4
0291 E0E1 LDI R30,1
0292 079E CPC R25,R30
0293 F428 BCC 0x0299
(0270) {
(0271) TIMSK&=0xbf;//停止计时
0294 B789 IN R24,0x39
0295 7B8F ANDI R24,0xBF
0296 BF89 OUT 0x39,R24
(0272) for(;;)
(0273) stop();
0297 DE20 RCALL _stop
0298 CFFE RJMP 0x0297
(0274) }
(0275) else if((interval>419)&&(zhong<left)&&(zhong<right)&&((left<(right+10))|(right<(left+10))))
0299 EA83 LDI R24,0xA3
029A E091 LDI R25,1
029B 9020006F LDS R2,interval
029D 90300070 LDS R3,interval+1
029F 1582 CP R24,R2
02A0 0593 CPC R25,R3
02A1 F008 BCS 0x02A3
02A2 C03A RJMP 0x02DD
02A3 90200075 LDS R2,left
02A5 90300076 LDS R3,left+1
02A7 90400071 LDS R4,zhong
02A9 90500072 LDS R5,zhong+1
02AB 1442 CP R4,R2
02AC 0453 CPC R5,R3
02AD F578 BCC 0x02DD
02AE 90200073 LDS R2,right
02B0 90300074 LDS R3,right+1
02B2 1442 CP R4,R2
02B3 0453 CPC R5,R3
02B4 F540 BCC 0x02DD
02B5 01C1 MOVW R24,R2
02B6 960A ADIW R24,0xA
02B7 90200075 LDS R2,left
02B9 90300076 LDS R3,left+1
02BB 1628 CP R2,R24
02BC 0639 CPC R3,R25
02BD F418 BCC 0x02C1
02BE E061 LDI R22,1
02BF E070 LDI R23,0
02C0 C002 RJMP 0x02C3
02C1 2766 CLR R22
02C2 2777 CLR R23
02C3 91800075 LDS R24,left
02C5 91900076 LDS R25,left+1
02C7 960A ADIW R24,0xA
02C8 90200073 LDS R2,right
02CA 90300074 LDS R3,right+1
02CC 1628 CP R2,R24
02CD 0639 CPC R3,R25
02CE F418 BCC 0x02D2
02CF E041 LDI R20,1
02D0 E050 LDI R21,0
02D1 C002 RJMP 0x02D4
02D2 2744 CLR R20
02D3 2755 CLR R21
02D4 011B MOVW R2,R22
02D5 2A24 OR R2,R20
02D6 2A35 OR R3,R21
02D7 2022 TST R2
02D8 F411 BNE 0x02DB
02D9 2033 TST R3
02DA F011 BEQ 0x02DD
(0276) {run();}
02DB DDE5 RCALL _run
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -