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

📄 main.s

📁 数字舵机(1) 数字脉宽检测 数字脉宽检测
💻 S
📖 第 1 页 / 共 4 页
字号:
	cbi 0x11,4
	.dbline 474
;         //初始化TC1 
;        /* TCCR1A = 0x00; 
;         TCNT1  = 0x00; 
;         TCCR1B |= (1<<ICES1);//(1<<ICNC1)|打开输入捕捉噪声抑制器 |上升沿触发捕捉,噪声捕捉器需打开,否则会导致上升沿/下降沿捕捉不准确,出来的结果会相差一半 
;         TCCR1B |= (1<<CS11);//8分频,8M时钟时正好1us 
;         SEI(); 
;         TCCR1B &= ~((1<<CS12)|(1<<CS11)|(1<<CS10));*/ 
;         
; 		TCCR1B = 0x00;//停止定时器 
	clr R2
	out 0x2e,R2
	.dbline 475
;         TIMSK |= 0x20;//中断允许 
	in R24,0x37
	ori R24,32
	out 0x37,R24
	.dbline 476
;         ICR1H  = 0xFF; 
	ldi R24,255
	out 0x27,R24
	.dbline 477
;         ICR1L  = 0xFF;//输入捕捉匹配值 
	out 0x26,R24
	.dbline 478
;         TCCR1A = 0x00; 
	out 0x2f,R2
	.dbline 479
;         TCCR1B = 0x83;//启动定时器 
	ldi R24,131
	out 0x2e,R24
	.dbline 480
; 		TCCR1B |= (1<<ICES1)|(1<<ICNC1)|(1<<CS11);//|(1<<CS10)8分频,8M时钟时正好1us 
	in R24,0x2e
	ori R24,194
	out 0x2e,R24
	.dbline 481
; 		TCCR1B |= (1<<ICES1);
	in R24,0x2e
	ori R24,64
	out 0x2e,R24
	xjmp L91
L90:
	.dbline 498
; 		//方法一:采用直接测频率的方法,PROTEUS仿真通过 
;         /*while(1) 
;         { 
;                 for(i=0; i<50; i++)delay_ms(10); 
;                 TCNT1 =0; 
;                 TCCR1B = ((1<<CS12)|(1<<CS11)|(1<<CS10)); 
;                 for(i=0; i<100; i++)delay_ms(10);//此处用简单的延时函数,精度有限,更高精度可以用timer来尝试 
;                 TCCR1B &= ~((1<<CS12)|(1<<CS11)|(1<<CS10)); 
;                 //printf("TCNT1=%8u 频率=%8uHz\r\n", TCNT1, TCNT1); 
; 				number_uart1(TCNT1,0);
; 				number_uart1(TCNT1,1);
; 				
;         }*/ 
;          
;         //方法二:采用测量周期的方法 
;         while(1) 
;         { 
	.dbline 499
;                 count1=1; 
	ldi R24,1
	sts _count1,R24
	.dbline 501
;                 //for(i=0; i<250; i++)
; 				delay_ms(2); 
	ldi R16,2
	ldi R17,0
	xcall _delay_ms
	.dbline 502
;                 TIMSK |= (1<<TICIE1);//打开输入捕捉器中断使能 
	in R24,0x37
	ori R24,32
	out 0x37,R24
L93:
	.dbline 504
; 	
;                 while(count1);//count1循环,等待捕获中断处理完成, 
L94:
	.dbline 504
	lds R2,_count1
	tst R2
	brne L93
X48:
	.dbline 506
;                 //printf("temp1:%6u temp2:%6u width:%6lu\r\n", temp1, temp2, (temp2>=temp1)?(temp2-temp1):(65536-temp1+temp2));
; 			    number_uart1(temp1,0);
	clr R2
	std y+0,R2
	lds R16,_temp1
	lds R17,_temp1+1
	clr R18
	clr R19
	xcall _number_uart1
	.dbline 507
; 				number_uart1(temp2,0);
	clr R2
	std y+0,R2
	lds R16,_temp2
	lds R17,_temp2+1
	clr R18
	clr R19
	xcall _number_uart1
	.dbline 512
; 				
; 				//if (temp2>temp1)
; 				//    { pwm_duoji=(temp2-temp1); number_uart1(pwm_duoji  ,1   );}
; 				//else 
; 				    { pwm_duoji=(temp1-temp2); number_uart1(pwm_duoji  ,1   );}
	.dbline 512
	lds R2,_temp2
	lds R3,_temp2+1
	lds R10,_temp1
	lds R11,_temp1+1
	sub R10,R2
	sbc R11,R3
	.dbline 512
	ldi R24,1
	std y+0,R24
	movw R16,R10
	movw R18,R12
	clr R18
	clr R19
	xcall _number_uart1
	.dbline 512
	.dbline 515
; 				
; 				
;         } 
L91:
	.dbline 497
	xjmp L90
L96:
	.dbline 518
; 	  
; while(1)
; {
	.dbline 519
; 		if (!(PINE & NEXTSONG))
	sbic 0x1,3
	rjmp L99
X49:
	.dbline 520
; 	     {delay_ms(50);
	.dbline 520
	ldi R16,50
	ldi R17,0
	xcall _delay_ms
	.dbline 521
; 		  if (!(PINE & NEXTSONG))
	sbic 0x1,3
	rjmp L101
X50:
	.dbline 522
; 		  {
	.dbline 524
; 			 //CLI();
; 		     if(pwm_duoji<0x3ff) pwm_duoji++;
	movw R24,R10
	cpi R24,255
	ldi R30,3
	cpc R25,R30
	brsh L103
X51:
	.dbline 524
	adiw R24,1
	movw R10,R24
L103:
	.dbline 525
;  			 OCR1BH = (pwm_duoji>>8)&0x07;
	movw R24,R10
	mov R24,R25
	clr R25
	andi R24,7
	andi R25,0
	out 0x29,R24
	.dbline 526
;  			 OCR1BL = pwm_duoji; 
	out 0x28,R10
	.dbline 532
; 			 /*OCR1BH = 0x03;
;  			 OCR1BL = 0xF0;
;  			 OCR1CH = 0x03;
;  			 OCR1CL = 0xF0;
; 			 */
; 			PWM_ON
	in R24,0x17
	ori R24,240
	out 0x17,R24
	.dbline 534
; 			//SEI();
; 		  }
L101:
	.dbline 535
; 		}
L99:
	.dbline 536
; 		if (!(PINE & PREVSONG))
	sbic 0x1,2
	rjmp L105
X52:
	.dbline 537
; 	     {delay_ms(50);
	.dbline 537
	ldi R16,50
	ldi R17,0
	xcall _delay_ms
	.dbline 538
; 		  if (!(PINE & PREVSONG))
	sbic 0x1,2
	rjmp L107
X53:
	.dbline 539
; 		  {
	.dbline 541
; 			 //CLI();
; 		     if(pwm_duoji>0) pwm_duoji--;
	tst R10
	brne X54
	tst R11
	breq L109
X54:
	.dbline 541
	movw R24,R10
	sbiw R24,1
	movw R10,R24
L109:
	.dbline 542
;  			 OCR1BH = (pwm_duoji>>8)&0x07;
	movw R24,R10
	mov R24,R25
	clr R25
	andi R24,7
	andi R25,0
	out 0x29,R24
	.dbline 543
;  			 OCR1BL = pwm_duoji; 
	out 0x28,R10
	.dbline 549
; 			 /*OCR1BH = 0x03;
;  			 OCR1BL = 0xF0;
;  			 OCR1CH = 0x03;
;  			 OCR1CL = 0xF0;
; 			 */
; 			PWM_ON
	in R24,0x17
	ori R24,240
	out 0x17,R24
	.dbline 551
; 			//SEI();
; 		  }
L107:
	.dbline 552
; 		}
L105:
	.dbline 554
; 
; }
L97:
	.dbline 517
	xjmp L96
L111:
	.dbline 556
;   while(1)
;   { //(unsigned char)jiaodu;
	.dbline 557
;   	PORTF=juli;
	lds R2,_juli
	lds R3,_juli+1
	sts 98,R2
	.dbline 558
;   	if (!(PINE & STOP))jiaodu=100;//PWM_ON//PORTD=~PORTD;
	sbic 0x1,6
	rjmp L114
X55:
	.dbline 558
	ldi R20,100
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _jiaodu+1,R21
	sts _jiaodu,R20
	sts _jiaodu+2+1,R23
	sts _jiaodu+2,R22
L114:
	.dbline 559
;     if (ms==1)
	lds R24,_ms
	lds R25,_ms+1
	cpi R24,1
	ldi R26,0
	cpc R25,R26
	breq X67
	xjmp L116
X67:
X56:
	.dbline 560
;    	   { //if (jiaodu!=n_jiaodu)//test
	.dbline 561
; 	   	 if (jiaodu!=0)
	lds R4,_jiaodu+2
	lds R5,_jiaodu+2+1
	lds R2,_jiaodu
	lds R3,_jiaodu+1
	clc
	tst R2
	cpc R3,R2
	cpc R4,R2
	cpc R5,R2
	brne X68
	xjmp L118
X68:
X57:
	.dbline 562
; 	      {//PORTF=jiaodu;
	.dbline 564
; 		    //if (jiaodu<0-20)//test  旋转
; 			if (ADCjohu<jiaodu-20)
	ldi R20,20
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	lds R8,_ADCjohu+2
	lds R9,_ADCjohu+2+1
	lds R6,_ADCjohu
	lds R7,_ADCjohu+1
	cp R6,R2
	cpc R7,R3
	cpc R8,R4
	cpc R9,R5
	brge L120
X58:
	.dbline 565
; 	   	 	 {DDRB |=(R_pwm1 | L_pwm0);
	.dbline 565
	in R24,0x17
	ori R24,96
	out 0x17,R24
	.dbline 566
; 			  DDRB &=~(R_pwm1 | L_pwm0);
	in R24,0x17
	andi R24,159
	out 0x17,R24
	.dbline 567
; 			  PORTB &=~(R_pwm0 |R_pwm1| L_pwm1 | L_pwm0);
	in R24,0x18
	andi R24,15
	out 0x18,R24
	.dbline 568
; 			  OCR1AL = pwm_pingjun;
	lds R2,_pwm_pingjun
	out 0x2a,R2
	.dbline 569
;  		  	  OCR1BL = pwm_pingjun;
	out 0x28,R2
	.dbline 570
;  		  	  OCR1CL = 0;
	clr R2
	sts 120,R2
	.dbline 571
;  		  	  OCR0=0;
	out 0x31,R2
	.dbline 572
; 			  PWM_ON
	in R24,0x17
	ori R24,240
	out 0x17,R24
	.dbline 573
; 			 }
	xjmp L121
L120:
	.dbline 575
; 		    //else if (jiaodu>0+20)//test
; 			else if (ADCjohu>jiaodu+20)
	ldi R20,20
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_jiaodu+2
	lds R5,_jiaodu+2+1
	lds R2,_jiaodu
	lds R3,_jiaodu+1
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	lds R8,_ADCjohu+2
	lds R9,_ADCjohu+2+1
	lds R6,_ADCjohu
	lds R7,_ADCjohu+1
	cp R2,R6
	cpc R3,R7
	cpc R4,R8
	cpc R5,R9
	brge L122
X59:
	.dbline 576
; 	   	 	 {DDRB |=(R_pwm0 | L_pwm1);
	.dbline 576
	in R24,0x17
	ori R24,144
	out 0x17,R24
	.dbline 577
; 			  DDRB &=~(R_pwm0 | L_pwm1);
	in R24,0x17
	andi R24,111
	out 0x17,R24
	.dbline 578
; 			  PORTB =0xf0;
	ldi R24,240
	out 0x18,R24
	.dbline 579
; 			  OCR1AL = 0;
	clr R2
	out 0x2a,R2
	.dbline 580
;  		  	  OCR1BL = 0;
	out 0x28,R2
	.dbline 581
;  		  	  OCR1CL = pwm_pingjun;
	lds R2,_pwm_pingjun
	sts 120,R2
	.dbline 582
;  		  	  OCR0=pwm_pingjun;
	out 0x31,R2
	.dbline 583
; 			  PWM_ON
	in R24,0x17
	ori R24,240
	out 0x17,R24
	.dbline 584
; 			 }
	xjmp L123
L122:
	.dbline 585
; 		    else PWM_OFF
	in R24,0x17
	andi R24,15
	out 0x17,R24
L123:
L121:
	.dbline 586
; 		   n_jiaodu=jiaodu;
	lds R10,_jiaodu
	.dbline 587
; 		  }
L118:
	.dbline 588
; 		 if (juli!=0) 
	lds R4,_juli+2
	lds R5,_juli+2+1
	lds R2,_juli
	lds R3,_juli+1
	clc
	tst R2
	cpc R3,R2
	cpc R4,R2
	cpc R5,R2
	brne X69
	xjmp L124
X69:
X60:
	.dbline 589
; 		 if (sec!=n_sec)
	lds R2,_sec
	cp R2,R10
	brne X70
	xjmp L126
X70:
X61:
	.dbline 590
; 		    {
	.dbline 591
; 			 if (juli>0)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_juli+2
	lds R5,_juli+2+1
	lds R2,_juli
	lds R3,_juli+1
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brge L128
X62:
	.dbline 592
; 	   	 	  {DDRB |=(R_pwm1 | L_pwm1);
	.dbline 592
	in R24,0x17
	ori R24,160
	out 0x17,R24
	.dbline 593
; 			   DDRB &=~(R_pwm1 | L_pwm1);
	in R24,0x17
	andi R24,95
	out 0x17,R24
	.dbline 594
; 			   OCR1AL = 0;
	clr R2
	out 0x2a,R2
	.dbline 595
;  		  	   OCR1BL = pwm_pingjun+Rpwm0;
	lds R2,_Rpwm0
	lds R3,_pwm_pingjun
	add R3,R2
	out 0x28,R3
	.dbline 596
;  		  	   OCR1CL = 0;
	clr R2
	sts 120,R2
	.dbline 597
;  		  	   OCR0=pwm_pingjun;
	lds R2,_pwm_pingjun
	out 0x31,R2
	.dbline 598
; 			   PWM_ON
	in R24,0x17
	ori R24,240
	out 0x17,R24
	.dbline 599
; 			   juli--;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_juli+2
	lds R5,_juli+2+1
	lds R2,_juli
	lds R3,_juli+1
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	sts _juli+1,R3
	sts _juli,R2
	sts _juli+2+1,R5
	sts _juli+2,R4
	.dbline 600
; 			  }
	xjmp L129
L128:
	.dbline 601
; 			 else if (juli<0)
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_juli+2
	lds R5,_juli+2+1
	lds R2,_juli
	lds R3,_juli+1
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brge L130
X63:
	.dbline 602
; 	   	 	  {DDRB |=(R_pwm0 | L_pwm0);
	.dbline 602
	in R24,0x17
	ori R24,80
	out 0x17,R24
	.dbline 603
; 			   DDRB &=~(R_pwm0 | L_pwm0);
	in R24,0x17
	andi R24,175
	out 0x17,R24
	.dbline 604
; 			   OCR1AL = pwm_pingjun;
	lds R2,_pwm_pingjun
	out 0x2a,R2
	.dbline 605
;  		  	   OCR1BL = 0;
	clr R2
	out 0x28,R2
	.dbline 606
;  		  	   OCR1CL = pwm_pingjun;
	lds R2,_pwm_pingjun
	sts 120,R2
	.dbline 607
;  		  	   OCR0=0;
	clr R2
	out 0x31,R2
	.dbline 608
; 			   PWM_ON
	in R24,0x17
	ori R24,240
	out 0x17,R24
	.dbline 609
; 			   juli++;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_juli+2
	lds R5,_juli+2+1
	lds R2,_juli
	lds R3,_juli+1
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _juli+1,R3
	sts _juli,R2
	sts _juli+2+1,R5
	sts _juli+2,R4
	.dbline 610
; 			  }/**/
	xjmp L131
L130:
	.dbline 611
; 			 else PWM_OFF
	in R24,0x17
	andi R24,15
	out 0x17,R24
L131:
L129:
	.dbline 612
; 			n_sec=sec;
	lds R10,_sec
	.dbline 613
; 			}	
L126:
L124:
	.dbline 617
; 
; 	   	//number(0,2,5,xx,1);
; 		//number(0,4,5,ADCjohu,1);
; 		if (!(PINE & PREVSONG))xx=0;
	sbic 0x1,2
	rjmp L132
X64:
	.dbline 617
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _xx+1,R21
	sts _xx,R20
	sts _xx+2+1,R23
	sts _xx+2,R22
L132:
	.dbline 618
; 		if (!(PINE & NEXTSONG))
	sbic 0x1,3
	rjmp L134
X65:
	.dbline 619
; 	    	{
	.dbline 621
; 			//CLI();
; 			number_uart1(xx,0);
	clr R2
	std y+0,R2
	lds R18,_xx+2
	lds R19,_xx+2+1
	lds R16,_xx
	lds R17,_xx+1
	xcall _number_uart1
	.dbline 622
; 			number_uart1(ADCjohu,1);
	ldi R24,1
	std y+0,R24
	lds R18,_ADCjohu+2
	lds R19,_ADCjohu+2+1
	lds R16,_ADCjohu
	lds R17,_ADCjohu+1
	xcall _number_uart1
	.dbline 623
; 			delay_ms(20);
	ldi R16,20
	ldi R17,0
	xcall _delay_ms
	.dbline 625
; 			//SEI();
; 			}
L134:
	.dbline 626
;    	    ms=0;
	clr R2
	clr R3
	sts _ms+1,R3
	sts _ms,R2
	.dbline 627
;        }
L116:
	.dbline 628
;   }
L112:
	.dbline 555
	xjmp L111
X66:
	.dbline -2
L89:
	.dbline 0 ; func end
	adiw R28,1
	ret
	.dbsym l n 2 I
	.dbsym r i 12 c
	.dbsym r n_juli 10 c
	.dbsym r n_jiaodu 10 c
	.dbsym r n_sec 10 c
	.dbsym r pwm_duoji 10 i
	.dbend
; 
; }

⌨️ 快捷键说明

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