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

📄 sl3010_2.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 5 页
字号:
    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 D139      RCALL	pop_gset2
    04E7 9508      RET
(0405) 
(0406) //自走车   机器人走四方形路线,遥控器调节行走路线
(0407) unsigned int delay_time1,delay_time2;
(0408) 
(0409) void auto_car1()
(0410) {
(0411)  port_init();//PA,PB,PC,PD 初始化
_auto_car1:
    04E8 DB8F      RCALL	_port_init
(0412)  
(0413)  work_status = 0x51;//置对应的工作状态标志
    04E9 E581      LDI	R24,0x51
    04EA 938000E8  STS	_work_status,R24
(0414)  
(0415)  PORTA = 0x44;//0100,0100
    04EC E484      LDI	R24,0x44
    04ED BB8B      OUT	0x1B,R24
(0416)  
(0417)  delay_time1=510;    //转弯时间
    04EE EF8E      LDI	R24,0xFE
    04EF E091      LDI	R25,1
    04F0 939000E4  STS	_delay_time1+1,R25
    04F2 938000E3  STS	_delay_time1,R24
(0418)  delay_time2=1200;   //前行时间
    04F4 EB80      LDI	R24,0xB0
    04F5 E094      LDI	R25,4
    04F6 939000E2  STS	_delay_time2+1,R25
    04F8 938000E1  STS	_delay_time2,R24
(0419)  
(0420)  mic_startup();//等待声控启动
    04FA DC2D      RCALL	_mic_startup
(0421) 
(0422) 	   forward();             //前行
    04FB DBBB      RCALL	_forward
(0423) 	   delay_ms(200);         
    04FC EC08      LDI	R16,0xC8
    04FD E010      LDI	R17,0
    04FE DB91      RCALL	_delay_ms
    04FF C01A      RJMP	0x051A
(0424)  
(0425)  while(1)
(0426)       {
(0427) 	   sw_touch();            //检测轻触开关
    0500 DBBF      RCALL	_sw_touch
(0428) 	   
(0429) 	   remote_auto_time();    //遥控器控制直行和转弯时间
    0501 DC30      RCALL	_remote_auto_time
(0430) 	   
(0431) 	   turn_right();          //右转
    0502 DB9B      RCALL	_turn_right
(0432) 	   delay_ms(delay_time1);
    0503 910000E3  LDS	R16,_delay_time1
    0505 911000E4  LDS	R17,_delay_time1+1
    0507 DB88      RCALL	_delay_ms
(0433) 	
(0434) 	   forward();             //前行
    0508 DBAE      RCALL	_forward
(0435) 	   delay_ms(delay_time2);
    0509 910000E1  LDS	R16,_delay_time2
    050B 911000E2  LDS	R17,_delay_time2+1
    050D DB82      RCALL	_delay_ms
(0436)    
(0437) 	   turn_right();           //右转
    050E DB8F      RCALL	_turn_right
(0438)        delay_ms(delay_time1);
    050F 910000E3  LDS	R16,_delay_time1
    0511 911000E4  LDS	R17,_delay_time1+1
    0513 DB7C      RCALL	_delay_ms
(0439) 
(0440) 	   forward();             //前行
    0514 DBA2      RCALL	_forward
(0441) 	   delay_ms(delay_time2);
    0515 910000E1  LDS	R16,_delay_time2
    0517 911000E2  LDS	R17,_delay_time2+1
    0519 DB76      RCALL	_delay_ms
    051A CFE5      RJMP	0x0500
(0442) 	  }
(0443) }
    051B 9508      RET
(0444) 
(0445) //自走车   机器人走< 8 >字,遥控器调节行走路线
(0446) void auto_car8()
(0447) {
(0448)  port_init();         //PA,PB,PC,PD 初始化
_auto_car8:
    051C DB5B      RCALL	_port_init
(0449)  
(0450)  work_status = 0x50;//置对应的工作状态标志
    051D E580      LDI	R24,0x50
    051E 938000E8  STS	_work_status,R24
(0451)  
(0452)  PORTA = 0x88;//1000,1000
    0520 E888      LDI	R24,0x88
    0521 BB8B      OUT	0x1B,R24
(0453)  
(0454)  delay_time1=1000;  //转弯时间
    0522 EE88      LDI	R24,0xE8
    0523 E093      LDI	R25,3
    0524 939000E4  STS	_delay_time1+1,R25
    0526 938000E3  STS	_delay_time1,R24
(0455)  delay_time2=1200;  //前行时间
    0528 EB80      LDI	R24,0xB0
    0529 E094      LDI	R25,4
    052A 939000E2  STS	_delay_time2+1,R25
    052C 938000E1  STS	_delay_time2,R24
(0456)  
(0457)  mic_startup();       //等待声控启动
    052E DBF9      RCALL	_mic_startup
(0458) 
(0459) 	   forward();           //前行
    052F DB87      RCALL	_forward
(0460) 	   delay_ms(delay_time2);
    0530 910000E1  LDS	R16,_delay_time2
    0532 911000E2  LDS	R17,_delay_time2+1
    0534 DB5B      RCALL	_delay_ms
    0535 C01A      RJMP	0x0550
(0461)  
(0462)  while(1)
(0463)       {
(0464) 	   sw_touch();          //检测轻触开关
    0536 DB89      RCALL	_sw_touch
(0465) 	   
(0466) 	   remote_auto_time();  //遥控器控制直行和转弯时间
    0537 DBFA      RCALL	_remote_auto_time
(0467) 	   
(0468) 	   turn_right();        //右转
    0538 DB65      RCALL	_turn_right
(0469) 	   delay_ms(delay_time1);
    0539 910000E3  LDS	R16,_delay_time1
    053B 911000E4  LDS	R17,_delay_time1+1
    053D DB52      RCALL	_delay_ms
(0470) 	
(0471) 	   forward();           //前行
    053E DB78      RCALL	_forward
(0472) 	   delay_ms(delay_time2);
    053F 910000E1  LDS	R16,_delay_time2
    0541 911000E2  LDS	R17,_delay_time2+1
    0543 DB4C      RCALL	_delay_ms
(0473)    
(0474) 	   turn_left();         //左转
    0544 DB5E      RCALL	_turn_left
(0475)        delay_ms(delay_time1);
    0545 910000E3  LDS	R16,_delay_time1
    0547 911000E4  LDS	R17,_delay_time1+1
    0549 DB46      RCALL	_delay_ms
(0476) 
(0477) 	   forward();           //前行
    054A DB6C      RCALL	_forward
(0478) 	   delay_ms(delay_time2);
    054B 910000E1  LDS	R16,_delay_time2
    054D 911000E2  LDS	R17,_delay_time2+1
    054F DB40      RCALL	_delay_ms
    0550 CFE5      RJMP	0x0536
(0479) 	  }
(0480) }
    0551 9508      RET
(0481) 
(0482) //cny_car   探测白底黑线,沿着黑线运动
(0483) unsigned char cny_in;
(0484) 
(0485) #define cny_delayms 50
(0486) 
(0487) void cny_car()
(0488) {
(0489)  unsigned char cny_times;
(0490)  port_init();
_cny_car:
  cny_times            --> Y+1
    0552 DB25      RCALL	_port_init
(0491)  
(0492)  PORTA = 0xc3;//1100,0011
    0553 EC83      LDI	R24,0xC3
    0554 BB8B      OUT	0x1B,R24
(0493)  
(0494)  mic_startup();
    0555 DBD2      RCALL	_mic_startup
    0556 C024      RJMP	0x057B
(0495)  
(0496)  while(1)
(0497)       {
(0498) 	   sw_touch();
    0557 DB68      RCALL	_sw_touch
(0499) 	   
(0500) 	   cny_in = PINC & 0xe0;
    0558 B383      IN	R24,0x13
    0559 7E80      ANDI	R24,0xE0
    055A 938000D9  STS	_cny_in,R24
(0501) 	   if(cny_in == 0x00 || cny_in == 0x40 || cny_in == 0xa0)
    055C 2388      TST	R24
    055D F021      BEQ	0x0562
    055E 3480      CPI	R24,0x40
    055F F011      BEQ	0x0562
    0560 3A80      CPI	R24,0xA0
    0561 F409      BNE	0x0563
(0502) 	     {//前行
(0503) 	      forward();   //前行
    0562 DB54      RCALL	_forward
(0504) 		 }
(0505) 	   if(cny_in == 0x20 || cny_in == 0x60)
    0563 918000D9  LDS	R24,_cny_in
    0565 3280      CPI	R24,0x20
    0566 F011      BEQ	0x0569
    0567 3680      CPI	R24,0x60
    0568 F421      BNE	0x056D
(0506) 	     {//慢速右转
(0507) 		  turn_right_s();   //慢速右转
    0569 DB3E      RCALL	_turn_right_s
(0508) 		  delay_ms(cny_delayms);
    056A E302      LDI	R16,0x32
    056B E010      LDI	R17,0
    056C DB23      RCALL	_delay_ms
(0509) 		 }
(0510) 	   if(cny_in == 0x80 || cny_in == 0xc0)
    056D 918000D9  LDS	R24,_cny_in
    056F 3880      CPI	R24,0x80
    0570 F011      BEQ	0x0573
    0571 3C80      CPI	R24,0xC0
    0572 F421      BNE	0x0577
(0511) 	     {//慢速左转
(0512)           turn_left_s();    //慢速左转
    0573 DB39      RCALL	_turn_left_s
(0513)           delay_ms(cny_delayms);
    0574 E302      LDI	R16,0x32
    0575 E010      LDI	R17,0
    0576 DB19      RCALL	_delay_ms
(0514)  		 }
(0515) 	   if(cny_in == 0xe0)
    0577 918000D9  LDS	R24,_cny_in
    0579 3E80      CPI	R24,0xE0
    057A F401      BNE	0x057B
    057B CFDB      RJMP	0x0557
(0516) 	     {//前行--探测多次都为 0xe0 ,停止运行
(0517) //			stop();   //停止运动//熄灭指示灯   
(0518) /*
(0519) 	      PORTD = 0xA0;   //前行//1010 0000   
(0520) 	      PORTA = 0xC3;     //1100,0011
(0521) 		  cny_times = 0;
(0522)           delay_ms(cny_delayms);
(0523) 		  while(1)
(0524) 		       {
(0525) 			    cny_in = PINC & 0xe0;
(0526) 				if(cny_in != 0xe0)
(0527) 				  {
(0528) 				   break;
(0529) 				  }
(0530) 				if(cny_in == 0xe0)
(0531) 				  {
(0532) 				   cny_times++;
(0533) 				   if(cny_times == 5)
(0534) 				     {
(0535) 				      while(1)
(0536) 				           {
(0537) 				            PORTD = 0xff;   //停止运动   
(0538)                             PORTA = 0xff;   //熄灭指示灯
(0539) 				           }
(0540) 				     }
(0541) 				  }
(0542) 			   }
(0543) */
(0544) 		 }
(0545) 	  }
(0546) }
    057C 9508      RET
(0547) 
(0548) //追光机器人
(0549) unsigned char cds;
(0550) #define light_delay 100
(0551) void trace_light()
(0552) {
(0553)  port_init();         //PA,PB,PC,PD 初始化
_trace_light:
    057D DAFA      RCALL	_port_init
(0554)  
(0555)  PORTA = 0xbd;//1011,1101
    057E EB8D      LDI	R24,0xBD
    057F BB8B      OUT	0x1B,R24
(0556)  
(0557)  work_status = 0x70;  //置对应的工作状态标志
    0580 E780      LDI	R24,0x70
    0581 938000E8  STS	_work_status,R24
(0558)  
(0559)  mic_startup();       //等待声控启动
    0583 DBA4      RCALL	_mic_startup
    0584 C025      RJMP	0x05AA
(0560)  
(0561)  while(1)
(0562)     {
(0563) 	 sw_touch();          //检测轻触开关
    0585 DB3A      RCALL	_sw_touch
(0564) 	
(0565) 	 cds = PINC & 0x06; //0b0000,0110
    0586 B383      IN	R24,0x13
    0587 7086      ANDI	R24,6
    0588 938000D8  STS	_cds,R24
(0566) 
(0567) 	 if(cds == 0x00)    //左右两侧都感测到光
    058A 2388      TST	R24
    058B F421      BNE	0x0590
(0568) 	   {//直行
(0569) 	    forward();
    058C DB2A      RCALL	_forward
(0570) 		delay_ms(light_delay);  //延时
    058D E604      LDI	R16,0x64
    058E E010      LDI	R17,0
    058F DB00      RCALL	_delay_ms
(0571) 	   } 
(0572) 	 if(cds == 0x02)    //0b0000,0010___pc2(右侧)感测到光
    0590 918000D8  LDS	R24,_cds
    0592 3082      CPI	R24,2
    0593 F421      BNE	0x0598
(0573) 	   {//慢速右转
(0574) 	    turn_right_s();
    0594 DB13      RCALL	_turn_right_s
(0575) 		delay_ms(light_delay);  //延时
    0595 E604      LDI	R16,0x64
    0596 E010      LDI	R17,0
    0597 DAF8      RCALL	_delay_ms
(0576) 	   }
(0577) 	 if(cds == 0x04)    //0b0000,0100___pc1(左侧)感测到光
    0598 918000D8  LDS	R24,_cds
    059A 3084      CPI	R24,4
    059B F421      BNE	0x05A0
(0578) 	   {//慢速左转
(0579) 	    turn_left_s();
    059C DB10      RCALL	_turn_left_s
(0580) 		delay_ms(light_delay);  //延时
    059D E604      LDI	R16,0x64
    059E E010      LDI	R17,0
    059F DAF0      RCALL	_delay_ms
(0581) 	   }
(0582) 	 if(cds == 0x06)
    05A0 918000D8  LDS	R24,_cds
    05A2 3086      CPI	R24,6
    05A3 F431      BNE	0x05AA
(0583) 	   {//停止动作
(0584) 	    PORTA = 0x55;   //延时后停止动作,等待光照重新动作
    05A4 E585      LDI	R24,0x55
    05A5 BB8B      OUT	0x1B,R24
(0585) 		delay_ms(light_delay*2);
    05A6 EC08      LDI	R16,0xC8
    05A7 E010      LDI	R17,0
    0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -