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

📄 sl3010_4.s

📁 单片机开发资料光盘-双龙-686M.zip
💻 S
📖 第 1 页 / 共 5 页
字号:
	sts _temp,R2
	.dbline 549
	mov R24,R2
	swap R24
	andi R24,#0x0F
	sts _temp,R24
	.dbline 550
	andi R24,15
	sts _temp,R24
	.dbline 551
	mov R18,R24
	clr R19
	ldi R16,129
	ldi R17,0
	rcall mpy16s
	rcall _delay_ms
	.dbline 552
	in R24,0x39
	andi R24,127
	out 0x39,R24
	.dbline 553
	lds R24,_sound_add
	lds R25,_sound_add+1
	adiw R24,1
	sts _sound_add+1,R25
	sts _sound_add,R24
	.dbline 555
L167:
	.dbline 537
	lds R2,_temp1
	tst R2
	breq X23
	rjmp L166
X23:
	.dbline 556
	rjmp L165
X22:
	.dbline -2
L163:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e auto_car _auto_car fV
	.even
_auto_car::
	.dbline -1
	.dbline 560
; 			temp=temp1;
; 			temp>>=4;
; 			temp&=0x0f;
; 			delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
; 			TIMSK&=~(1<<TOIE1);
; 			sound_add++;
; 
; 	   }
; 	goto n01;
; }
; 
; void auto_car()
; {
	.dbline 561
;  port_init();//PA,PB,PC,PD 初始化
	rcall _port_init
	.dbline 563
;  
;  work_status = 0x51;//置对应的工作状态标志
	ldi R24,81
	sts _work_status,R24
	.dbline 565
;  
;  PORTA = 0x44;//0100,0100
	ldi R24,68
	out 0x1b,R24
	.dbline 566
;  delay_ms(1000);
	ldi R16,1000
	ldi R17,3
	rcall _delay_ms
	.dbline 568
; 
;  delay_time1=22;    //转弯时间 22*25ms =  550ms
	ldi R24,22
	ldi R25,0
	sts _delay_time1+1,R25
	sts _delay_time1,R24
	.dbline 569
;  delay_time2=48;    //前行时间 48*25ms = 1200ms
	ldi R24,48
	sts _delay_time2+1,R25
	sts _delay_time2,R24
	.dbline 570
;  gzsl=0x88;timers=0;t0_times=0; 
	ldi R24,136
	sts _gzsl,R24
	.dbline 570
	clr R2
	sts _timers,R2
	.dbline 570
	sts _t0_times,R2
	.dbline 571
;   CLI(); //disable all interrupts
	cli
	.dbline 572
;   timer0_init();
	rcall _timer0_init
	.dbline 574
; 
;   MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 575
;   GIMSK = 0x00;
	out 0x3b,R2
	.dbline 576
;   TIMSK|=(1<<TOIE0);
	in R24,0x39
	ori R24,2
	out 0x39,R24
	.dbline 577
;   SEI(); //re-enable interrupts
	sei
	.dbline 579
;  
;  mic_startup();//等待声控启动
	rcall _mic_startup
	.dbline 581
; 
;   gzsl=0x11;timers=0;t0_times=0;
	ldi R24,17
	sts _gzsl,R24
	.dbline 581
	clr R2
	sts _timers,R2
	.dbline 581
	sts _t0_times,R2
	.dbline 583
; 
; 	   forward();             //前行
	rcall _forward
	.dbline 584
; 	   delay_ms(200);         
	ldi R16,200
	ldi R17,0
	rcall _delay_ms
	rjmp L173
L172:
	.dbline 587
	.dbline 588
	rcall _music_car
	.dbline 589
L173:
	.dbline 586
	rjmp L172
X24:
	.dbline -2
	.dbline 590
;  
;  while(1)
;       {
;        music_car();
; 	  }
; }
L171:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e cny_car _cny_car fV
	.even
_cny_car::
	.dbline -1
	.dbline 594
; 
; //cny_car   探测白底黑线,沿着黑线运动
; void cny_car()
; {
	.dbline 595
;  port_init();         //PA,PB,PC,PD 初始化
	rcall _port_init
	.dbline 597
;  
;  PORTA = 0xc3;		  //1100,0011
	ldi R24,195
	out 0x1b,R24
	.dbline 598
;  delay_ms(1000);
	ldi R16,1000
	ldi R17,3
	rcall _delay_ms
L176:
	.dbline 602
;  
; cny_car_start: 
; 
;   gzsl=0x88;timers=0;t0_times=0;
	ldi R24,136
	sts _gzsl,R24
	.dbline 602
	clr R2
	sts _timers,R2
	.dbline 602
	sts _t0_times,R2
	.dbline 603
;   CLI(); //disable all interrupts
	cli
	.dbline 604
;   timer0_init();
	rcall _timer0_init
	.dbline 606
; 
;   MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 607
;   GIMSK = 0x00;
	out 0x3b,R2
	.dbline 608
;   TIMSK|=(1<<TOIE0);
	in R24,0x39
	ori R24,2
	out 0x39,R24
	.dbline 609
;   SEI(); //re-enable interrupts
	sei
	.dbline 611
; 
;  mic_startup();       //等待声控启动
	rcall _mic_startup
	rjmp L178
L177:
	.dbline 614
;  
;  while(1)
;       {
	.dbline 615
; 	   sw_touch();
	rcall _sw_touch
	.dbline 617
; 	   
; 	   cny_in = PINC & 0xe0;
	in R24,0x13
	andi R24,224
	sts _cny_in,R24
	.dbline 618
; 	   if(cny_in == 0x00 || cny_in == 0x40 || cny_in == 0xa0)
	tst R24
	breq L183
	cpi R24,64
	breq L183
	cpi R24,160
	brne L180
L183:
	.dbline 619
; 	     {//前行
	.dbline 620
; 	      forward();   //前行
	rcall _forward
	.dbline 621
; 		  cny_times = 0x00;
	clr R2
	sts _cny_times,R2
	.dbline 622
; 		 }
L180:
	.dbline 623
; 	   if(cny_in == 0x20 || cny_in == 0x60)
	lds R24,_cny_in
	cpi R24,32
	breq L186
	cpi R24,96
	brne L184
L186:
	.dbline 624
; 	     {//慢速右转
	.dbline 625
; 		  turn_right_s();   //慢速右转
	rcall _turn_right_s
	.dbline 626
; 		  delay_ms(cny_delayms);
	ldi R16,50
	ldi R17,0
	rcall _delay_ms
	.dbline 627
; 		  cny_times = 0x00;
	clr R2
	sts _cny_times,R2
	.dbline 628
; 		 }
L184:
	.dbline 629
; 	   if(cny_in == 0x80 || cny_in == 0xc0)
	lds R24,_cny_in
	cpi R24,128
	breq L189
	cpi R24,192
	brne L187
L189:
	.dbline 630
; 	     {//慢速左转
	.dbline 631
;           turn_left_s();    //慢速左转
	rcall _turn_left_s
	.dbline 632
;           delay_ms(cny_delayms);
	ldi R16,50
	ldi R17,0
	rcall _delay_ms
	.dbline 633
; 		  cny_times = 0x00;
	clr R2
	sts _cny_times,R2
	.dbline 634
;  		 }
L187:
	.dbline 635
; 	   if(cny_in == 0xe0)
	lds R24,_cny_in
	cpi R24,224
	brne L190
	.dbline 636
; 	     {//前行--探测多次都为 0xe0 ,停止运行
	.dbline 637
; 		  forward();
	rcall _forward
	.dbline 638
; 		  cny_times++;
	lds R24,_cny_times
	subi R24,255    ; addi 1
	sts _cny_times,R24
	.dbline 639
; 		  delay_ms(10);
	ldi R16,10
	ldi R17,0
	rcall _delay_ms
	.dbline 640
; 		  if(cny_times == 0x64)
	lds R24,_cny_times
	cpi R24,100
	brne L192
	.dbline 641
; 			{
	.dbline 642
; 			 stop();   //停止运动//熄灭指示灯   
	rcall _stop
	.dbline 643
;              goto cny_car_start;
	rjmp L176
L192:
	.dbline 645
; 			}
; 		 }
L190:
	.dbline 646
L178:
	.dbline 613
	rjmp L177
X25:
	.dbline -2
	.dbline 647
; 	  }
; }
L175:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 650
; 
; void main()
; {
	.dbline 651
;   port_init();         //PA,PB,PC,PD 初始化
	rcall _port_init
	.dbline 653
;   
;   work_status = 0x67;  //置对应的工作状态标志
	ldi R24,103
	sts _work_status,R24
	.dbline 655
;   
;   PORTA = 0x7e;
	ldi R24,126
	out 0x1b,R24
	.dbline 657
;   
;   delay_ms(2000);
	ldi R16,2000
	ldi R17,7
	rcall _delay_ms
	.dbline 659
; 
;   CLI(); //disable all interrupts
	cli
	.dbline 660
;   timer0_init();
	rcall _timer0_init
	.dbline 662
; 
;   MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 663
;   GIMSK = 0x00;
	out 0x3b,R2
	.dbline 664
;   TIMSK|=(1<<TOIE0);
	in R24,0x39
	ori R24,2
	out 0x39,R24
	.dbline 665
;   SEI(); //re-enable interrupts
	sei
	.dbline 666
;   gzsl=0x88;t0_times=0;sound_1 = 0x88;
	ldi R24,136
	sts _gzsl,R24
	.dbline 666
	sts _t0_times,R2
	.dbline 666
	sts _sound_1,R24
	.dbline 667
;   mic_startup();			   //等待声控起动
	rcall _mic_startup
	.dbline 668
;   gzsl=0x55;t0_times=0;sound_1 = 0x88;
	ldi R24,85
	sts _gzsl,R24
	.dbline 668
	clr R2
	sts _t0_times,R2
	.dbline 668
	ldi R24,136
	sts _sound_1,R24
	.dbline 669
; 	  TCCR1A = 0x00;
	out 0x2f,R2
	.dbline 670
; 	  TCCR1B =(1<<CS11);//8分频
	ldi R24,2
	out 0x2e,R24
L195:
	.dbline 672
; n01:
;   temp=temp1 = 0;
	clr R2
	sts _temp1,R2
	sts _temp,R2
	.dbline 673
;   sound_add = 0;	  
	clr R3
	sts _sound_add+1,R3
	sts _sound_add,R2
	rjmp L197
L196:
	.dbline 676
;  
; 	  while(temp1!=0)
;   	    {
	.dbline 677
; 			temp=temp1; 
	lds R2,_temp1
	sts _temp,R2
	.dbline 678
; 			temp&=0x0f;
	mov R24,R2
	andi R24,15
	sts _temp,R24
	.dbline 680
	cpi R24,1
	breq L203
	cpi R24,2
	breq L203
	cpi R24,3
	breq L203
	cpi R24,4
	brne L199
L203:
	.dbline 680
; 						  //PA口为音乐灯
; 			  if(temp==1 || temp==2 || temp==3 || temp==4){PORTA = 0xfe;}
	.dbline 680
	ldi R24,254
	out 0x1b,R24
	.dbline 680
L199:
	.dbline 681
	lds R24,_temp
	cpi R24,5
	breq L206
	cpi R24,6
	brne L204
L206:
	.dbline 681
;               if(temp==5 || temp==6){PORTA = 0xfc;}
	.dbline 681
	ldi R24,252
	out 0x1b,R24
	.dbline 681
L204:
	.dbline 682
	lds R24,_temp
	cpi R24,7
	breq L209
	cpi R24,8
	brne L207
L209:
	.dbline 682
;               if(temp==7 || temp==8 ){PORTA = 0xf8;}
	.dbline 682
	ldi R24,248
	out 0x1b,R24
	.dbline 682
L207:
	.dbline 683
;               if(temp==9){PORTA = 0xf0;}
	lds R24,_temp
	cpi R24,9
	brne L210
	.dbline 683
	.dbline 683
	ldi R24,240
	out 0x1b,R24
	.dbline 683
L210:
	.dbline 684
;               if(temp==10){PORTA = 0xe0;}
	lds R24,_temp
	cpi R24,10
	brne L212
	.dbline 684
	.dbline 684
	ldi R24,224
	out 0x1b,R24
	.dbline 684
L212:
	.dbline 685
;               if(temp==11){PORTA = 0xc0;}
	lds R24,_temp
	cpi R24,11
	brne L214
	.dbline 685
	.dbline 685
	ldi R24,192
	out 0x1b,R24
	.dbline 685
L214:
	.dbline 686
; 			  if(temp==12){PORTA = 0x80;}
	lds R24,_temp
	cpi R24,12
	brne L216
	.dbline 686
	.dbline 686
	ldi R24,128
	out 0x1b,R24
	.dbline 686
L216:
	.dbline 687
	lds R24,_temp
	cpi R24,13
	breq L221
	cpi R24,14
	breq L221
	cpi R24,15
	brne L218
L221:
	.dbline 687
;               if(temp==13||temp==14 || temp==15){PORTA = 0x00;}
	.dbline 687
	clr R2
	out 0x1b,R2
	.dbline 687
L218:
	.dbline 689
; 
; 			if(temp!=0)
	lds R2,_temp
	tst R2
	breq L222
	.dbline 690
; 			  {
	.dbline 691
; 			   TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
	in R24,0x39
	ori R24,128
	out 0x39,R24
	.dbline 692
; 			   temp--;			   
	mov R24,R2
	subi R24,1
	sts _temp,R24
	.dbline 693
;         	   toneconst=TONETABLE[temp];
	ldi R24,<_TONETABLE
	ldi R25,>_TONETABLE
	lds R16,_temp
	clr R17
	lsl R16
	rol R17
	add R16,R24
	adc R17,R25
	rcall lpm16
	sts _toneconst+1,R17
	sts _toneconst,R16
	.dbline 694
; 			   TCNT1=toneconst;
	out 0x2d,R17
	out 0x2c,R16
	.dbline 695
;  			  }
L222:
	.dbline 696
; 			temp=temp1;
	lds R2,_temp1
	sts _temp,R2
	.dbline 697
; 			temp>>=4;
	mov R24,R2
	swap R24
	andi R24,#0x0F
	sts _temp,R24
	.dbline 698
; 			temp&=0x0f;
	andi R24,15
	sts _temp,R24
	.dbline 699
; 			delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
	mov R18,R24
	clr R19
	ldi R16,129
	ldi R17,0
	rcall mpy16s
	rcall _delay_ms
	.dbline 700
; 			TIMSK&=~(1<<TOIE1);
	in R24,0x39
	andi R24,127
	out 0x39,R24
	.dbline 701
; 			sound_add++;
	lds R24,_sound_add
	lds R25,_sound_add+1
	adiw R24,1
	sts _sound_add+1,R25
	sts _sound_add,R24
	.dbline 704
; 
; /******************************************************/         
; 	pd_select = PIND & 0x01;
	in R24,0x10
	andi R24,1
	sts _pd_select,R24
	.dbline 705
;     if(pd_select == 0x00)//pd0=0,其它为高电平
	tst R24
	brne L224
	.dbline 706
;       {
	rjmp L227
L226:
	.dbline 708
;        while(1)
; 	     {
	.dbline 709
; 	      delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17,1
	rcall _delay_ms
	.dbline 710
; 		  pd_select = PIND & 0x0f;
	in R24,0x10
	andi R24,15
	sts _pd_select,R24
	.dbline 711
; 		  if(pd_select == 0x0e)//pd0=0,其它为高电平
	cpi R24,14
	brne L228
	.dbline 712
; 		    {
	.dbline 713
; 			 stop_timer0();
	rcall _stop_timer0
	.dbline 714
; 			 remote_car();//运行遥控车程序
	rcall _remote_car
	.dbline 715
; 			}
	.dbline 717
; 		  else
; 		    break;
L230:
	.dbline 718
L227:
	.dbline 707
	rjmp L226
L228:
	.dbline 719
; 	     }
;       }
L224:
	.dbline 720
; 	pd_select = PIND & 0x02;
	in R24,0x10
	andi R24,2
	sts _pd_select,R24
	.dbline 721
;     if(pd_select == 0x00)//pd1=0,其它为高电平
	tst R24
	brne L231
	.dbline 722
;       {
	rjmp L234
L233:

⌨️ 快捷键说明

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