📄 sl3010_1.lst
字号:
(0219) #pragma data:data
(0220) /* 音阶表 */
(0221) const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,TI,DO_H,
(0222) RE_H,MI_H,FA_H,SO_H,LA_H,TI_H,DO_HH};
(0223) /* 音阶重装常数 */
(0224) unsigned int toneconst;
(0225)
(0226) #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
(0227) void timer1_ovf_isr(void)
(0228) {
(0229) TCNT1=toneconst;
03BB 902000DB LDS R2,_toneconst
03BD 903000DC LDS R3,_toneconst+1
03BF BC3D OUT 0x2D,R3
03C0 BC2C OUT 0x2C,R2
(0230) PORTC^=1;
03C1 E081 LDI R24,1
03C2 B225 IN R2,0x15
03C3 2628 EOR R2,R24
03C4 BA25 OUT 0x15,R2
(0231) }
03C5 9029 LD R2,Y+
03C6 BE2F OUT 0x3F,R2
03C7 9189 LD R24,Y+
03C8 9039 LD R3,Y+
03C9 9029 LD R2,Y+
03CA 9518 RETI
_music_car:
sound_add --> R20
temp1 --> R22
temp --> R10
03CB D1A7 RCALL push_gset3
(0232)
(0233) void music_car(void)
(0234) {
(0235) unsigned char temp,temp1;
(0236) unsigned int sound_add=0;
03CC 2744 CLR R20
03CD 2755 CLR R21
(0237)
(0238) PORTA = 0x18;
03CE E188 LDI R24,0x18
03CF BB8B OUT 0x1B,R24
(0239)
(0240) work_status = 0x30; //置对应的工作状态标志
03D0 E380 LDI R24,0x30
03D1 938000E6 STS _work_status,R24
(0241)
(0242) SEI();
03D3 9478 BSET 7
(0243)
(0244) mic_startup(); //等待声控启动
03D4 DD53 RCALL _mic_startup
(0245)
(0246) TCCR1A = 0x00;
03D5 2422 CLR R2
03D6 BC2F OUT 0x2F,R2
(0247) TCCR1B =(1<<CS11);//8分频
03D7 E082 LDI R24,2
03D8 BD8E OUT 0x2E,R24
(0248) temp1=EEPROMread((int)&sound[sound_add]);
03D9 E081 LDI R24,1
03DA E090 LDI R25,0
03DB 2F04 MOV R16,R20
03DC 2F15 MOV R17,R21
03DD 0F08 ADD R16,R24
03DE 1F19 ADC R17,R25
03DF D1B8 RCALL _EEPROMread
03E0 2F60 MOV R22,R16
03E1 C067 RJMP 0x0449
(0249) while(temp1!=0)
(0250) {
(0251) temp=temp1;
03E2 2EA6 MOV R10,R22
(0252) temp&=0x0f;
03E3 2D8A MOV R24,R10
03E4 708F ANDI R24,0xF
03E5 2EA8 MOV R10,R24
(0253) //PA口为音乐灯
(0254) if(temp==1 || temp==2 || temp==3 || temp==4){PORTA = 0xfe;}
03E6 3081 CPI R24,1
03E7 F031 BEQ 0x03EE
03E8 3082 CPI R24,2
03E9 F021 BEQ 0x03EE
03EA 3083 CPI R24,3
03EB F011 BEQ 0x03EE
03EC 3084 CPI R24,4
03ED F411 BNE 0x03F0
03EE EF8E LDI R24,0xFE
03EF BB8B OUT 0x1B,R24
(0255) if(temp==5 || temp==6){PORTA = 0xfc;}
03F0 2D8A MOV R24,R10
03F1 3085 CPI R24,5
03F2 F011 BEQ 0x03F5
03F3 3086 CPI R24,6
03F4 F411 BNE 0x03F7
03F5 EF8C LDI R24,0xFC
03F6 BB8B OUT 0x1B,R24
(0256) if(temp==7 || temp==8 ){PORTA = 0xf8;}
03F7 2D8A MOV R24,R10
03F8 3087 CPI R24,7
03F9 F011 BEQ 0x03FC
03FA 3088 CPI R24,0x8
03FB F411 BNE 0x03FE
03FC EF88 LDI R24,0xF8
03FD BB8B OUT 0x1B,R24
(0257) if(temp==9){PORTA = 0xf0;}
03FE 2D8A MOV R24,R10
03FF 3089 CPI R24,0x9
0400 F411 BNE 0x0403
0401 EF80 LDI R24,0xF0
0402 BB8B OUT 0x1B,R24
(0258) if(temp==10){PORTA = 0xe0;}
0403 2D8A MOV R24,R10
0404 308A CPI R24,0xA
0405 F411 BNE 0x0408
0406 EE80 LDI R24,0xE0
0407 BB8B OUT 0x1B,R24
(0259) if(temp==11){PORTA = 0xc0;}
0408 2D8A MOV R24,R10
0409 308B CPI R24,0xB
040A F411 BNE 0x040D
040B EC80 LDI R24,0xC0
040C BB8B OUT 0x1B,R24
(0260) if(temp==12){PORTA = 0x80;}
040D 2D8A MOV R24,R10
040E 308C CPI R24,0xC
040F F411 BNE 0x0412
0410 E880 LDI R24,0x80
0411 BB8B OUT 0x1B,R24
(0261) if(temp==13||temp==14 || temp==15){PORTA = 0x00;}
0412 2D8A MOV R24,R10
0413 308D CPI R24,0xD
0414 F021 BEQ 0x0419
0415 308E CPI R24,0xE
0416 F011 BEQ 0x0419
0417 308F CPI R24,0xF
0418 F411 BNE 0x041B
0419 2422 CLR R2
041A BA2B OUT 0x1B,R2
(0262)
(0263) if(temp!=0)
041B 20AA TST R10
041C F099 BEQ 0x0430
(0264) {
(0265) TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
041D B789 IN R24,0x39
041E 6880 ORI R24,0x80
041F BF89 OUT 0x39,R24
(0266) temp--;
0420 94AA DEC R10
(0267) toneconst=TONETABLE[temp];
0421 E18A LDI R24,0x1A
0422 E090 LDI R25,0
0423 2D0A MOV R16,R10
0424 2711 CLR R17
0425 0F00 LSL R16
0426 1F11 ROL R17
0427 0F08 ADD R16,R24
0428 1F19 ADC R17,R25
0429 D14C RCALL lpm16
042A 931000DC STS _toneconst+1,R17
042C 930000DB STS _toneconst,R16
(0268) TCNT1=toneconst;
042E BD1D OUT 0x2D,R17
042F BD0C OUT 0x2C,R16
(0269) }
(0270) temp=temp1;
0430 2EA6 MOV R10,R22
(0271) temp>>=4;
0431 2D8A MOV R24,R10
0432 9582 SWAP R24
0433 708F ANDI R24,0xF
(0272) temp&=0x0f;
0434 708F ANDI R24,0xF
0435 2EA8 MOV R10,R24
(0273) delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
0436 2F28 MOV R18,R24
0437 2733 CLR R19
0438 E801 LDI R16,0x81
0439 E010 LDI R17,0
043A D149 RCALL mpy16s
043B DC54 RCALL _delay_ms
(0274) TIMSK&=~(1<<TOIE1);
043C B789 IN R24,0x39
043D 778F ANDI R24,0x7F
043E BF89 OUT 0x39,R24
(0275) sound_add++;
043F 5F4F SUBI R20,0xFF
0440 4F5F SBCI R21,0xFF
(0276) temp1=EEPROMread((int)&sound[sound_add]);
0441 E081 LDI R24,1
0442 E090 LDI R25,0
0443 2F04 MOV R16,R20
0444 2F15 MOV R17,R21
0445 0F08 ADD R16,R24
0446 1F19 ADC R17,R25
0447 D150 RCALL _EEPROMread
0448 2F60 MOV R22,R16
0449 2366 TST R22
044A F009 BEQ 0x044C
044B CF96 RJMP 0x03E2
(0277) }
(0278) delay_ms(1000);
044C EE08 LDI R16,0xE8
044D E013 LDI R17,3
044E DC41 RCALL _delay_ms
(0279) }
044F D107 RCALL pop_gset3
0450 9508 RET
(0280)
(0281) //PORTD = 0xA0;//前行//1010 0000 //PORTA = 0xC3;//1100,0011
(0282) //PORTD = 0x90;//左转//1001 0000快速左转//PORTA = 0x33;//0011,0011
(0283) //PORTD = 0x80;//左转//1000 0000慢速左转//PORTA = 0xF3;//1111,0011
(0284) //PORTD = 0x60;//右转//0110 0000快速右转//PORTA = 0xCC;//1100,1100
(0285) //PORTD = 0x20;//右转//0010 0000慢速右转//PORTA = 0xCF;//1100,1111
(0286) //PORTD = 0x50;//后退//0101 0000 //PORTA = 0x3C;//0011,1100
(0287)
(0288) //PC3声控启动
(0289) // 用PD7~PD4来作为电机驱动端
(0290)
(0291) #define xuanya_delayms 300
(0292)
(0293) unsigned char pa,pb,pc,pd;
(0294)
(0295) void xuanya_car(void)
(0296) {
(0297) PORTA = 0x1f;
_xuanya_car:
0451 E18F LDI R24,0x1F
0452 BB8B OUT 0x1B,R24
(0298)
(0299) work_status = 0x20;//置对应的工作状态标志
0453 E280 LDI R24,0x20
0454 938000E6 STS _work_status,R24
(0300)
(0301) mic_startup(); //等待声控启动
0456 DCD1 RCALL _mic_startup
0457 C05E RJMP 0x04B6
(0302)
(0303) while(1)
(0304) {//左(pc7) 中(pc6) 右(pc5)
(0305)
(0306) sw_touch(); //检测轻触开关
0458 DC67 RCALL _sw_touch
(0307)
(0308) pc = PINC & 0x10;
0459 B383 IN R24,0x13
045A 7180 ANDI R24,0x10
045B 938000D9 STS _pc,R24
(0309) if(pc == 0x00)
045D 2388 TST R24
045E F441 BNE 0x0467
(0310) {//后退//左转
(0311) backward();//后退
045F DC52 RCALL _backward
(0312) delay_ms(xuanya_delayms);
0460 E20C LDI R16,0x2C
0461 E011 LDI R17,1
0462 DC2D RCALL _delay_ms
(0313) turn_right();//左转
0463 DC3A RCALL _turn_right
(0314) delay_ms(xuanya_delayms/2);
0464 E906 LDI R16,0x96
0465 E010 LDI R17,0
0466 DC29 RCALL _delay_ms
(0315) }
(0316) pc = PINC & 0xE0;
0467 B383 IN R24,0x13
0468 7E80 ANDI R24,0xE0
0469 938000D9 STS _pc,R24
(0317) if(pc == 0x40)
046B 3480 CPI R24,0x40
046C F441 BNE 0x0475
(0318) {//后退//左转
(0319) backward();//后退
046D DC44 RCALL _backward
(0320) delay_ms(xuanya_delayms);
046E E20C LDI R16,0x2C
046F E011 LDI R17,1
0470 DC1F RCALL _delay_ms
(0321) turn_right();//左转
0471 DC2C RCALL _turn_right
(0322) delay_ms(xuanya_delayms/2);
0472 E906 LDI R16,0x96
0473 E010 LDI R17,0
0474 DC1B RCALL _delay_ms
(0323) }
(0324) if(pc == 0x80)
0475 918000D9 LDS R24,_pc
0477 3880 CPI R24,0x80
0478 F441 BNE 0x0481
(0325) {//后退//左转
(0326) backward();//后退
0479 DC38 RCALL _backward
(0327) delay_ms(xuanya_delayms);
047A E20C LDI R16,0x2C
047B E011 LDI R17,1
047C DC13 RCALL _delay_ms
(0328) turn_right();//左转
047D DC20 RCALL _turn_right
(0329) delay_ms(xuanya_delayms/2);
047E E906 LDI R16,0x96
047F E010 LDI R17,0
0480 DC0F RCALL _delay_ms
(0330) }
(0331) if(pc == 0x20)
0481 918000D9 LDS R24,_pc
0483 3280 CPI R24,0x20
0484 F441 BNE 0x048D
(0332) {//后退//左转
(0333) backward();//后退
0485 DC2C RCALL _backward
(0334) delay_ms(xuanya_delayms);
0486 E20C LDI R16,0x2C
0487 E011 LDI R17,1
0488 DC07 RCALL _delay_ms
(0335) turn_right();//左转
0489 DC14 RCALL _turn_right
(0336) delay_ms(xuanya_delayms/2);
048A E906 LDI R16,0x96
048B E010 LDI R17,0
048C DC03 RCALL _delay_ms
(0337) }
(0338) if(pc == 0xc0)
048D 918000D9 LDS R24,_pc
048F 3C80 CPI R24,0xC0
0490 F441 BNE 0x0499
(0339) {//后退//左转
(0340) backward();//后退
0491 DC20 RCALL _backward
(0341) delay_ms(xuanya_delayms);
0492 E20C LDI R16,0x2C
0493 E011 LDI R17,1
0494 DBFB RCALL _delay_ms
(0342) turn_right();//左转
0495 DC08 RCALL _turn_right
(0343) delay_ms(xuanya_delayms/2);
0496 E906 LDI R16,0x96
0497 E010 LDI R17,0
0498 DBF7 RCALL _delay_ms
(0344) }
(0345) if(pc == 0x60)
0499 918000D9 LDS R24,_pc
049B 3680 CPI R24,0x60
049C F441 BNE 0x04A5
(0346) {//后退//左转
(0347) backward();//后退
049D DC14 RCALL _backward
(0348) delay_ms(xuanya_delayms);
049E E20C LDI R16,0x2C
049F E011 LDI R17,1
04A0 DBEF RCALL _delay_ms
(0349) turn_right();//左转
04A1 DBFC RCALL _turn_right
(0350) delay_ms(xuanya_delayms/2);
04A2 E906 LDI R16,0x96
04A3 E010 LDI R17,0
04A4 DBEB RCALL _delay_ms
(0351) }
(0352) if(pc == 0xE0)
04A5 918000D9 LDS R24,_pc
04A7 3E80 CPI R24,0xE0
04A8 F461 BNE 0x04B5
(0353) {
(0354) //刹车 //led灯为流水灯
(0355) stop();
04A9 DC12 RCALL _stop
(0356) PORTA = 0x3C;
04AA E38C LDI R24,0x3C
04AB BB8B OUT 0x1B,R24
(0357) delay_ms(xuanya_delayms);
04AC E20C LDI R16,0x2C
04AD E011 LDI R17,1
04AE DBE1 RCALL _delay_ms
(0358) PORTA = 0xC3;
04AF EC83 LDI R24,0xC3
04B0 BB8B OUT 0x1B,R24
(0359) delay_ms(xuanya_delayms);
04B1 E20C LDI R16,0x2C
04B2 E011 LDI R17,1
04B3 DBDC RCALL _delay_ms
(0360) }
04B4 C001 RJMP 0x04B6
(0361) else
(0362) {
(0363) forward();//前行
04B5 DC01 RCALL _forward
04B6 CFA1 RJMP 0x0458
(0364) }
(0365) }
(0366) }
04B7 9508 RET
_remote_car:
remote_in --> R22
04B8 D0B7 RCALL push_gset2
(0367)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -