📄 sl3010_1.lst
字号:
(0368) void remote_car()
(0369) {//遥控车程序
(0370) unsigned char remote_in;
(0371)
(0372) PORTA = 0x0f;
04B9 E08F LDI R24,0xF
04BA BB8B OUT 0x1B,R24
(0373)
(0374) work_status = 0x60;//置对应的工作状态标志
04BB E680 LDI R24,0x60
04BC 938000E6 STS _work_status,R24
(0375)
(0376) mic_startup();//等待声控启动函数
04BE DC69 RCALL _mic_startup
04BF C025 RJMP 0x04E5
(0377)
(0378) while(1)
(0379) {
(0380)
(0381) sw_touch();//检测轻触开关
04C0 DBFF RCALL _sw_touch
(0382)
(0383) remote_in = PINB & 0x0F;
04C1 B366 IN R22,0x16
04C2 706F ANDI R22,0xF
(0384) switch (remote_in)
04C3 2F46 MOV R20,R22
04C4 2755 CLR R21
04C5 3040 CPI R20,0
04C6 0745 CPC R20,R21
04C7 F0C9 BEQ 0x04E1
04C8 3041 CPI R20,1
04C9 E0E0 LDI R30,0
04CA 075E CPC R21,R30
04CB F099 BEQ 0x04DF
04CC 3042 CPI R20,2
04CD E0E0 LDI R30,0
04CE 075E CPC R21,R30
04CF F059 BEQ 0x04DB
04D0 3044 CPI R20,4
04D1 E0E0 LDI R30,0
04D2 075E CPC R21,R30
04D3 F029 BEQ 0x04D9
04D4 3048 CPI R20,0x8
04D5 E0E0 LDI R30,0
04D6 075E CPC R21,R30
04D7 F029 BEQ 0x04DD
04D8 C009 RJMP 0x04E2
(0385) {//检测遥控器是否有键按下
(0386) case 0x04: // < A >
(0387) turn_right(); //右转
04D9 DBC4 RCALL _turn_right
(0388) break;
04DA C007 RJMP 0x04E2
(0389) case 0x02: // < B >
(0390) backward(); //后退
04DB DBD6 RCALL _backward
(0391) break;
04DC C005 RJMP 0x04E2
(0392) case 0x08: // < C >
(0393) stop(); //停止运动
04DD DBDE RCALL _stop
(0394) break;
04DE C003 RJMP 0x04E2
(0395) case 0x01: // < D >
(0396) turn_left(); //左转
04DF DBC3 RCALL _turn_left
(0397) break;
04E0 C001 RJMP 0x04E2
(0398) case 0x00:
(0399) forward(); //前行
04E1 DBD5 RCALL _forward
(0400) break;
(0401) }
(0402) delay_ms(100);
04E2 E604 LDI R16,0x64
04E3 E010 LDI R17,0
04E4 DBAB RCALL _delay_ms
04E5 CFDA RJMP 0x04C0
(0403) }
(0404) }
04E6 D06E RCALL pop_gset2
04E7 9508 RET
(0405)
(0406) void main()
(0407) {
(0408) unsigned char pd_select,remote_select;
(0409)
(0410) port_init(); //PA,PB,PC,PD 初始化
_main:
remote_select --> R20
pd_select --> R22
04E8 DB8F RCALL _port_init
(0411)
(0412) work_status = 0x67; //置对应的工作状态标志
04E9 E687 LDI R24,0x67
04EA 938000E6 STS _work_status,R24
(0413)
(0414) PORTA = 0x7e;
04EC E78E LDI R24,0x7E
04ED BB8B OUT 0x1B,R24
04EE C064 RJMP 0x0553
(0415)
(0416) while(1)
(0417) {
(0418) pd_select = PIND & 0x0f;
04EF B360 IN R22,0x10
04F0 706F ANDI R22,0xF
(0419) if(pd_select == 0x0e)//pd0=0,其它为高电平
04F1 306E CPI R22,0xE
04F2 F451 BNE 0x04FD
(0420) {
04F3 C008 RJMP 0x04FC
(0421) while(1)
(0422) {
(0423) delay_ms(500);//消除抖动
04F4 EF04 LDI R16,0xF4
04F5 E011 LDI R17,1
04F6 DB99 RCALL _delay_ms
(0424) pd_select = PIND & 0x0f;
04F7 B360 IN R22,0x10
04F8 706F ANDI R22,0xF
(0425) if(pd_select == 0x0e)//pd0=0,其它为高电平
04F9 306E CPI R22,0xE
04FA F411 BNE 0x04FD
(0426) {remote_car();}//运行遥控车程序
04FB DFBC RCALL _remote_car
04FC CFF7 RJMP 0x04F4
(0427) else
(0428) break;
(0429) }
(0430) }
(0431) if(pd_select == 0x0d)//pd1=0,其它为高电平
04FD 306D CPI R22,0xD
04FE F451 BNE 0x0509
(0432) {
04FF C008 RJMP 0x0508
(0433) while(1)
(0434) {
(0435) delay_ms(500);//消除抖动
0500 EF04 LDI R16,0xF4
0501 E011 LDI R17,1
0502 DB8D RCALL _delay_ms
(0436) pd_select = PIND & 0x0f;
0503 B360 IN R22,0x10
0504 706F ANDI R22,0xF
(0437) if(pd_select == 0x0d)//pd1=0,其它为高电平
0505 306D CPI R22,0xD
0506 F411 BNE 0x0509
(0438) {xuanya_car();}//运行悬崖车程序
0507 DF49 RCALL _xuanya_car
0508 CFF7 RJMP 0x0500
(0439) else
(0440) break;
(0441) }
(0442) }
(0443) if(pd_select == 0x0b)//pd2=0,其它为高电平
0509 306B CPI R22,0xB
050A F451 BNE 0x0515
(0444) {
050B C008 RJMP 0x0514
(0445) while(1)
(0446) {
(0447) delay_ms(500);//消除抖动
050C EF04 LDI R16,0xF4
050D E011 LDI R17,1
050E DB81 RCALL _delay_ms
(0448) pd_select = PIND & 0x0f;
050F B360 IN R22,0x10
0510 706F ANDI R22,0xF
(0449) if(pd_select == 0x0b)//pd1=0,其它为高电平
0511 306B CPI R22,0xB
0512 F411 BNE 0x0515
(0450) {music_car();}//运行音乐车程序
0513 DEB7 RCALL _music_car
0514 CFF7 RJMP 0x050C
(0451) else
(0452) break;
(0453) }
(0454) }
(0455) if(pd_select == 0x07)//pd3=0,其它为高电平
0515 3067 CPI R22,7
0516 F451 BNE 0x0521
(0456) {
0517 C008 RJMP 0x0520
(0457) while(1)
(0458) {
(0459) delay_ms(500);//消除抖动
0518 EF04 LDI R16,0xF4
0519 E011 LDI R17,1
051A DB75 RCALL _delay_ms
(0460) pd_select = PIND & 0x0f;
051B B360 IN R22,0x10
051C 706F ANDI R22,0xF
(0461) if(pd_select == 0x07)//pd1=0,其它为高电平
051D 3067 CPI R22,7
051E F411 BNE 0x0521
(0462) {led_car();}//运行霓虹车程序
051F DC7F RCALL _led_car
0520 CFF7 RJMP 0x0518
(0463) else
(0464) break;
(0465) }
(0466) }
(0467)
(0468) remote_select = PINB & 0x0f;//检测遥控器是否有键按下
0521 B346 IN R20,0x16
0522 704F ANDI R20,0xF
(0469) if(remote_select == 0x04)// A
0523 3044 CPI R20,4
0524 F451 BNE 0x052F
(0470) {
0525 C008 RJMP 0x052E
(0471) while(1)
(0472) {
(0473) delay_ms(500);//消除抖动
0526 EF04 LDI R16,0xF4
0527 E011 LDI R17,1
0528 DB67 RCALL _delay_ms
(0474) remote_select = PINB & 0x0f;
0529 B346 IN R20,0x16
052A 704F ANDI R20,0xF
(0475) if(remote_select == 0x04)// A
052B 3044 CPI R20,4
052C F411 BNE 0x052F
(0476) {remote_car();}//运行遥控车程序
052D DF8A RCALL _remote_car
052E CFF7 RJMP 0x0526
(0477) else
(0478) break;
(0479) }
(0480) }
(0481) if(remote_select == 0x02)// B
052F 3042 CPI R20,2
0530 F451 BNE 0x053B
(0482) {
0531 C008 RJMP 0x053A
(0483) while(1)
(0484) {
(0485) delay_ms(500);//消除抖动
0532 EF04 LDI R16,0xF4
0533 E011 LDI R17,1
0534 DB5B RCALL _delay_ms
(0486) remote_select = PINB & 0x0f;
0535 B346 IN R20,0x16
0536 704F ANDI R20,0xF
(0487) if(remote_select == 0x02)// B
0537 3042 CPI R20,2
0538 F411 BNE 0x053B
(0488) {xuanya_car();}//运行悬崖车程序
0539 DF17 RCALL _xuanya_car
053A CFF7 RJMP 0x0532
(0489) else
(0490) break;
(0491) }
(0492) }
(0493) if(remote_select == 0x08)// C
053B 3048 CPI R20,0x8
053C F451 BNE 0x0547
(0494) {
053D C008 RJMP 0x0546
(0495) while(1)
(0496) {
(0497) delay_ms(500);//消除抖动
053E EF04 LDI R16,0xF4
053F E011 LDI R17,1
0540 DB4F RCALL _delay_ms
(0498) remote_select = PINB & 0x0f;
0541 B346 IN R20,0x16
0542 704F ANDI R20,0xF
(0499) if(remote_select == 0x08)// C
0543 3048 CPI R20,0x8
0544 F411 BNE 0x0547
(0500) {music_car();}//运行音乐车程序
0545 DE85 RCALL _music_car
0546 CFF7 RJMP 0x053E
(0501) else
(0502) break;
(0503) }
(0504) }
(0505) if(remote_select == 0x01)// D
0547 3041 CPI R20,1
0548 F451 BNE 0x0553
(0506) {
0549 C008 RJMP 0x0552
(0507) while(1)
(0508) {
(0509) delay_ms(500);//消除抖动
054A EF04 LDI R16,0xF4
054B E011 LDI R17,1
054C DB43 RCALL _delay_ms
(0510) remote_select = PINB & 0x0f;
054D B346 IN R20,0x16
054E 704F ANDI R20,0xF
(0511) if(remote_select == 0x01)// D
054F 3041 CPI R20,1
0550 F411 BNE 0x0553
(0512) {led_car();}//运行霓虹车程序
0551 DC4D RCALL _led_car
0552 CFF7 RJMP 0x054A
0553 CF9B RJMP 0x04EF
(0513) else
(0514) break;
(0515) }
(0516) }
(0517) }
(0518) }
FILE: <library>
0554 9508 RET
pop_gset2:
0555 E0E2 LDI R30,2
0556 C006 RJMP pop
pop_gset3:
0557 E0E4 LDI R30,4
0558 C004 RJMP pop
push_gset1:
0559 935A ST R21,-Y
055A 934A ST R20,-Y
055B 9508 RET
pop_gset1:
055C E0E1 LDI R30,1
pop:
055D 9149 LD R20,Y+
055E 9159 LD R21,Y+
055F FDE0 SBRC R30,0
0560 9508 RET
0561 9169 LD R22,Y+
0562 9179 LD R23,Y+
0563 FDE1 SBRC R30,1
0564 9508 RET
0565 90A9 LD R10,Y+
0566 90B9 LD R11,Y+
0567 FDE2 SBRC R30,2
0568 9508 RET
0569 90C9 LD R12,Y+
056A 90D9 LD R13,Y+
056B FDE3 SBRC R30,3
056C 9508 RET
056D 90E9 LD R14,Y+
056E 90F9 LD R15,Y+
056F 9508 RET
push_gset2:
0570 937A ST R23,-Y
0571 936A ST R22,-Y
0572 CFE6 RJMP push_gset1
push_gset3:
0573 92BA ST R11,-Y
0574 92AA ST R10,-Y
0575 CFFA RJMP push_gset2
lpm16:
0576 93EA ST R30,-Y
0577 93FA ST R31,-Y
0578 920A ST R0,-Y
0579 2FE0 MOV R30,R16
057A 2FF1 MOV R31,R17
057B 95C8 LPM
057C 2D00 MOV R16,R0
057D 9631 ADIW R30,1
057E 95C8 LPM
057F 2D10 MOV R17,R0
0580 9009 LD R0,Y+
0581 91F9 LD R31,Y+
0582 91E9 LD R30,Y+
0583 9508 RET
mpy16s:
0584 920A ST R0,-Y
0585 921A ST R1,-Y
0586 2400 CLR R0
0587 2411 CLR R1
0588 3000 CPI R16,0
0589 0701 CPC R16,R17
058A F041 BEQ 0x0593
058B 9516 LSR R17
058C 9507 ROR R16
058D F410 BCC 0x0590
058E 0E02 ADD R0,R18
058F 1E13 ADC R1,R19
0590 0F22 LSL R18
0591 1F33 ROL R19
0592 CFF5 RJMP 0x0588
0593 2D00 MOV R16,R0
0594 2D11 MOV R17,R1
0595 9019 LD R1,Y+
0596 9009 LD R0,Y+
0597 9508 RET
_EEPROMread:
0598 99E1 SBIC 0x1C,1
0599 CFFE RJMP _EEPROMread
059A BB0E OUT 0x1E,R16
059B BB1F OUT 0x1F,R17
059C 9AE0 SBI 0x1C,0
059D B30D IN R16,0x1D
059E 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -