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

📄 sl3010_3.s

📁 单片机开发资料光盘-双龙-686M.zip
💻 S
📖 第 1 页 / 共 3 页
字号:
	.dbline 334
;  
;  delay_time1=22;    //转弯时间 22*25ms =  550ms
	ldi R24,22
	ldi R25,0
	sts _delay_time1+1,R25
	sts _delay_time1,R24
	.dbline 335
;  delay_time2=48;    //前行时间 48*25ms = 1200ms
	ldi R24,48
	sts _delay_time2+1,R25
	sts _delay_time2,R24
	.dbline 337
; 
;  mic_startup();//等待声控启动
	rcall _mic_startup
	.dbline 339
; 
;   gzsl=0x11;t0_times=0;
	ldi R24,17
	sts _gzsl,R24
	.dbline 339
	clr R2
	sts _t0_times,R2
	.dbline 340
;   CLI(); //disable all interrupts
	cli
	.dbline 341
;   timer0_init();
	rcall _timer0_init
	.dbline 343
; 
;   MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 344
;   GIMSK = 0x00;
	out 0x3b,R2
	.dbline 345
;   TIMSK|=(1<<TOIE0);
	in R24,0x39
	ori R24,2
	out 0x39,R24
	.dbline 346
;   SEI(); //re-enable interrupts
	sei
	.dbline 348
; 
; 	   forward();             //前行
	rcall _forward
	.dbline 349
; 	   delay_ms(200);         
	ldi R16,200
	ldi R17,0
	rcall _delay_ms
	rjmp L120
L119:
	.dbline 352
	.dbline 353
	rcall _music_car
	.dbline 354
L120:
	.dbline 351
	rjmp L119
X12:
	.dbline -2
	.dbline 355
;  
;  while(1)
;       {
;        music_car();
; 	  }
; }
L118:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e cny_car _cny_car fV
	.even
_cny_car::
	.dbline -1
	.dbline 359
; 
; //cny_car   探测白底黑线,沿着黑线运动
; void cny_car()
; {
	.dbline 360
;  port_init();         //PA,PB,PC,PD 初始化
	rcall _port_init
	.dbline 362
;  
;  PORTA = 0xc3;		  //1100,0011
	ldi R24,195
	out 0x1b,R24
L123:
	.dbline 365
;  
; cny_car_start: 
;  mic_startup();       //等待声控启动
	rcall _mic_startup
	rjmp L125
L124:
	.dbline 368
;  
;  while(1)
;       {
	.dbline 369
; 	   sw_touch();
	rcall _sw_touch
	.dbline 371
; 	   
; 	   cny_in = PINC & 0xe0;
	in R24,0x13
	andi R24,224
	sts _cny_in,R24
	.dbline 372
; 	   if(cny_in == 0x00 || cny_in == 0x40 || cny_in == 0xa0)
	tst R24
	breq L130
	cpi R24,64
	breq L130
	cpi R24,160
	brne L127
L130:
	.dbline 373
; 	     {//前行
	.dbline 374
; 	      forward();   //前行
	rcall _forward
	.dbline 375
; 		  cny_times = 0x00;
	clr R2
	sts _cny_times,R2
	.dbline 376
; 		 }
L127:
	.dbline 377
; 	   if(cny_in == 0x20 || cny_in == 0x60)
	lds R24,_cny_in
	cpi R24,32
	breq L133
	cpi R24,96
	brne L131
L133:
	.dbline 378
; 	     {//慢速右转
	.dbline 379
; 		  turn_right_s();   //慢速右转
	rcall _turn_right_s
	.dbline 380
; 		  delay_ms(cny_delayms);
	ldi R16,50
	ldi R17,0
	rcall _delay_ms
	.dbline 381
; 		  cny_times = 0x00;
	clr R2
	sts _cny_times,R2
	.dbline 382
; 		 }
L131:
	.dbline 383
; 	   if(cny_in == 0x80 || cny_in == 0xc0)
	lds R24,_cny_in
	cpi R24,128
	breq L136
	cpi R24,192
	brne L134
L136:
	.dbline 384
; 	     {//慢速左转
	.dbline 385
;           turn_left_s();    //慢速左转
	rcall _turn_left_s
	.dbline 386
;           delay_ms(cny_delayms);
	ldi R16,50
	ldi R17,0
	rcall _delay_ms
	.dbline 387
; 		  cny_times = 0x00;
	clr R2
	sts _cny_times,R2
	.dbline 388
;  		 }
L134:
	.dbline 389
; 	   if(cny_in == 0xe0)
	lds R24,_cny_in
	cpi R24,224
	brne L137
	.dbline 390
; 	     {//前行--探测多次都为 0xe0 ,停止运行
	.dbline 391
; 		  forward();
	rcall _forward
	.dbline 392
; 		  cny_times++;
	lds R24,_cny_times
	subi R24,255    ; addi 1
	sts _cny_times,R24
	.dbline 393
; 		  delay_ms(10);
	ldi R16,10
	ldi R17,0
	rcall _delay_ms
	.dbline 394
; 		  if(cny_times == 0x64)
	lds R24,_cny_times
	cpi R24,100
	brne L139
	.dbline 395
; 			{
	.dbline 396
; 			 stop();   //停止运动//熄灭指示灯   
	rcall _stop
	.dbline 397
;              goto cny_car_start;
	rjmp L123
L139:
	.dbline 399
; 			}
; 		 }
L137:
	.dbline 400
L125:
	.dbline 367
	rjmp L124
X13:
	.dbline -2
	.dbline 401
; 	  }
; }
L122:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 404
; 
; void main()
; {
	.dbline 405
;   port_init();         //PA,PB,PC,PD 初始化
	rcall _port_init
	.dbline 407
;   
;   work_status = 0x67;  //置对应的工作状态标志
	ldi R24,103
	sts _work_status,R24
	.dbline 409
;   
;   gzsl=0x88;timers=0;
	ldi R24,136
	sts _gzsl,R24
	.dbline 409
	clr R2
	sts _timers,R2
	.dbline 410
;   PORTA = 0x7e;
	ldi R24,126
	out 0x1b,R24
	.dbline 411
;   CLI(); //disable all interrupts
	cli
	.dbline 412
;   timer0_init();
	rcall _timer0_init
	.dbline 414
; 
;   MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 415
;   GIMSK = 0x00;
	out 0x3b,R2
	.dbline 416
;   TIMSK|=(1<<TOIE0);
	in R24,0x39
	ori R24,2
	out 0x39,R24
	.dbline 417
;   SEI(); //re-enable interrupts
	sei
	rjmp L143
L142:
	.dbline 420
;   
;   while(1)
;    {
	.dbline 421
;    	 gzsl=0x88;
	ldi R24,136
	sts _gzsl,R24
	.dbline 422
; 	 pa = led_data[timers];
	ldi R24,<_led_data
	ldi R25,>_led_data
	lds R2,_timers
	clr R3
	add R2,R24
	adc R3,R25
	mov R30,R2
	mov R31,R3
	lpm
	sts _pa,R0
	.dbline 423
; 	 if(pa==0x0a){timers=0;}
	mov R24,R0
	cpi R24,10
	brne L145
	.dbline 423
	.dbline 423
	clr R2
	sts _timers,R2
	.dbline 423
L145:
	.dbline 424
; 	 PORTA = pa;
	lds R2,_pa
	out 0x1b,R2
	.dbline 427
; 
; /******************************************************/         
; 	pd_select = PIND & 0x01;
	in R24,0x10
	andi R24,1
	sts _pd_select,R24
	.dbline 428
;     if(pd_select == 0x00)//pd0=0,其它为高电平
	tst R24
	brne L147
	.dbline 429
;       {
	rjmp L150
L149:
	.dbline 431
;        while(1)
; 	     {
	.dbline 432
; 	      delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 433
; 		  pd_select = PIND & 0x0f;
	in R24,0x10
	andi R24,15
	sts _pd_select,R24
	.dbline 434
; 		  if(pd_select == 0x0e)//pd0=0,其它为高电平
	cpi R24,14
	brne L151
	.dbline 435
; 		    {
	.dbline 436
; 			 stop_timer0();
	rcall _stop_timer0
	.dbline 437
; 			 remote_car();//运行遥控车程序
	rcall _remote_car
	.dbline 438
; 			}
	.dbline 440
; 		  else
; 		    break;
L153:
	.dbline 441
L150:
	.dbline 430
	rjmp L149
L151:
	.dbline 442
; 	     }
;       }
L147:
	.dbline 443
; 	pd_select = PIND & 0x02;
	in R24,0x10
	andi R24,2
	sts _pd_select,R24
	.dbline 444
;     if(pd_select == 0x00)//pd1=0,其它为高电平
	tst R24
	brne L154
	.dbline 445
;       {
	rjmp L157
L156:
	.dbline 447
;        while(1)
; 	     {
	.dbline 448
; 	      delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 449
; 		  pd_select = PIND & 0x0f;
	in R24,0x10
	andi R24,15
	sts _pd_select,R24
	.dbline 450
; 		  if(pd_select == 0x0d)//pd1=0,其它为高电平
	cpi R24,13
	brne L158
	.dbline 451
; 		    {
	.dbline 452
; 			 stop_timer0();
	rcall _stop_timer0
	.dbline 453
; 			 cny_car();//寻迹机器人,探测白底黑线,沿黑线行进
	rcall _cny_car
	.dbline 454
; 			}
	.dbline 456
; 		  else
; 		    break;
L160:
	.dbline 457
L157:
	.dbline 446
	rjmp L156
L158:
	.dbline 458
; 	     }
;       }
L154:
	.dbline 459
;     pd_select = PIND & 0x04;
	in R24,0x10
	andi R24,4
	sts _pd_select,R24
	.dbline 460
; 	if(pd_select == 0x00)//pd2=0,其它为高电平
	tst R24
	brne L161
	.dbline 461
;       {
	rjmp L164
L163:
	.dbline 463
;        while(1)
; 	     {
	.dbline 464
; 	      delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 465
; 		  pd_select = PIND & 0x0f;
	in R24,0x10
	andi R24,15
	sts _pd_select,R24
	.dbline 466
; 		  if(pd_select == 0x0b)//pd2=0,其它为高电平
	cpi R24,11
	brne L165
	.dbline 467
; 		    {
	.dbline 468
; 			 stop_timer0();
	rcall _stop_timer0
	.dbline 469
; 			 xuanya_car();//机器人避障碍、避悬崖行进
	rcall _xuanya_car
	.dbline 470
; 			}
	.dbline 472
; 		  else
; 		    break;
L167:
	.dbline 473
L164:
	.dbline 462
	rjmp L163
L165:
	.dbline 474
; 	     }
;       }
L161:
	.dbline 475
;     pd_select = PIND & 0x08;
	in R24,0x10
	andi R24,8
	sts _pd_select,R24
	.dbline 476
; 	if(pd_select == 0x00)//pd3=0,其它为高电平
	tst R24
	brne L168
	.dbline 477
;       {
	rjmp L171
L170:
	.dbline 479
;        while(1)
; 	     {
	.dbline 480
; 	      delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 481
; 		  pd_select = PIND & 0x0f;
	in R24,0x10
	andi R24,15
	sts _pd_select,R24
	.dbline 482
; 		  if(pd_select == 0x07)//pd3=0,其它为高电平
	cpi R24,7
	brne L172
	.dbline 483
; 		    {
	.dbline 484
; 			 stop_timer0();
	rcall _stop_timer0
	.dbline 485
; 			 auto_car();  //机器人按程序设定路线行走
	rcall _auto_car
	.dbline 486
; 			}
	.dbline 488
; 		  else
; 		    break;
L174:
	.dbline 489
L171:
	.dbline 478
	rjmp L170
L172:
	.dbline 490
; 	     }
;       }
L168:
	.dbline 492
; /********************************************************/
;     remote_select = PINB & 0x0f;//检测遥控器是否有键按下
	in R24,0x16
	andi R24,15
	sts _remote_select,R24
	.dbline 493
;     if(remote_select == 0x04)// A
	cpi R24,4
	brne L175
	.dbline 494
;       {
	rjmp L178
L177:
	.dbline 496
;        while(1)
; 	     {
	.dbline 497
; 	      delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 498
; 		  remote_select = PINB & 0x0f;
	in R24,0x16
	andi R24,15
	sts _remote_select,R24
	.dbline 499
; 		  if(remote_select == 0x04)// A
	cpi R24,4
	brne L179
	.dbline 500
; 		    {
	.dbline 501
; 			 stop_timer0();
	rcall _stop_timer0
	.dbline 502
; 			 remote_car();//运行遥控车程序
	rcall _remote_car
	.dbline 503
; 			}
	.dbline 505
; 		  else
; 		    break;
L181:
	.dbline 506
L178:
	.dbline 495
	rjmp L177
L179:
	.dbline 507
; 	     }
;       }
L175:
	.dbline 508
;     if(remote_select == 0x02)// B
	lds R24,_remote_select
	cpi R24,2
	brne L182
	.dbline 509
;       {
	rjmp L185
L184:
	.dbline 511
;        while(1)
; 	     {
	.dbline 512
; 	      delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 513
; 		  remote_select = PINB & 0x0f;
	in R24,0x16
	andi R24,15
	sts _remote_select,R24
	.dbline 514
; 		  if(remote_select == 0x02)// B
	cpi R24,2
	brne L186
	.dbline 515
; 		    {
	.dbline 516
; 			 stop_timer0();
	rcall _stop_timer0
	.dbline 517
; 			 cny_car();//寻迹机器人,探测白底黑线,沿黑线行进
	rcall _cny_car
	.dbline 518
; 			}
	.dbline 520
; 		  else
; 		    break;
L188:
	.dbline 521
L185:
	.dbline 510
	rjmp L184
L186:
	.dbline 522
; 	     }
;       }
L182:
	.dbline 523
;     if(remote_select == 0x08)// C
	lds R24,_remote_select
	cpi R24,8
	brne L189
	.dbline 524
;       {
	rjmp L192
L191:
	.dbline 526
;        while(1)
; 	     {
	.dbline 527
; 	      delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 528
; 		  remote_select = PINB & 0x0f;
	in R24,0x16
	andi R24,15
	sts _remote_select,R24
	.dbline 529
; 		  if(remote_select == 0x08)// C
	cpi R24,8
	brne L193
	.dbline 530
; 		    {
	.dbline 531
; 			 stop_timer0();
	rcall _stop_timer0
	.dbline 532
; 			 xuanya_car();//机器人避障碍、避悬崖行进
	rcall _xuanya_car
	.dbline 533
; 			}
	.dbline 535
; 		  else
; 		    break;
L195:
	.dbline 536
L192:
	.dbline 525
	rjmp L191
L193:
	.dbline 537
; 	     }
;       }
L189:
	.dbline 538
;     if(remote_select == 0x01)// D
	lds R24,_remote_select
	cpi R24,1
	brne L196
	.dbline 539
;       {
	rjmp L199
L198:
	.dbline 541
;        while(1)
; 	     {
	.dbline 542
; 	      delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 543
; 		  remote_select = PINB & 0x0f;
	in R24,0x16
	andi R24,15
	sts _remote_select,R24
	.dbline 544
; 		  if(remote_select == 0x01)// D
	cpi R24,1
	brne L200
	.dbline 545
; 		    {
	.dbline 546
; 			 stop_timer0();
	rcall _stop_timer0
	.dbline 547
; 			 auto_car();//机器人按程序设定路线行走
	rcall _auto_car
	.dbline 548
; 			}
	.dbline 550
; 		  else
; 		    break;
L202:
	.dbline 551
L199:
	.dbline 540
	rjmp L198
L200:
	.dbline 552
; 	     }
;       }
L196:
	.dbline 553
L143:
	.dbline 419
	rjmp L142
X14:
	.dbline -2
	.dbline 554
;    }  
; }
L141:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\icc\iccavr\sl3010\sl3010_3\sl3010_3.c
_t0_times::
	.blkb 1
	.dbsym e t0_times _t0_times c
_gzsl::
	.blkb 1
	.dbsym e gzsl _gzsl c
_remote_select::
	.blkb 1
	.dbsym e remote_select _remote_select c
_pd_select::
	.blkb 1
	.dbsym e pd_select _pd_select c
_cds::
	.blkb 1
	.dbsym e cds _cds c
_rst_time::
	.blkb 1
	.dbsym e rst_time _rst_time c
_cny_times::
	.blkb 1
	.dbsym e cny_times _cny_times c
_cny_in::
	.blkb 1
	.dbsym e cny_in _cny_in c
_timers::
	.blkb 1
	.dbsym e timers _timers 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
_pa::
	.blkb 1
	.dbsym e pa _pa c
_temp1::
	.blkb 1
	.dbsym e temp1 _temp1 c
_temp::
	.blkb 1
	.dbsym e temp _temp c
_toneconst::
	.blkb 2
	.dbsym e toneconst _toneconst i
_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
	.dbfile E:\icc\iccavr\sl3010\sl3010_3\sl3010_3.c
	.dbsym e remote_in _remote_in c
_sw_in::
	.blkb 1
	.dbfile E:/icc/include/sl3010.c
	.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 + -