📄 xuanya_car.lst
字号:
023E 2422 CLR R2
023F 92200067 STS _t0_times,R2
0241 E282 LDI R24,0x22
0242 93800066 STS _timers,R24
(0136) temp1=EEPROMread((int)&sound[sound_add]);
0244 E081 LDI R24,1
0245 E090 LDI R25,0
0246 91000060 LDS R16,0x60
0248 91100061 LDS R17,0x61
024A 0F08 ADD R16,R24
024B 1F19 ADC R17,R25
024C D154 RCALL _EEPROMread
024D 93000072 STS _temp1,R16
(0137) }
(0138) if(pc == 0x40 || pc == 0x80 || pc == 0x20 || pc == 0xc0 || pc == 0x60)
024F 9180006F LDS R24,_pc
0251 3480 CPI R24,0x40
0252 F041 BEQ 0x025B
0253 3880 CPI R24,0x80
0254 F031 BEQ 0x025B
0255 3280 CPI R24,0x20
0256 F021 BEQ 0x025B
0257 3C80 CPI R24,0xC0
0258 F011 BEQ 0x025B
0259 3680 CPI R24,0x60
025A F431 BNE 0x0261
(0139) {
(0140) timers=0x55;
025B E585 LDI R24,0x55
025C 93800066 STS _timers,R24
(0141) t0_times = 0;
025E 2422 CLR R2
025F 92200067 STS _t0_times,R2
(0142) }
(0143) if(timers == 0x55)
0261 91800066 LDS R24,_timers
0263 3585 CPI R24,0x55
0264 F589 BNE 0x0296
(0144) {
(0145) if(t0_times < 16) //16*25ms=400ms
0265 91800067 LDS R24,_t0_times
0267 3180 CPI R24,0x10
0268 F470 BCC 0x0277
(0146) {
(0147) backward();
0269 DE55 RCALL _backward
(0148) temp1=sound_back[sound_add];
026A EA8E LDI R24,0xAE
026B E090 LDI R25,0
026C 90200060 LDS R2,0x60
026E 90300061 LDS R3,0x61
0270 0E28 ADD R2,R24
0271 1E39 ADC R3,R25
0272 2DE2 MOV R30,R2
0273 2DF3 MOV R31,R3
0274 95C8 LPM
0275 92000072 STS _temp1,R0
(0149) }
(0150) if(t0_times > 16 && t0_times < 24) //8*25ms=200ms
0277 E180 LDI R24,0x10
0278 90200067 LDS R2,_t0_times
027A 1582 CP R24,R2
027B F488 BCC 0x028D
027C 2D82 MOV R24,R2
027D 3188 CPI R24,0x18
027E F470 BCC 0x028D
(0151) {
(0152) turn_left();
027F DE30 RCALL _turn_left
(0153) temp1=sound_back[sound_add];
0280 EA8E LDI R24,0xAE
0281 E090 LDI R25,0
0282 90200060 LDS R2,0x60
0284 90300061 LDS R3,0x61
0286 0E28 ADD R2,R24
0287 1E39 ADC R3,R25
0288 2DE2 MOV R30,R2
0289 2DF3 MOV R31,R3
028A 95C8 LPM
028B 92000072 STS _temp1,R0
(0154) }
(0155) if(t0_times == 24)
028D 91800067 LDS R24,_t0_times
028F 3188 CPI R24,0x18
0290 F429 BNE 0x0296
(0156) {
(0157) timers = 0;
0291 2422 CLR R2
0292 92200066 STS _timers,R2
(0158) t0_times = 0;
0294 92200067 STS _t0_times,R2
(0159) }
(0160) }
(0161) if(timers != 0x55 && timers != 0x22)
0296 91800066 LDS R24,_timers
0298 3585 CPI R24,0x55
0299 F031 BEQ 0x02A0
029A 3282 CPI R24,0x22
029B F021 BEQ 0x02A0
(0162) {
(0163) forward();
029C DE27 RCALL _forward
(0164) temp1 = 0;
029D 2422 CLR R2
029E 92200072 STS _temp1,R2
(0165) }
(0166) }
(0167) }
02A0 D09C RCALL pop_gset1
02A1 D0D4 RCALL pop_lset
02A2 9518 RETI
(0168)
(0169) void stop_timer0()
(0170) {
(0171) CLI();
_stop_timer0:
02A3 94F8 BCLR 7
(0172) TCCR0 = 0x00;//停止timer0
02A4 2422 CLR R2
02A5 BE23 OUT P33,R2
(0173) MCUCR = 0x00;
02A6 BE25 OUT P35,R2
(0174) GIMSK = 0x00;
02A7 BE2B OUT P3B,R2
(0175) TIMSK = 0x00;
02A8 BE29 OUT P39,R2
(0176) SEI();
02A9 9478 BSET 7
(0177) }
02AA 9508 RET
_timer1_ovf_isr:
02AB 922A ST R2,-Y
02AC 923A ST R3,-Y
02AD 938A ST R24,-Y
02AE B62F IN R2,P3F
02AF 922A ST R2,-Y
(0178)
(0179) #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
(0180) void timer1_ovf_isr(void)
(0181) {
(0182) {
(0183) TCNT1=toneconst;
02B0 90200076 LDS R2,_toneconst
02B2 90300077 LDS R3,_toneconst+1
02B4 9230004D STS 0x4D,R3
02B6 9220004C STS 0x4C,R2
(0184) PORTC^=1;
02B8 E081 LDI R24,1
02B9 B225 IN R2,P15
02BA 2628 EOR R2,R24
02BB BA25 OUT P15,R2
(0185) }
(0186) }
02BC 9029 LD R2,Y+
02BD BE2F OUT P3F,R2
02BE 9189 LD R24,Y+
02BF 9039 LD R3,Y+
02C0 9029 LD R2,Y+
02C1 9518 RETI
(0187)
(0188) void xuanya_car(void)
(0189) {
(0190) port_init(); //PA,PB,PC,PD 初始化
_xuanya_car:
02C2 DDC2 RCALL _port_init
(0191)
(0192) work_status = 0x20;//置对应的工作状态标志
02C3 E280 LDI R24,0x20
02C4 9380007F STS _work_status,R24
(0193)
(0194) PORTA = 0x0F;
02C6 E08F LDI R24,0xF
02C7 BB8B OUT P1B,R24
(0195)
(0196) gzsl=0x88;timers=0;t0_times=0;
02C8 E888 LDI R24,0x88
02C9 93800068 STS _gzsl,R24
02CB 2422 CLR R2
02CC 92200066 STS _timers,R2
02CE 92200067 STS _t0_times,R2
(0197) CLI(); //disable all interrupts
02D0 94F8 BCLR 7
(0198) timer0_init();
02D1 DEDE RCALL _timer0_init
(0199)
(0200) MCUCR = 0x00;
02D2 2422 CLR R2
02D3 BE25 OUT P35,R2
(0201) GIMSK = 0x00;
02D4 BE2B OUT P3B,R2
(0202) TIMSK|=(1<<TOIE0);
02D5 B789 IN R24,P39
02D6 6082 ORI R24,2
02D7 BF89 OUT P39,R24
(0203) SEI(); //re-enable interrupts
02D8 9478 BSET 7
(0204)
(0205) mic_startup();//等待声控启动函数
02D9 DE5B RCALL _mic_startup
(0206)
(0207) gzsl=0x44;t0_times=0;
02DA E484 LDI R24,0x44
02DB 93800068 STS _gzsl,R24
02DD 2422 CLR R2
02DE 92200067 STS _t0_times,R2
(0208) TCCR1A = 0x00;
02E0 BC2F OUT P2F,R2
(0209) TCCR1B =(1<<CS11);//8分频
02E1 E082 LDI R24,2
02E2 BD8E OUT P2E,R24
(0210) xuanya_car_rst:
(0211) temp=temp1 = 0;
02E3 2422 CLR R2
02E4 92200072 STS _temp1,R2
02E6 92200073 STS _temp,R2
(0212) sound_add = 0;
02E8 2433 CLR R3
02E9 92300061 STS 0x61,R3
02EB 92200060 STS 0x60,R2
02ED C044 RJMP 0x0332
(0213) while(temp1!=0)
(0214) {
(0215) temp=temp1;
02EE 90200072 LDS R2,_temp1
02F0 92200073 STS _temp,R2
(0216) temp&=0x0f;
02F2 2D82 MOV R24,R2
02F3 708F ANDI R24,0xF
02F4 93800073 STS _temp,R24
(0217) if(temp!=0)
02F6 2E28 MOV R2,R24
02F7 2388 TST R24
02F8 F0D9 BEQ 0x0314
(0218) {
(0219) TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
02F9 B789 IN R24,P39
02FA 6880 ORI R24,0x80
02FB BF89 OUT P39,R24
(0220) temp--;
02FC 2D82 MOV R24,R2
02FD 5081 SUBI R24,1
02FE 93800073 STS _temp,R24
(0221) toneconst=TONETABLE[temp];
0300 E18A LDI R24,0x1A
0301 E090 LDI R25,0
0302 91000073 LDS R16,_temp
0304 2711 CLR R17
0305 0F00 LSL R16
0306 1F11 ROL R17
0307 0F08 ADD R16,R24
0308 1F19 ADC R17,R25
0309 D047 RCALL lpm16
030A 93100077 STS _toneconst+1,R17
030C 93000076 STS _toneconst,R16
(0222) TCNT1=toneconst;
030E 2E20 MOV R2,R16
030F 2E31 MOV R3,R17
0310 9230004D STS 0x4D,R3
0312 9220004C STS 0x4C,R2
(0223) }
(0224) temp=temp1;
0314 90200072 LDS R2,_temp1
0316 92200073 STS _temp,R2
(0225) temp>>=4;
0318 2D82 MOV R24,R2
0319 9582 SWAP R24
031A 708F ANDI R24,0xF
031B 93800073 STS _temp,R24
(0226) temp&=0x0f;
031D 708F ANDI R24,0xF
031E 93800073 STS _temp,R24
(0227) delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
0320 2F28 MOV R18,R24
0321 2733 CLR R19
0322 E801 LDI R16,0x81
0323 E010 LDI R17,0
0324 D068 RCALL mpy16s
0325 DD77 RCALL _delay_ms
(0228) TIMSK&=~(1<<TOIE1);
0326 B789 IN R24,P39
0327 778F ANDI R24,0x7F
0328 BF89 OUT P39,R24
(0229) sound_add++;
0329 91800060 LDS R24,0x60
032B 91900061 LDS R25,0x61
032D 9601 ADIW R24,1
032E 93900061 STS 0x61,R25
0330 93800060 STS 0x60,R24
0332 90200072 LDS R2,_temp1
0334 2022 TST R2
0335 F009 BEQ 0x0337
0336 CFB7 RJMP 0x02EE
(0230) }
(0231) goto xuanya_car_rst;
0337 CFAB RJMP 0x02E3
0338 9508 RET
(0232) }
(0233)
(0234)
(0235) void main()
(0236) {
(0237) xuanya_car();
(0238) }
FILE: <library>
_main:
0339 CF88 RJMP _xuanya_car
push_gset1:
033A 935A ST R21,-Y
033B 934A ST R20,-Y
033C 9508 RET
pop_gset1:
033D E0E1 LDI R30,1
pop:
033E 9149 LD R20,Y+
033F 9159 LD R21,Y+
0340 FDE0 SBRC R30,0
0341 9508 RET
0342 9169 LD R22,Y+
0343 9179 LD R23,Y+
0344 FDE1 SBRC R30,1
0345 9508 RET
0346 90A9 LD R10,Y+
0347 90B9 LD R11,Y+
0348 FDE2 SBRC R30,2
0349 9508 RET
034A 90C9 LD R12,Y+
034B 90D9 LD R13,Y+
034C FDE3 SBRC R30,3
034D 9508 RET
034E 90E9 LD R14,Y+
034F 90F9 LD R15,Y+
0350 9508 RET
lpm16:
0351 93EA ST R30,-Y
0352 93FA ST R31,-Y
0353 920A ST R0,-Y
0354 2FE0 MOV R30,R16
0355 2FF1 MOV R31,R17
0356 95C8 LPM
0357 2D00 MOV R16,R0
0358 9631 ADIW R30,1
0359 95C8 LPM
035A 2D10 MOV R17,R0
035B 9009 LD R0,Y+
035C 91F9 LD R31,Y+
035D 91E9 LD R30,Y+
035E 9508 RET
push_lset:
035F 93FA ST R31,-Y
0360 93EA ST R30,-Y
0361 93BA ST R27,-Y
0362 93AA ST R26,-Y
0363 939A ST R25,-Y
0364 938A ST R24,-Y
0365 933A ST R19,-Y
0366 932A ST R18,-Y
0367 931A ST R17,-Y
0368 930A ST R16,-Y
0369 929A ST R9,-Y
036A 928A ST R8,-Y
036B 927A ST R7,-Y
036C 926A ST R6,-Y
036D 925A ST R5,-Y
036E 924A ST R4,-Y
036F 923A ST R3,-Y
0370 922A ST R2,-Y
0371 921A ST R1,-Y
0372 920A ST R0,-Y
0373 B60F IN R0,P3F
0374 920A ST R0,-Y
0375 9508 RET
pop_lset:
0376 9009 LD R0,Y+
0377 BE0F OUT P3F,R0
0378 9009 LD R0,Y+
0379 9019 LD R1,Y+
037A 9029 LD R2,Y+
037B 9039 LD R3,Y+
037C 9049 LD R4,Y+
037D 9059 LD R5,Y+
037E 9069 LD R6,Y+
037F 9079 LD R7,Y+
0380 9089 LD R8,Y+
0381 9099 LD R9,Y+
0382 9109 LD R16,Y+
0383 9119 LD R17,Y+
0384 9129 LD R18,Y+
0385 9139 LD R19,Y+
0386 9189 LD R24,Y+
0387 9199 LD R25,Y+
0388 91A9 LD R26,Y+
0389 91B9 LD R27,Y+
038A 91E9 LD R30,Y+
038B 91F9 LD R31,Y+
038C 9508 RET
mpy16s:
038D 920A ST R0,-Y
038E 921A ST R1,-Y
038F 2400 CLR R0
0390 2411 CLR R1
0391 3000 CPI R16,0
0392 0701 CPC R16,R17
0393 F041 BEQ 0x039C
0394 9516 LSR R17
0395 9507 ROR R16
0396 F410 BCC 0x0399
0397 0E02 ADD R0,R18
0398 1E13 ADC R1,R19
0399 0F22 LSL R18
039A 1F33 ROL R19
039B CFF5 RJMP 0x0391
039C 2D00 MOV R16,R0
039D 2D11 MOV R17,R1
039E 9019 LD R1,Y+
039F 9009 LD R0,Y+
03A0 9508 RET
_EEPROMread:
03A1 99E1 SBIC P1C,1
03A2 CFFE RJMP _EEPROMread
03A3 9310003F STS 0x3F,R17
03A5 9300003E STS 0x3E,R16
03A7 9AE0 SBI P1C,0
03A8 B30D IN R16,P1D
03A9 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -