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

📄 diy0206_4.s

📁 双龙的积木式智能机器人C源程序
💻 S
📖 第 1 页 / 共 5 页
字号:
; n01:
;   temp=temp1 = 0;
	clr R2
	sts _temp1,R2
	sts _temp,R2
	.dbline 537
;   sound_add = 0;	  
	clr R3
	sts _sound_add+1,R3
	sts _sound_add,R2
	rjmp L185
L184:
	.dbline 539
; 	  while(temp1!=0)
;   	    {
	.dbline 540
; 			temp=temp1; 
	lds R2,_temp1
	sts _temp,R2
	.dbline 541
; 			temp&=0x0f;
	mov R24,R2
	andi R24,15
	sts _temp,R24
	.dbline 542
; 			if(temp!=0)
	mov R2,R24
	tst R24
	breq L187
	.dbline 543
; 			  {
	.dbline 544
; 			   TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
	in R24,0x39
	ori R24,4
	out 0x39,R24
	.dbline 545
; 			   temp--;			   
	mov R24,R2
	subi R24,1
	sts _temp,R24
	.dbline 546
;         	   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 547
; 			   TCNT1=toneconst;
	mov R2,R16
	mov R3,R17
	sts 76+1,R3
	sts 76,R2
	.dbline 548
;  			  }
L187:
	.dbline 549
	lds R2,_temp1
	sts _temp,R2
	.dbline 550
	mov R24,R2
	swap R24
	andi R24,#0x0F
	sts _temp,R24
	.dbline 551
	andi R24,15
	sts _temp,R24
	.dbline 552
	mov R18,R24
	clr R19
	ldi R16,129
	ldi R17,0
	rcall mpy16s
	rcall _delay_ms
	.dbline 553
	in R24,0x39
	andi R24,251
	out 0x39,R24
	.dbline 554
	lds R24,_sound_add
	lds R25,_sound_add+1
	adiw R24,1
	sts _sound_add+1,R25
	sts _sound_add,R24
	.dbline 556
L185:
	.dbline 538
	lds R2,_temp1
	tst R2
	breq X29
	rjmp L184
X29:
	.dbline 557
	rjmp L183
X28:
	.dbline -2
L181:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e auto_car _auto_car fV
	.even
_auto_car::
	.dbline -1
	.dbline 561
; 			temp=temp1;
; 			temp>>=4;
; 			temp&=0x0f;
; 			delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
; 			TIMSK&=~(1<<TOIE1);
; 			sound_add++;
; 
; 	   }
; 	goto n01;
; }
; 
; void auto_car()
; {
	.dbline 562
;  port_init();//PA,PB,PC,PD 初始化
	rcall _port_init
	.dbline 564
;  
;  work_status = 0x51;//置对应的工作状态标志
	ldi R24,81
	sts _work_status,R24
	.dbline 566
;  
;  PORTA = 0x44;//0100,0100
	ldi R24,68
	out 0x1b,R24
	.dbline 567
;  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,1
	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 L191
L190:
	.dbline 587
	.dbline 588
	rcall _music_car
	.dbline 589
L191:
	.dbline 586
	rjmp L190
X30:
	.dbline -2
	.dbline 590
;  
;  while(1)
;       {
;        music_car();
; 	  }
; }
L189:
	.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
L194:
	.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,1
	out 0x39,R24
	.dbline 609
;   SEI(); //re-enable interrupts
	sei
	.dbline 611
; 
;  mic_startup();       //等待声控启动
	rcall _mic_startup
	rjmp L196
L195:
	.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 L201
	cpi R24,64
	breq L201
	cpi R24,160
	brne L198
L201:
	.dbline 619
; 	     {//前行
	.dbline 620
; 	      forward();   //前行
	rcall _forward
	.dbline 621
; 		  cny_times = 0x00;
	clr R2
	sts _cny_times,R2
	.dbline 622
; 		 }
L198:
	.dbline 623
; 	   if(cny_in == 0x20 || cny_in == 0x60)
	lds R24,_cny_in
	cpi R24,32
	breq L204
	cpi R24,96
	brne L202
L204:
	.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
; 		 }
L202:
	.dbline 629
; 	   if(cny_in == 0x80 || cny_in == 0xc0)
	lds R24,_cny_in
	cpi R24,128
	breq L207
	cpi R24,192
	brne L205
L207:
	.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
;  		 }
L205:
	.dbline 635
; 	   if(cny_in == 0xe0)
	lds R24,_cny_in
	cpi R24,224
	brne L208
	.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 L210
	.dbline 641
; 			{
	.dbline 642
; 			 stop();   //停止运动//熄灭指示灯   
	rcall _stop
	.dbline 643
;              goto cny_car_start;
	rjmp L194
L210:
	.dbline 645
; 			}
; 		 }
L208:
	.dbline 646
L196:
	.dbline 613
	rjmp L195
X31:
	.dbline -2
	.dbline 647
; 	  }
; }
L193:
	.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 658
;   CLI(); //disable all interrupts
	cli
	.dbline 659
;   timer0_init();
	rcall _timer0_init
	.dbline 661
; 
;   MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 662
;   GIMSK = 0x00;
	out 0x3b,R2
	.dbline 663
;   TIMSK|=(1<<TOIE0);
	in R24,0x39
	ori R24,1
	out 0x39,R24
	.dbline 664
;   SEI(); //re-enable interrupts
	sei
	.dbline 665
;   gzsl=0x55;t0_times=0;sound_1 = 0x88;
	ldi R24,85
	sts _gzsl,R24
	.dbline 665
	sts _t0_times,R2
	.dbline 665
	ldi R24,136
	sts _sound_1,R24
	.dbline 666
; 	  TCCR1A = 0x00;
	out 0x2f,R2
	.dbline 667
; 	  TCCR1B =(1<<CS11);//8分频
	ldi R24,2
	out 0x2e,R24
L213:
	.dbline 669
; n01:
;   temp=temp1 = 0;
	clr R2
	sts _temp1,R2
	sts _temp,R2
	.dbline 670
;   sound_add = 0;	  
	clr R3
	sts _sound_add+1,R3
	sts _sound_add,R2
	rjmp L215
L214:
	.dbline 673
;  
; 	  while(temp1!=0)
;   	    {
	.dbline 674
; 			temp=temp1; 
	lds R2,_temp1
	sts _temp,R2
	.dbline 675
; 			temp&=0x0f;
	mov R24,R2
	andi R24,15
	sts _temp,R24
	.dbline 677
	cpi R24,1
	breq L221
	cpi R24,2
	breq L221
	cpi R24,3
	breq L221
	cpi R24,4
	brne L217
L221:
	.dbline 677
; 						  //PA口为音乐灯
; 			  if(temp==1 || temp==2 || temp==3 || temp==4){PORTA = 0xfe;}
	.dbline 677
	ldi R24,254
	out 0x1b,R24
	.dbline 677
L217:
	.dbline 678
	lds R24,_temp
	cpi R24,5
	breq L224
	cpi R24,6
	brne L222
L224:
	.dbline 678
;               if(temp==5 || temp==6){PORTA = 0xfc;}
	.dbline 678
	ldi R24,252
	out 0x1b,R24
	.dbline 678
L222:
	.dbline 679
	lds R24,_temp
	cpi R24,7
	breq L227
	cpi R24,8
	brne L225
L227:
	.dbline 679
;               if(temp==7 || temp==8 ){PORTA = 0xf8;}
	.dbline 679
	ldi R24,248
	out 0x1b,R24
	.dbline 679
L225:
	.dbline 680
;               if(temp==9){PORTA = 0xf0;}
	lds R24,_temp
	cpi R24,9
	brne L228
	.dbline 680
	.dbline 680
	ldi R24,240
	out 0x1b,R24
	.dbline 680
L228:
	.dbline 681
;               if(temp==10){PORTA = 0xe0;}
	lds R24,_temp
	cpi R24,10
	brne L230
	.dbline 681
	.dbline 681
	ldi R24,224
	out 0x1b,R24
	.dbline 681
L230:
	.dbline 682
;               if(temp==11){PORTA = 0xc0;}
	lds R24,_temp
	cpi R24,11
	brne L232
	.dbline 682
	.dbline 682
	ldi R24,192
	out 0x1b,R24
	.dbline 682
L232:
	.dbline 683
; 			  if(temp==12){PORTA = 0x80;}
	lds R24,_temp
	cpi R24,12
	brne L234
	.dbline 683
	.dbline 683
	ldi R24,128
	out 0x1b,R24
	.dbline 683
L234:
	.dbline 684
	lds R24,_temp
	cpi R24,13
	breq L239
	cpi R24,14
	breq L239
	cpi R24,15
	brne L236
L239:
	.dbline 684
;               if(temp==13||temp==14 || temp==15){PORTA = 0x00;}
	.dbline 684
	clr R2
	out 0x1b,R2
	.dbline 684
L236:
	.dbline 686
; 
; 			if(temp!=0)
	lds R2,_temp
	tst R2
	breq L240
	.dbline 687
; 			  {
	.dbline 688
; 			   TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
	in R24,0x39
	ori R24,4
	out 0x39,R24
	.dbline 689
; 			   temp--;			   
	mov R24,R2
	subi R24,1
	sts _temp,R24
	.dbline 690
;         	   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 691
; 			   TCNT1=toneconst;
	mov R2,R16
	mov R3,R17
	sts 76+1,R3
	sts 76,R2
	.dbline 692
;  			  }
L240:
	.dbline 693
; 			temp=temp1;
	lds R2,_temp1
	sts _temp,R2
	.dbline 694
; 			temp>>=4;
	mov R24,R2
	swap R24
	andi R24,#0x0F
	sts _temp,R24
	.dbline 695
; 			temp&=0x0f;
	andi R24,15
	sts _temp,R24
	.dbline 696
; 			delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
	mov R18,R24
	clr R19
	ldi R16,129
	ldi R17,0
	rcall mpy16s
	rcall _delay_ms
	.dbline 697
; 			TIMSK&=~(1<<TOIE1);
	in R24,0x39
	andi R24,251
	out 0x39,R24
	.dbline 698
; 			sound_add++;
	lds R24,_sound_add
	lds R25,_sound_add+1
	adiw R24,1
	sts _sound_add+1,R25
	sts _sound_add,R24
	.dbline 701
; 
; /******************************************************/         
; 	pd_select = PIND & 0x01;
	in R24,0x10
	andi R24,1
	sts _pd_select,R24
	.dbline 702
;     if(pd_select == 0x00)//pd0=0,其它为高电平
	tst R24
	brne L242
	.dbline 703
;       {
	rjmp L245
L244:
	.dbline 705
;        while(1)
; 	     {
	.dbline 706
; 	      delay_ms(500);//消除抖动
	ldi R16,500
	ldi R17

⌨️ 快捷键说明

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