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

📄 sl3010_2.s

📁 单片机开发资料光盘-双龙-686M.zip
💻 S
📖 第 1 页 / 共 4 页
字号:
	rcall _mic_startup
	.dbline 459
; 
; 	   forward();           //前行
	rcall _forward
	.dbline 460
; 	   delay_ms(delay_time2);
	lds R16,_delay_time2
	lds R17,_delay_time2+1
	rcall _delay_ms
	rjmp L197
L196:
	.dbline 463
	.dbline 464
	rcall _sw_touch
	.dbline 466
	rcall _remote_auto_time
	.dbline 468
	rcall _turn_right
	.dbline 469
	lds R16,_delay_time1
	lds R17,_delay_time1+1
	rcall _delay_ms
	.dbline 471
	rcall _forward
	.dbline 472
	lds R16,_delay_time2
	lds R17,_delay_time2+1
	rcall _delay_ms
	.dbline 474
	rcall _turn_left
	.dbline 475
	lds R16,_delay_time1
	lds R17,_delay_time1+1
	rcall _delay_ms
	.dbline 477
	rcall _forward
	.dbline 478
	lds R16,_delay_time2
	lds R17,_delay_time2+1
	rcall _delay_ms
	.dbline 479
L197:
	.dbline 462
	rjmp L196
X14:
	.dbline -2
	.dbline 480
;  
;  while(1)
;       {
; 	   sw_touch();          //检测轻触开关
; 	   
; 	   remote_auto_time();  //遥控器控制直行和转弯时间
; 	   
; 	   turn_right();        //右转
; 	   delay_ms(delay_time1);
; 	
; 	   forward();           //前行
; 	   delay_ms(delay_time2);
;    
; 	   turn_left();         //左转
;        delay_ms(delay_time1);
; 
; 	   forward();           //前行
; 	   delay_ms(delay_time2);
; 	  }
; }
L195:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e cny_car _cny_car fV
;      cny_times -> <dead>
	.even
_cny_car::
	.dbline -1
	.dbline 488
; 
; //cny_car   探测白底黑线,沿着黑线运动
; unsigned char cny_in;
; 
; #define cny_delayms 50
; 
; void cny_car()
; {
	.dbline 490
;  unsigned char cny_times;
;  port_init();
	rcall _port_init
	.dbline 492
;  
;  PORTA = 0xc3;//1100,0011
	ldi R24,195
	out 0x1b,R24
	.dbline 494
;  
;  mic_startup();
	rcall _mic_startup
	rjmp L201
L200:
	.dbline 497
;  
;  while(1)
;       {
	.dbline 498
; 	   sw_touch();
	rcall _sw_touch
	.dbline 500
; 	   
; 	   cny_in = PINC & 0xe0;
	in R24,0x13
	andi R24,224
	sts _cny_in,R24
	.dbline 501
; 	   if(cny_in == 0x00 || cny_in == 0x40 || cny_in == 0xa0)
	tst R24
	breq L206
	cpi R24,64
	breq L206
	cpi R24,160
	brne L203
L206:
	.dbline 502
; 	     {//前行
	.dbline 503
; 	      forward();   //前行
	rcall _forward
	.dbline 504
; 		 }
L203:
	.dbline 505
; 	   if(cny_in == 0x20 || cny_in == 0x60)
	lds R24,_cny_in
	cpi R24,32
	breq L209
	cpi R24,96
	brne L207
L209:
	.dbline 506
; 	     {//慢速右转
	.dbline 507
; 		  turn_right_s();   //慢速右转
	rcall _turn_right_s
	.dbline 508
; 		  delay_ms(cny_delayms);
	ldi R16,50
	ldi R17,0
	rcall _delay_ms
	.dbline 509
; 		 }
L207:
	.dbline 510
; 	   if(cny_in == 0x80 || cny_in == 0xc0)
	lds R24,_cny_in
	cpi R24,128
	breq L212
	cpi R24,192
	brne L210
L212:
	.dbline 511
; 	     {//慢速左转
	.dbline 512
;           turn_left_s();    //慢速左转
	rcall _turn_left_s
	.dbline 513
;           delay_ms(cny_delayms);
	ldi R16,50
	ldi R17,0
	rcall _delay_ms
	.dbline 514
;  		 }
L210:
	.dbline 515
; 	   if(cny_in == 0xe0)
	lds R24,_cny_in
	cpi R24,224
	brne L213
	.dbline 516
; 	     {//前行--探测多次都为 0xe0 ,停止运行
	.dbline 544
; //			stop();   //停止运动//熄灭指示灯   
; /*
; 	      PORTD = 0xA0;   //前行//1010 0000   
; 	      PORTA = 0xC3;     //1100,0011
; 		  cny_times = 0;
;           delay_ms(cny_delayms);
; 		  while(1)
; 		       {
; 			    cny_in = PINC & 0xe0;
; 				if(cny_in != 0xe0)
; 				  {
; 				   break;
; 				  }
; 				if(cny_in == 0xe0)
; 				  {
; 				   cny_times++;
; 				   if(cny_times == 5)
; 				     {
; 				      while(1)
; 				           {
; 				            PORTD = 0xff;   //停止运动   
;                             PORTA = 0xff;   //熄灭指示灯
; 				           }
; 				     }
; 				  }
; 			   }
; */
; 		 }
L213:
	.dbline 545
L201:
	.dbline 496
	rjmp L200
X15:
	.dbline -2
	.dbline 546
; 	  }
; }
L199:
	.dbline 0 ; func end
	ret
	.dbsym l cny_times 1 c
	.dbend
	.dbfunc e trace_light _trace_light fV
	.even
_trace_light::
	.dbline -1
	.dbline 552
; 
; //追光机器人
; unsigned char cds;
; #define light_delay 100
; void trace_light()
; {
	.dbline 553
;  port_init();         //PA,PB,PC,PD 初始化
	rcall _port_init
	.dbline 555
;  
;  PORTA = 0xbd;//1011,1101
	ldi R24,189
	out 0x1b,R24
	.dbline 557
;  
;  work_status = 0x70;  //置对应的工作状态标志
	ldi R24,112
	sts _work_status,R24
	.dbline 559
;  
;  mic_startup();       //等待声控启动
	rcall _mic_startup
	rjmp L217
L216:
	.dbline 562
;  
;  while(1)
;     {
	.dbline 563
; 	 sw_touch();          //检测轻触开关
	rcall _sw_touch
	.dbline 565
; 	
; 	 cds = PINC & 0x06; //0b0000,0110
	in R24,0x13
	andi R24,6
	sts _cds,R24
	.dbline 567
; 
; 	 if(cds == 0x00)    //左右两侧都感测到光
	tst R24
	brne L219
	.dbline 568
; 	   {//直行
	.dbline 569
; 	    forward();
	rcall _forward
	.dbline 570
; 		delay_ms(light_delay);  //延时
	ldi R16,100
	ldi R17,0
	rcall _delay_ms
	.dbline 571
; 	   } 
L219:
	.dbline 572
; 	 if(cds == 0x02)    //0b0000,0010___pc2(右侧)感测到光
	lds R24,_cds
	cpi R24,2
	brne L221
	.dbline 573
; 	   {//慢速右转
	.dbline 574
; 	    turn_right_s();
	rcall _turn_right_s
	.dbline 575
; 		delay_ms(light_delay);  //延时
	ldi R16,100
	ldi R17,0
	rcall _delay_ms
	.dbline 576
; 	   }
L221:
	.dbline 577
; 	 if(cds == 0x04)    //0b0000,0100___pc1(左侧)感测到光
	lds R24,_cds
	cpi R24,4
	brne L223
	.dbline 578
; 	   {//慢速左转
	.dbline 579
; 	    turn_left_s();
	rcall _turn_left_s
	.dbline 580
; 		delay_ms(light_delay);  //延时
	ldi R16,100
	ldi R17,0
	rcall _delay_ms
	.dbline 581
; 	   }
L223:
	.dbline 582
; 	 if(cds == 0x06)
	lds R24,_cds
	cpi R24,6
	brne L225
	.dbline 583
; 	   {//停止动作
	.dbline 584
; 	    PORTA = 0x55;   //延时后停止动作,等待光照重新动作
	ldi R24,85
	out 0x1b,R24
	.dbline 585
; 		delay_ms(light_delay*2);
	ldi R16,200
	ldi R17,0
	rcall _delay_ms
	.dbline 586
; 		stop();
	rcall _stop
	.dbline 587
; 	   }
L225:
	.dbline 588
L217:
	.dbline 561
	rjmp L216
X16:
	.dbline -2
	.dbline 589
; 	}
; }
L215:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;      pd_select -> R20
;  remote_select -> R22
	.even
_main::
	.dbline -1
	.dbline 592
; 
; void main()
; {
	.dbline 595
;  unsigned char pd_select,remote_select;
;  
;   port_init();         //PA,PB,PC,PD 初始化
	rcall _port_init
	.dbline 597
;   
;   work_status = 0x67;  //置对应的工作状态标志
	ldi R24,103
	sts _work_status,R24
	.dbline 599
;   
;   PORTA = 0x7e;
	ldi R24,126
	out 0x1b,R24
	rjmp L229
L228:
	.dbline 602
;   
;   while(1)
;    {
	.dbline 656
; /*
; 	pd_select = PIND & 0x0f;
;     if(pd_select == 0x0e)//pd0=0,其它为高电平
;       {
;        while(1)
; 	     {
; 	      delay_ms(500);//消除抖动
; 		  pd_select = PIND & 0x0f;
; 		  if(pd_select == 0x0e)//pd0=0,其它为高电平
; 		    {remote_car();}//运行遥控车程序
; 		  else
; 		    break;
; 	     }
;       }
;     if(pd_select == 0x0d)//pd1=0,其它为高电平
;       {
;        while(1)
; 	     {
; 	      delay_ms(500);//消除抖动
; 		  pd_select = PIND & 0x0f;
; 		  if(pd_select == 0x0d)//pd1=0,其它为高电平
; 		    {xuanya_car();}//运行悬崖车程序
; 		  else
; 		    break;
; 	     }
;       }
;     if(pd_select == 0x0b)//pd2=0,其它为高电平
;       {
;        while(1)
; 	     {
; 	      delay_ms(500);//消除抖动
; 		  pd_select = PIND & 0x0f;
; 		  if(pd_select == 0x0b)//pd1=0,其它为高电平
; 		    {music_car();}//运行音乐车程序
; 		  else
; 		    break;
; 	     }
;       }
;     if(pd_select == 0x07)//pd3=0,其它为高电平
;       {
;        while(1)
; 	     {
; 	      delay_ms(500);//消除抖动
; 		  pd_select = PIND & 0x0f;
; 		  if(pd_select == 0x07)//pd1=0,其它为高电平
; 		    {led_car();}//运行霓虹车程序
; 		  else
; 		    break;
; 	     }
;       }
; */
; //********************************************************//
; //              pd3~pd0 的短路块均接上                    //
;     pd_select = PIND & 0x0f;
	in R20,0x10
	andi R20,15
	.dbline 657
; 	if(pd_select == 0x00)    //pd0,pd1,pd2,pd3均为低电平
	breq X18
	rjmp L231
X18:
	.dbline 658
; 	  {
	.dbline 659
;        remote_select = PINB & 0x0f;//检测遥控器是否有键按下
	in R22,0x16
	andi R22,15
	.dbline 660
;        if(remote_select == 0x04)// A
	cpi R22,4
	brne L233
	.dbline 661
;          {
	rjmp L236
L235:
	.dbline 663
;           while(1)
; 	        {
	.dbline 664
; 	         delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 665
; 		     remote_select = PINB & 0x0f;
	in R22,0x16
	andi R22,15
	.dbline 666
; 		     if(remote_select == 0x04)// A
	cpi R22,4
	brne L237
	.dbline 667
; 		       {remote_car();}//运行遥控车程序
	.dbline 667
	rcall _remote_car
	.dbline 667
	.dbline 669
; 		     else
; 		       break;
L239:
	.dbline 670
L236:
	.dbline 662
	rjmp L235
L237:
	.dbline 671
; 	        }
;          }
L233:
	.dbline 672
;        if(remote_select == 0x02)// B
	cpi R22,2
	brne L240
	.dbline 673
;          {
	rjmp L243
L242:
	.dbline 675
;           while(1)
; 	        {
	.dbline 676
; 	         delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 677
; 		     remote_select = PINB & 0x0f;
	in R22,0x16
	andi R22,15
	.dbline 678
; 		     if(remote_select == 0x02)// B
	cpi R22,2
	brne L244
	.dbline 679
; 		       {xuanya_car();}//运行悬崖车程序
	.dbline 679
	rcall _xuanya_car
	.dbline 679
	.dbline 681
; 		     else
; 		       break;
L246:
	.dbline 682
L243:
	.dbline 674
	rjmp L242
L244:
	.dbline 683
; 	        }
;          }
L240:
	.dbline 684
;        if(remote_select == 0x08)// C
	cpi R22,8
	brne L247
	.dbline 685
;          {
	rjmp L250
L249:
	.dbline 687
;           while(1)
; 	        {
	.dbline 688
; 	         delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 689
; 		     remote_select = PINB & 0x0f;
	in R22,0x16
	andi R22,15
	.dbline 690
; 		     if(remote_select == 0x08)// C
	cpi R22,8
	brne L251
	.dbline 691
; 		       {music_car();}//运行音乐车程序
	.dbline 691
	rcall _music_car
	.dbline 691
	.dbline 693
; 		     else
; 		       break;
L253:
	.dbline 694
L250:
	.dbline 686
	rjmp L249
L251:
	.dbline 695
; 	        }
;          }
L247:
	.dbline 696
;        if(remote_select == 0x01)// D
	cpi R22,1
	brne L254
	.dbline 697
;          {
	rjmp L257
L256:
	.dbline 699
;           while(1)
; 	        {
	.dbline 700
; 	         delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 701
; 		     remote_select = PINB & 0x0f;
	in R22,0x16
	andi R22,15
	.dbline 702
; 		     if(remote_select == 0x01)// D
	cpi R22,1
	brne L258
	.dbline 703
; 		       {led_car();}//运行霓虹车程序
	.dbline 703
	rcall _led_car
	.dbline 703
	.dbline 705
; 		     else
; 		       break;
L260:
	.dbline 706
L257:
	.dbline 698
	rjmp L256
L258:
	.dbline 707
; 	        }
;          }
L254:
	.dbline 708
; 	  }
L231:
	.dbline 711
; //*******************************************************//
; //            pd3~pd0 的短路块没有全部接上               //
; 	if(pd_select != 0x00)    //pd0,pd1,pd2,pd3 不全为低电平
	tst R20
	brne X19
	rjmp L261
X19:
	.dbline 712
;       {
	.dbline 713
;        remote_select = PINB & 0x0f;//检测遥控器是否有键按下
	in R22,0x16
	andi R22,15
	.dbline 714
;        if(remote_select == 0x04)// A
	cpi R22,4
	brne L263
	.dbline 715
;          {
	rjmp L266
L265:
	.dbline 717
;           while(1)
; 	        {
	.dbline 718
; 	         delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 719
; 		     remote_select = PINB & 0x0f;
	in R22,0x16
	andi R22,15
	.dbline 720
; 		     if(remote_select == 0x04)// A
	cpi R22,4
	brne L267
	.dbline 721
; 		       {auto_car1();}//机器人走四方形路线
	.dbline 721
	rcall _auto_car1
	.dbline 721
	.dbline 723
; 		     else
; 		       break;
L269:
	.dbline 724
L266:
	.dbline 716
	rjmp L265
L267:
	.dbline 725
; 	        }
;          }
L263:
	.dbline 726
;        if(remote_select == 0x02)// B
	cpi R22,2
	brne L270
	.dbline 727
;          {
	rjmp L273
L272:
	.dbline 729
;           while(1)
; 	        {
	.dbline 730
; 	         delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 731
; 		     remote_select = PINB & 0x0f;
	in R22,0x16
	andi R22,15
	.dbline 732
; 		     if(remote_select == 0x02)// B
	cpi R22,2
	brne L274
	.dbline 733
; 		       {auto_car8();}//机器人走"8"字
	.dbline 733
	rcall _auto_car8
	.dbline 733
	.dbline 735
; 		     else
; 		       break;
L276:
	.dbline 736
L273:
	.dbline 728
	rjmp L272
L274:
	.dbline 737
; 	        }
;          }
L270:
	.dbline 738
;        if(remote_select == 0x08)// C
	cpi R22,8
	brne L277
	.dbline 739
;          {
	rjmp L280
L279:
	.dbline 741
;           while(1)
; 	        {
	.dbline 742
; 	         delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 743
; 		     remote_select = PINB & 0x0f;
	in R22,0x16
	andi R22,15
	.dbline 744
; 		     if(remote_select == 0x08)// C
	cpi R22,8
	brne L281
	.dbline 745
; 		       {cny_car();}//寻迹机器人,探测白底黑线,沿黑线运动
	.dbline 745
	rcall _cny_car
	.dbline 745
	.dbline 747
; 		     else
; 		       break;
L283:
	.dbline 748
L280:
	.dbline 740
	rjmp L279
L281:
	.dbline 749
; 	        }
;          }
L277:
	.dbline 750
;        if(remote_select == 0x01)// D
	cpi R22,1
	brne L284
	.dbline 751
;          {
	rjmp L287
L286:
	.dbline 753
;           while(1)
; 	        {
	.dbline 754
; 	         delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 755
; 		     remote_select = PINB & 0x0f;
	in R22,0x16
	andi R22,15
	.dbline 756
; 		     if(remote_select == 0x01)// D
	cpi R22,1
	brne L288
	.dbline 757
; 		       {trace_light();}//追光机器人
	.dbline 757
	rcall _trace_light
	.dbline 757
	.dbline 759
; 		     else
; 		       break;
L290:
	.dbline 760
L287:
	.dbline 752
	rjmp L286
L288:
	.dbline 761
; 	        }
;          }
L284:
	.dbline 762
; 	  }	
L261:
	.dbline 763
L229:
	.dbline 601
	rjmp L228
X17:
	.dbline -2
	.dbline 764
;    }  
; }
L227:
	.dbline 0 ; func end
	ret
	.dbsym r pd_select 20 c
	.dbsym r remote_select 22 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\icc\iccavr\sl3010\sl3010_2\sl3010_2.c
_cds::
	.blkb 1
	.dbsym e cds _cds c
_cny_in::
	.blkb 1
	.dbsym e cny_in _cny_in c
_pd::
	.blkb 1
	.dbsym e pd _pd c
_pc::
	.blkb 1
	.dbsym e pc _pc c
_pb::
	.blkb 1
	.dbsym e pb _pb c
_toneconst::
	.blkb 2
	.dbsym e toneconst _toneconst i
_timers::
	.blkb 1
	.dbsym e timers _timers c
_pa::
	.blkb 1
	.dbsym e pa _pa c
_delay_time2::
	.blkb 2
	.dbsym e delay_time2 _delay_time2 i
_delay_time1::
	.blkb 2
	.dbsym e delay_time1 _delay_time1 i
_mic_in::
	.blkb 1
	.dbfile e:/ICC/include/sl3010.c
	.dbsym e mic_in _mic_in c
_remote_in::
	.blkb 1
	.dbsym e remote_in _remote_in c
_sw_in::
	.blkb 1
	.dbsym e sw_in _sw_in c
_work_status::
	.blkb 1
	.dbsym e work_status _work_status c

⌨️ 快捷键说明

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