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

📄 sl3010_3.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0187) 			temp1=EEPROMread((int)&sound[sound_add]); 
    0258 E081      LDI	R24,1
    0259 E090      LDI	R25,0
    025A 91000060  LDS	R16,0x60
    025C 91100061  LDS	R17,0x61
    025E 0F08      ADD	R16,R24
    025F 1F19      ADC	R17,R25
    0260 D252      RCALL	_EEPROMread
    0261 93000071  STS	_temp1,R16
    0263 90200071  LDS	R2,_temp1
    0265 2022      TST	R2
    0266 F009      BEQ	0x0268
    0267 CFB0      RJMP	0x0218
(0188) 			}
(0189) 		delay_ms(1000);	                                         	
    0268 EE08      LDI	R16,0xE8
    0269 E013      LDI	R17,3
(0190) 	 }	 	 	 	 
    026A CE26      RJMP	_delay_ms
(0191) 	  
(0192) //  电机驱动信号                       led灯指示电机状态 
(0193) //PORTD = 0xA0;//前行//1010 0000        //PORTA = 0xC3;//1100,0011
(0194) //PORTD = 0x90;//左转//1001 0000快速左转//PORTA = 0x33;//0011,0011
(0195) //PORTD = 0x80;//左转//1000 0000慢速左转//PORTA = 0xF3;//1111,0011
(0196) //PORTD = 0x60;//右转//0110 0000快速右转//PORTA = 0xCC;//1100,1100
(0197) //PORTD = 0x20;//右转//0010 0000慢速右转//PORTA = 0xCF;//1100,1111
(0198) //PORTD = 0x50;//后退//0101 0000        //PORTA = 0x3C;//0011,1100
(0199) 
(0200) //PC3声控启动
(0201) //  用PD7~PD4来作为电机驱动端
(0202) 
(0203) void xuanya_car(void)
(0204) {
(0205)  PORTA = 0xa5;//1010,0101
_xuanya_car:
    026B EA85      LDI	R24,0xA5
    026C BB8B      OUT	0x1B,R24
(0206) 
(0207)  work_status = 0x20;//置对应的工作状态标志
    026D E280      LDI	R24,0x20
    026E 9380007C  STS	_work_status,R24
(0208)  
(0209)  mic_startup();       //等待声控启动
    0270 DEB8      RCALL	_mic_startup
    0271 C05E      RJMP	0x02D0
(0210)  
(0211)  while(1)
(0212)    {//左(pc7)  中(pc6)  右(pc5)
(0213)     
(0214) 	sw_touch();          //检测轻触开关
    0272 DE4E      RCALL	_sw_touch
(0215) 	
(0216) 	pc = PINC & 0x10;
    0273 B383      IN	R24,0x13
    0274 7180      ANDI	R24,0x10
    0275 9380006E  STS	_pc,R24
(0217) 	if(pc == 0x00)
    0277 2388      TST	R24
    0278 F441      BNE	0x0281
(0218) 	  {//后退//左转
(0219) 	   backward();//后退
    0279 DE39      RCALL	_backward
(0220) 	   delay_ms(xuanya_delayms);
    027A E20C      LDI	R16,0x2C
    027B E011      LDI	R17,1
    027C DE14      RCALL	_delay_ms
(0221) 	   turn_right();//左转
    027D DE21      RCALL	_turn_right
(0222) 	   delay_ms(xuanya_delayms/2);
    027E E906      LDI	R16,0x96
    027F E010      LDI	R17,0
    0280 DE10      RCALL	_delay_ms
(0223) 	  }
(0224)     pc = PINC & 0xE0;
    0281 B383      IN	R24,0x13
    0282 7E80      ANDI	R24,0xE0
    0283 9380006E  STS	_pc,R24
(0225)     if(pc == 0x40)
    0285 3480      CPI	R24,0x40
    0286 F441      BNE	0x028F
(0226) 	  {//后退//左转
(0227) 	   backward();//后退
    0287 DE2B      RCALL	_backward
(0228) 	   delay_ms(xuanya_delayms);
    0288 E20C      LDI	R16,0x2C
    0289 E011      LDI	R17,1
    028A DE06      RCALL	_delay_ms
(0229) 	   turn_right();//左转
    028B DE13      RCALL	_turn_right
(0230) 	   delay_ms(xuanya_delayms/2);
    028C E906      LDI	R16,0x96
    028D E010      LDI	R17,0
    028E DE02      RCALL	_delay_ms
(0231) 	  }
(0232) 	if(pc == 0x80)
    028F 9180006E  LDS	R24,_pc
    0291 3880      CPI	R24,0x80
    0292 F441      BNE	0x029B
(0233) 	  {//后退//左转
(0234) 	   backward();//后退
    0293 DE1F      RCALL	_backward
(0235) 	   delay_ms(xuanya_delayms);
    0294 E20C      LDI	R16,0x2C
    0295 E011      LDI	R17,1
    0296 DDFA      RCALL	_delay_ms
(0236) 	   turn_right();//左转
    0297 DE07      RCALL	_turn_right
(0237) 	   delay_ms(xuanya_delayms/2);
    0298 E906      LDI	R16,0x96
    0299 E010      LDI	R17,0
    029A DDF6      RCALL	_delay_ms
(0238) 	  }
(0239) 	if(pc == 0x20)
    029B 9180006E  LDS	R24,_pc
    029D 3280      CPI	R24,0x20
    029E F441      BNE	0x02A7
(0240) 	  {//后退//左转
(0241) 	   backward();//后退
    029F DE13      RCALL	_backward
(0242) 	   delay_ms(xuanya_delayms);
    02A0 E20C      LDI	R16,0x2C
    02A1 E011      LDI	R17,1
    02A2 DDEE      RCALL	_delay_ms
(0243) 	   turn_right();//左转
    02A3 DDFB      RCALL	_turn_right
(0244) 	   delay_ms(xuanya_delayms/2);
    02A4 E906      LDI	R16,0x96
    02A5 E010      LDI	R17,0
    02A6 DDEA      RCALL	_delay_ms
(0245) 	  }
(0246) 	if(pc == 0xc0)
    02A7 9180006E  LDS	R24,_pc
    02A9 3C80      CPI	R24,0xC0
    02AA F441      BNE	0x02B3
(0247) 	  {//后退//左转
(0248) 	   backward();//后退
    02AB DE07      RCALL	_backward
(0249) 	   delay_ms(xuanya_delayms);
    02AC E20C      LDI	R16,0x2C
    02AD E011      LDI	R17,1
    02AE DDE2      RCALL	_delay_ms
(0250) 	   turn_right();//左转
    02AF DDEF      RCALL	_turn_right
(0251) 	   delay_ms(xuanya_delayms/2);
    02B0 E906      LDI	R16,0x96
    02B1 E010      LDI	R17,0
    02B2 DDDE      RCALL	_delay_ms
(0252) 	  }
(0253) 	if(pc == 0x60)
    02B3 9180006E  LDS	R24,_pc
    02B5 3680      CPI	R24,0x60
    02B6 F441      BNE	0x02BF
(0254) 	  {//后退//左转
(0255) 	   backward();//后退
    02B7 DDFB      RCALL	_backward
(0256) 	   delay_ms(xuanya_delayms);
    02B8 E20C      LDI	R16,0x2C
    02B9 E011      LDI	R17,1
    02BA DDD6      RCALL	_delay_ms
(0257) 	   turn_right();//左转
    02BB DDE3      RCALL	_turn_right
(0258) 	   delay_ms(xuanya_delayms/2);
    02BC E906      LDI	R16,0x96
    02BD E010      LDI	R17,0
    02BE DDD2      RCALL	_delay_ms
(0259) 	  }
(0260) 	if(pc == 0xE0)
    02BF 9180006E  LDS	R24,_pc
    02C1 3E80      CPI	R24,0xE0
    02C2 F461      BNE	0x02CF
(0261) 	  {
(0262)        //刹车 //led灯为流水灯
(0263)        stop();
    02C3 DDF9      RCALL	_stop
(0264)        PORTA = 0x3C;
    02C4 E38C      LDI	R24,0x3C
    02C5 BB8B      OUT	0x1B,R24
(0265)        delay_ms(xuanya_delayms);
    02C6 E20C      LDI	R16,0x2C
    02C7 E011      LDI	R17,1
    02C8 DDC8      RCALL	_delay_ms
(0266) 	   PORTA = 0xC3;
    02C9 EC83      LDI	R24,0xC3
    02CA BB8B      OUT	0x1B,R24
(0267)        delay_ms(xuanya_delayms);
    02CB E20C      LDI	R16,0x2C
    02CC E011      LDI	R17,1
    02CD DDC3      RCALL	_delay_ms
(0268) 	  } 
    02CE C001      RJMP	0x02D0
(0269) 	else
(0270) 	  {
(0271) 	    forward();//前行
    02CF DDE8      RCALL	_forward
    02D0 CFA1      RJMP	0x0272
(0272) 	  }
(0273)    }
(0274) }
    02D1 9508      RET
_remote_car:
    02D2 D179      RCALL	push_gset1
(0275) 
(0276) void remote_car()
(0277) {//遥控车程序
(0278)  
(0279)  port_init();//调用端口初始化函数
    02D3 DDA5      RCALL	_port_init
(0280)  
(0281)  work_status = 0x60;//置对应的工作状态标志
    02D4 E680      LDI	R24,0x60
    02D5 9380007C  STS	_work_status,R24
(0282) remote_rst: 
(0283)  PORTA = 0x0F;
    02D7 E08F      LDI	R24,0xF
    02D8 BB8B      OUT	0x1B,R24
(0284)  mic_startup();//等待声控启动函数
    02D9 DE4F      RCALL	_mic_startup
    02DA C040      RJMP	0x031B
(0285)  
(0286)  while(1)
(0287)      {
(0288) 	  
(0289) 	  sw_touch();//检测轻触开关
    02DB DDE5      RCALL	_sw_touch
(0290) 	  
(0291) 	  remote_in = PINB & 0x0F;
    02DC B386      IN	R24,0x16
    02DD 708F      ANDI	R24,0xF
    02DE 9380007A  STS	_remote_in,R24
(0292)       switch (remote_in)
    02E0 2F48      MOV	R20,R24
    02E1 2755      CLR	R21
    02E2 3040      CPI	R20,0
    02E3 0745      CPC	R20,R21
    02E4 F089      BEQ	0x02F6
    02E5 3041      CPI	R20,1
    02E6 E0E0      LDI	R30,0
    02E7 075E      CPC	R21,R30
    02E8 F119      BEQ	0x030C
    02E9 3042      CPI	R20,2
    02EA E0E0      LDI	R30,0
    02EB 075E      CPC	R21,R30
    02EC F099      BEQ	0x0300
    02ED 3044      CPI	R20,4
    02EE E0E0      LDI	R30,0
    02EF 075E      CPC	R21,R30
    02F0 F051      BEQ	0x02FB
    02F1 3048      CPI	R20,0x8
    02F2 E0E0      LDI	R30,0
    02F3 075E      CPC	R21,R30
    02F4 F081      BEQ	0x0305
    02F5 C01A      RJMP	0x0310
(0293)       	{//检测遥控器是否有键按下
(0294)       case 0x00:
(0295) 		 forward();           //前行
    02F6 DDC1      RCALL	_forward
(0296) 		 rst_time=0;
    02F7 2422      CLR	R2
    02F8 92200069  STS	_rst_time,R2
(0297)       	break;
    02FA C015      RJMP	0x0310
(0298)       case 0x04:  // < A >
(0299) 		 turn_right();        //右转
    02FB DDA3      RCALL	_turn_right
(0300) 		 rst_time=0;
    02FC 2422      CLR	R2
    02FD 92200069  STS	_rst_time,R2
(0301)       	break;
    02FF C010      RJMP	0x0310
(0302)       case 0x02:  // < B >
(0303) 		 backward();          //后退
    0300 DDB2      RCALL	_backward
(0304) 		 rst_time=0;
    0301 2422      CLR	R2
    0302 92200069  STS	_rst_time,R2
(0305)       	break;
    0304 C00B      RJMP	0x0310
(0306)       case 0x08:  // < C >
(0307) 		 stop();              //停止运动
    0305 DDB7      RCALL	_stop
(0308) 		 rst_time++;
    0306 91800069  LDS	R24,_rst_time
    0308 5F8F      SUBI	R24,0xFF
    0309 93800069  STS	_rst_time,R24
(0309)       	break;
    030B C004      RJMP	0x0310
(0310)       case 0x01:  // < D >
(0311)          turn_left();         //左转
    030C DD97      RCALL	_turn_left
(0312) 		 rst_time=0;
    030D 2422      CLR	R2
    030E 92200069  STS	_rst_time,R2
(0313)       	break;
(0314)       	}
(0315) 	  delay_ms(200);
    0310 EC08      LDI	R16,0xC8
    0311 E010      LDI	R17,0
    0312 DD7E      RCALL	_delay_ms
(0316) 	 if(rst_time == 50)
    0313 91800069  LDS	R24,_rst_time
    0315 3382      CPI	R24,0x32
    0316 F421      BNE	0x031B
(0317) 	   {//当按住< C > 键的持续时间超过10S,遥控机器人复位,等待声控重起运行
(0318) 		rst_time=0;
    0317 2422      CLR	R2
    0318 92200069  STS	_rst_time,R2
(0319) 		goto remote_rst;
    031A CFBC      RJMP	0x02D7
    031B CFBF      RJMP	0x02DB
(0320) 	   }
(0321) 	 }
(0322) }
    031C D132      RCALL	pop_gset1
    031D 9508      RET
(0323) 
(0324) //自走车   机器人走四方形路线,遥控器调节行走路线
(0325) 
(0326) void auto_car()
(0327) {
(0328)  port_init();//PA,PB,PC,PD 初始化
_auto_car:
    031E DD5A      RCALL	_port_init
(0329)  
(0330)  work_status = 0x51;//置对应的工作状态标志
    031F E581      LDI	R24,0x51
    0320 9380007C  STS	_work_status,R24
(0331)  
(0332)  PORTA = 0x44;//0100,0100
    0322 E484      LDI	R24,0x44
    0323 BB8B      OUT	0x1B,R24
(0333)  
(0334)  delay_time1=22;    //转弯时间 22*25ms =  550ms
    0324 E186      LDI	R24,0x16
    0325 E090      LDI	R25,0
    0326 93900078  STS	_delay_time1+1,R25
    0328 93800077  STS	_delay_time1,R24
(0335)  delay_time2=48;    //前行时间 48*25ms = 1200ms
    032A E380      LDI	R24,0x30
    032B 93900076  STS	_delay_time2+1,R25
    032D 93800075  STS	_delay_time2,R24
(0336) 
(0337)  mic_startup();//等待声控启动
    032F DDF9      RCALL	_mic_startup
(0338) 
(0339)   gzsl=0x11;t0_times=0;
    0330 E181      LDI	R24,0x11
    0331 93800065  STS	_gzsl,R24
    0333 2422      CLR	R2
    0334 92200064  STS	_t0_times,R2
(0340)   CLI(); //disable all interrupts
    0336 94F8      BCLR	7
(0341)   timer0_init();
    0337 DE68      RCALL	_timer0_init
(0342) 
(0343)   MCUCR = 0x00;
    0338 2422      CLR	R2
    0339 BE25      OUT	0x35,R2
(0344)   GIMSK = 0x00;
    033A BE2B      OUT	0x3B,R2
(0345)   TIMSK|=(1<<TOIE0);
    033B B789      IN	R24,0x39
    033C 6082      ORI	R24,2
    033D BF89      OUT	0x39,R24
(0346)   SEI(); //re-enable interrupts
    033E 9478      BSET	7
(0347) 
(0348) 	   forward();             //前行
    033F DD78      RCALL	_forward
(0349) 	   delay_ms(200);         
    0340 EC08      LDI	R16,0xC8
    0341 E010      LDI	R17,0
    0342 DD4E      RCALL	_delay_ms
    0343 C001      RJMP	0x0345
(0350)  
(0351)  while(1)
(0352)       {
(0353)        music_car();
    0344 DEC3      RCALL	_music_car
    0345 CFFE      RJMP	0x0344
(0354) 	  }
(0355) }
    0346 9508      RET
(0356) 
(0357) //cny_car   探测白底黑线,沿着黑线运动
(0358) void cny_car()
(0359) {
(0360)  port_init();         //PA,PB,PC,PD 初始化
_cny_car:
    0347 DD31      RCALL	_port_init
(0361)  
(0362)  PORTA = 0xc3;		  //1100,0011
    0348 EC83      LDI	R24,0xC3
    0349 BB8B      OUT	0x1B,R24
(0363)  
(0364) cny_car_start: 
(0365)  mic_startup();       //等待声控启动
    034A DDDE      RCALL	_mic_startup
    034B C03C      RJMP	0x0388
(0366)  
(0367)  while(1)
(0368)       {
(0369) 	   sw_touch();
    034C DD74      RCALL	_sw_touch
(0370) 	   
(0371) 	   cny_in = PINC & 0xe0;
    034D B383      IN	R24,0x13
    034E 7E80      ANDI	R24,0xE0
    034F 9380006B  STS	_cny_in,R24
(0372) 	   if(cny_in == 0x00 || cny_in == 0x40 || cny_in == 0xa0)
    0351 2388      TST	R24
    0352 F021      BEQ	0x0357
    0353 3480      CPI	R24,0x40
    0354 F011      BEQ	0x0357
    0355 3A80      CPI	R24,0xA0
    0356 F421      BNE	0x035B
(0373) 	     {//前行
(0374) 	      forward();   //前行
    0357 DD60      RCALL	_forward
(0375) 		  cny_times = 0x00;
    0358 2422      CLR	R2
    0359 9220006A  STS	_cny_times,R2
(0376) 		 }
(0377) 	   if(cny_in == 0x20 || cny_in == 0x60)
    035B 9180006B  LDS	R24,_cny_in
    035D 3280      CPI	R24,0x20
    035E F011      BEQ	0x0361
    035F 3680      CPI	R24,0x60
    0360 F439      BNE	0x0368
(0378) 	     {//慢速右转
(0379) 		  turn_right_s();   //慢速右转
    0361 DD47      RCALL	_turn_right_s
(0380) 		  delay_ms(cny_delayms);
    0362 E302      LDI	R16,0x32
    0363 E010      LDI	R17,0
    0364 DD2C      RCALL	_delay_ms
(0381) 		  cny_times = 0x00;
    0365 2422      CLR	R2
    0366 9220006A  STS	_cny_times,R2
(0382) 		 }
(0383) 	   if(cny_in == 0x80 || cny_in == 0xc0)
    0368 9180006B  LDS	R24,_cny_in
    036A 3880      CPI	R24,0x80
    036B F011      BEQ	0x036E
    036C 3C80      CPI	R24,0xC0
    036D F439      BNE	0x0375
(0384) 	     {//慢速左转
(0385)           turn_left_s();    //慢速左转
    036E DD3F      RCALL	_turn_left_s
(0386)           delay_ms(cny_delayms);
    036F E302      LDI	R16,0x32
    0370 E010      LDI	R17,0
    0371 DD1F      RCALL	_delay_ms
(0387) 		  cny_times = 0x00;
    0372 2422      CLR	R2
    0373 9220006A  STS	_cny_times,R2
(0388)  		 }
(0389) 	   if(cny_in == 0xe0)
    0375 9180006B  LDS	R24,_cny_in
    0377 3E80      CPI	R24,0xE0
    0378 F479      BNE	0x0388
(0390) 	     {//前行--探测多次都为 0xe0 ,停止运行
(0391) 		  forward();
    0379 DD3E      RCALL	_forward
(0392) 		  cny_times++;
    037A 9180006A  LDS	R24,_cny_times

⌨️ 快捷键说明

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