⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sl3010_1.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 5 页
字号:
(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 + -