📄 remote_car.lst
字号:
0262 90200060 LDS R2,0x60
0264 90300061 LDS R3,0x61
0266 0E28 ADD R2,R24
0267 1E39 ADC R3,R25
0268 2DE2 MOV R30,R2
0269 2DF3 MOV R31,R3
026A 95C8 LPM
026B 92000073 STS _temp1,R0
(0103) break;
026D C037 RJMP 0x02A5
(0104) case 0x02: // < B >
(0105) backward(); //后退
026E DE84 RCALL _backward
(0106) rst_time=0;
026F 2422 CLR R2
0270 9220006B STS _rst_time,R2
(0107) temp1=sound_back[sound_add];
0272 EE86 LDI R24,0xE6
0273 E090 LDI R25,0
0274 90200060 LDS R2,0x60
0276 90300061 LDS R3,0x61
0278 0E28 ADD R2,R24
0279 1E39 ADC R3,R25
027A 2DE2 MOV R30,R2
027B 2DF3 MOV R31,R3
027C 95C8 LPM
027D 92000073 STS _temp1,R0
(0108) break;
027F C025 RJMP 0x02A5
(0109) case 0x08: // < C >
(0110) stop(); //停止运动
0280 DE7C RCALL _stop
(0111) rst_time++;
0281 9180006B LDS R24,_rst_time
0283 5F8F SUBI R24,0xFF
0284 9380006B STS _rst_time,R24
(0112) temp1=sound_stop[sound_add];
0286 EF8E LDI R24,0xFE
0287 E090 LDI R25,0
0288 90200060 LDS R2,0x60
028A 90300061 LDS R3,0x61
028C 0E28 ADD R2,R24
028D 1E39 ADC R3,R25
028E 2DE2 MOV R30,R2
028F 2DF3 MOV R31,R3
0290 95C8 LPM
0291 92000073 STS _temp1,R0
(0113) break;
0293 C011 RJMP 0x02A5
(0114) case 0x01: // < D >
(0115) turn_left(); //左转
0294 DE4F RCALL _turn_left
(0116) rst_time=0;
0295 2422 CLR R2
0296 9220006B STS _rst_time,R2
(0117) temp1=sound_left[sound_add];
0298 E186 LDI R24,0x16
0299 E091 LDI R25,1
029A 90200060 LDS R2,0x60
029C 90300061 LDS R3,0x61
029E 0E28 ADD R2,R24
029F 1E39 ADC R3,R25
02A0 2DE2 MOV R30,R2
02A1 2DF3 MOV R31,R3
02A2 95C8 LPM
02A3 92000073 STS _temp1,R0
(0118) break;
(0119) }
(0120) }
(0121) }
(0122) }
02A5 D0A5 RCALL pop_gset1
02A6 D0DD RCALL pop_lset
02A7 9518 RETI
(0123)
(0124) void stop_timer0()
(0125) {
(0126) CLI();
_stop_timer0:
02A8 94F8 BCLR 7
(0127) TCCR0 = 0x00;//停止timer0
02A9 2422 CLR R2
02AA BE23 OUT 0x33,R2
(0128) MCUCR = 0x00;
02AB BE25 OUT 0x35,R2
(0129) GIMSK = 0x00;
02AC BE2B OUT 0x3B,R2
(0130) TIMSK = 0x00;
02AD BE29 OUT 0x39,R2
(0131) SEI();
02AE 9478 BSET 7
(0132) }
02AF 9508 RET
_timer1_ovf_isr:
02B0 922A ST R2,-Y
02B1 923A ST R3,-Y
02B2 938A ST R24,-Y
02B3 B62F IN R2,0x3F
02B4 922A ST R2,-Y
(0133)
(0134) #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
(0135) void timer1_ovf_isr(void)
(0136) {
(0137) {
(0138) TCNT1=toneconst;
02B5 90200075 LDS R2,_toneconst
02B7 90300076 LDS R3,_toneconst+1
02B9 BC3D OUT 0x2D,R3
02BA BC2C OUT 0x2C,R2
(0139) PORTC^=1;
02BB E081 LDI R24,1
02BC B225 IN R2,0x15
02BD 2628 EOR R2,R24
02BE BA25 OUT 0x15,R2
(0140) }
(0141) }
02BF 9029 LD R2,Y+
02C0 BE2F OUT 0x3F,R2
02C1 9189 LD R24,Y+
02C2 9039 LD R3,Y+
02C3 9029 LD R2,Y+
02C4 9518 RETI
(0142)
(0143) void remote_car()
(0144) {//遥控车程序
(0145)
(0146) port_init();//调用端口初始化函数
_remote_car:
02C5 DDF3 RCALL _port_init
(0147)
(0148) work_status = 0x60;//置对应的工作状态标志
02C6 E680 LDI R24,0x60
02C7 9380007E STS _work_status,R24
(0149)
(0150) remote_rst:
(0151) PORTA = 0x0F;
02C9 E08F LDI R24,0xF
02CA BB8B OUT 0x1B,R24
(0152)
(0153) gzsl=0x88;timers=0;t0_times=0;
02CB E888 LDI R24,0x88
02CC 93800067 STS _gzsl,R24
02CE 2422 CLR R2
02CF 9220006E STS _timers,R2
02D1 92200066 STS _t0_times,R2
(0154) CLI(); //disable all interrupts
02D3 94F8 BCLR 7
(0155) timer0_init();
02D4 DF0B RCALL _timer0_init
(0156)
(0157) MCUCR = 0x00;
02D5 2422 CLR R2
02D6 BE25 OUT 0x35,R2
(0158) GIMSK = 0x00;
02D7 BE2B OUT 0x3B,R2
(0159) TIMSK|=(1<<TOIE0);
02D8 B789 IN R24,0x39
02D9 6082 ORI R24,2
02DA BF89 OUT 0x39,R24
(0160) SEI(); //re-enable interrupts
02DB 9478 BSET 7
(0161)
(0162) mic_startup();//等待声控启动函数
02DC DE8C RCALL _mic_startup
(0163)
(0164) gzsl=0x33;t0_times=0;
02DD E383 LDI R24,0x33
02DE 93800067 STS _gzsl,R24
02E0 2422 CLR R2
02E1 92200066 STS _t0_times,R2
(0165) TCCR1A = 0x00;
02E3 BC2F OUT 0x2F,R2
(0166) TCCR1B =(1<<CS11);//8分频
02E4 E082 LDI R24,2
02E5 BD8E OUT 0x2E,R24
(0167) n01:
(0168) temp=temp1 = 0;
02E6 2422 CLR R2
02E7 92200073 STS _temp1,R2
02E9 92200074 STS _temp,R2
(0169) sound_add = 0;
02EB 2433 CLR R3
02EC 92300061 STS 0x61,R3
02EE 92200060 STS 0x60,R2
02F0 C04F RJMP 0x0340
(0170) while(temp1!=0)
(0171) {
(0172) temp=temp1;
02F1 90200073 LDS R2,_temp1
02F3 92200074 STS _temp,R2
(0173) temp&=0x0f;
02F5 2D82 MOV R24,R2
02F6 708F ANDI R24,0xF
02F7 93800074 STS _temp,R24
(0174) if(temp!=0)
02F9 2E28 MOV R2,R24
02FA 2388 TST R24
02FB F0B9 BEQ 0x0313
(0175) {
(0176) TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
02FC B789 IN R24,0x39
02FD 6880 ORI R24,0x80
02FE BF89 OUT 0x39,R24
(0177) temp--;
02FF 2D82 MOV R24,R2
0300 5081 SUBI R24,1
0301 93800074 STS _temp,R24
(0178) toneconst=TONETABLE[temp];
0303 E18A LDI R24,0x1A
0304 E090 LDI R25,0
0305 91000074 LDS R16,_temp
0307 2711 CLR R17
0308 0F00 LSL R16
0309 1F11 ROL R17
030A 0F08 ADD R16,R24
030B 1F19 ADC R17,R25
030C D052 RCALL lpm16
030D 93100076 STS _toneconst+1,R17
030F 93000075 STS _toneconst,R16
(0179) TCNT1=toneconst;
0311 BD1D OUT 0x2D,R17
0312 BD0C OUT 0x2C,R16
(0180) }
(0181) temp=temp1;
0313 90200073 LDS R2,_temp1
0315 92200074 STS _temp,R2
(0182) temp>>=4;
0317 2D82 MOV R24,R2
0318 9582 SWAP R24
0319 708F ANDI R24,0xF
031A 93800074 STS _temp,R24
(0183) temp&=0x0f;
031C 708F ANDI R24,0xF
031D 93800074 STS _temp,R24
(0184) delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
031F 2F28 MOV R18,R24
0320 2733 CLR R19
0321 E801 LDI R16,0x81
0322 E010 LDI R17,0
0323 D077 RCALL mpy16s
0324 DDAC RCALL _delay_ms
(0185) TIMSK&=~(1<<TOIE1);
0325 B789 IN R24,0x39
0326 778F ANDI R24,0x7F
0327 BF89 OUT 0x39,R24
(0186) sound_add++;
0328 91800060 LDS R24,0x60
032A 91900061 LDS R25,0x61
032C 9601 ADIW R24,1
032D 93900061 STS 0x61,R25
032F 93800060 STS 0x60,R24
(0187)
(0188) if(rst_time > 40)
0331 E288 LDI R24,0x28
0332 9020006B LDS R2,_rst_time
0334 1582 CP R24,R2
0335 F450 BCC 0x0340
(0189) {//当按住< C > 键的持续时间超过10S,遥控机器人复位,等待声控重起运行
(0190) rst_time=0;
0336 2422 CLR R2
0337 9220006B STS _rst_time,R2
(0191) stop_timer0();
0339 DF6E RCALL _stop_timer0
(0192) PORTA = 0x0f;
033A E08F LDI R24,0xF
033B BB8B OUT 0x1B,R24
(0193) delay_ms(1000);
033C EE08 LDI R16,0xE8
033D E013 LDI R17,3
033E DD92 RCALL _delay_ms
(0194) goto remote_rst;
033F CF89 RJMP 0x02C9
0340 90200073 LDS R2,_temp1
0342 2022 TST R2
0343 F009 BEQ 0x0345
0344 CFAC RJMP 0x02F1
(0195) }
(0196) }
(0197) goto n01;
0345 CFA0 RJMP 0x02E6
0346 9508 RET
(0198) }
(0199)
(0200) void main()
(0201) {
(0202) remote_car();
(0203) }
FILE: <library>
_main:
0347 CF7D RJMP _remote_car
push_gset1:
0348 935A ST R21,-Y
0349 934A ST R20,-Y
034A 9508 RET
pop_gset1:
034B E0E1 LDI R30,1
pop:
034C 9149 LD R20,Y+
034D 9159 LD R21,Y+
034E FDE0 SBRC R30,0
034F 9508 RET
0350 9169 LD R22,Y+
0351 9179 LD R23,Y+
0352 FDE1 SBRC R30,1
0353 9508 RET
0354 90A9 LD R10,Y+
0355 90B9 LD R11,Y+
0356 FDE2 SBRC R30,2
0357 9508 RET
0358 90C9 LD R12,Y+
0359 90D9 LD R13,Y+
035A FDE3 SBRC R30,3
035B 9508 RET
035C 90E9 LD R14,Y+
035D 90F9 LD R15,Y+
035E 9508 RET
lpm16:
035F 93EA ST R30,-Y
0360 93FA ST R31,-Y
0361 920A ST R0,-Y
0362 2FE0 MOV R30,R16
0363 2FF1 MOV R31,R17
0364 95C8 LPM
0365 2D00 MOV R16,R0
0366 9631 ADIW R30,1
0367 95C8 LPM
0368 2D10 MOV R17,R0
0369 9009 LD R0,Y+
036A 91F9 LD R31,Y+
036B 91E9 LD R30,Y+
036C 9508 RET
push_lset:
036D 93FA ST R31,-Y
036E 93EA ST R30,-Y
036F 93BA ST R27,-Y
0370 93AA ST R26,-Y
0371 939A ST R25,-Y
0372 938A ST R24,-Y
0373 933A ST R19,-Y
0374 932A ST R18,-Y
0375 931A ST R17,-Y
0376 930A ST R16,-Y
0377 929A ST R9,-Y
0378 928A ST R8,-Y
0379 927A ST R7,-Y
037A 926A ST R6,-Y
037B 925A ST R5,-Y
037C 924A ST R4,-Y
037D 923A ST R3,-Y
037E 922A ST R2,-Y
037F 921A ST R1,-Y
0380 920A ST R0,-Y
0381 B60F IN R0,0x3F
0382 920A ST R0,-Y
0383 9508 RET
pop_lset:
0384 9009 LD R0,Y+
0385 BE0F OUT 0x3F,R0
0386 9009 LD R0,Y+
0387 9019 LD R1,Y+
0388 9029 LD R2,Y+
0389 9039 LD R3,Y+
038A 9049 LD R4,Y+
038B 9059 LD R5,Y+
038C 9069 LD R6,Y+
038D 9079 LD R7,Y+
038E 9089 LD R8,Y+
038F 9099 LD R9,Y+
0390 9109 LD R16,Y+
0391 9119 LD R17,Y+
0392 9129 LD R18,Y+
0393 9139 LD R19,Y+
0394 9189 LD R24,Y+
0395 9199 LD R25,Y+
0396 91A9 LD R26,Y+
0397 91B9 LD R27,Y+
0398 91E9 LD R30,Y+
0399 91F9 LD R31,Y+
039A 9508 RET
mpy16s:
039B 920A ST R0,-Y
039C 921A ST R1,-Y
039D 2400 CLR R0
039E 2411 CLR R1
039F 3000 CPI R16,0
03A0 0701 CPC R16,R17
03A1 F041 BEQ 0x03AA
03A2 9516 LSR R17
03A3 9507 ROR R16
03A4 F410 BCC 0x03A7
03A5 0E02 ADD R0,R18
03A6 1E13 ADC R1,R19
03A7 0F22 LSL R18
03A8 1F33 ROL R19
03A9 CFF5 RJMP 0x039F
03AA 2D00 MOV R16,R0
03AB 2D11 MOV R17,R1
03AC 9019 LD R1,Y+
03AD 9009 LD R0,Y+
03AE 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -