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

📄 main.s

📁 数字舵机(1) 数字脉宽检测 数字脉宽检测
💻 S
📖 第 1 页 / 共 3 页
字号:
;  TCCR0 = 0x00; //stop
	clr R2
	out 0x33,R2
	.dbline 271
;  ASSR  = 0x00; //set async mode
	out 0x30,R2
	.dbline 272
;  TCNT0 = 0x01; //set count
	ldi R24,1
	out 0x32,R24
	.dbline 273
;  OCR0  = 0x0f;
	ldi R24,15
	out 0x31,R24
	.dbline 274
;  TCCR0 = 0x6C; //start timer
	ldi R24,108
	out 0x33,R24
	.dbline -2
L84:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 322
; }
; 
; //TIMER1 initialize - prescale:64
; // WGM: 5) PWM 8bit fast, TOP=0x00FF
; // desired value: 1KHz
; // actual value:  0.488KHz (104.8%)
; /*void timer1_init(void)
; {
;  TCCR1B = 0x00; //stop
;  TCNT1H = 0xFF; //setup
;  TCNT1L = 0x01;
;  OCR1AH = 0x00;
;  OCR1AL = 0x0f;
;  OCR1BH = 0x00;
;  OCR1BL = 0x0f;
;  OCR1CH = 0x00;
;  OCR1CL = 0x0f;
;  ICR1H  = 0x00;
;  ICR1L  = 0xFF;
;  TCCR1A = 0xA9;
;  TCCR1B = 0x0B; //start Timer
; }*/
; //TIMER1 initialize - prescale:8
; // WGM: 9) PWM phz freq correct, TOP=OCRnA
; // desired value: 40mSec
; // actual value: 40.000mSec (0.0%)
; /*void timer1_init(void)
; {
;  TCCR1B = 0x00; //stop
;  TCNT1H = 0xB1; //setup
;  TCNT1L = 0xE0;
;  OCR1AH = 0x4E;
;  OCR1AL = 0x20;
;  OCR1BH = 0x4E;
;  OCR1BL = 0x20;
;  OCR1CH = 0x4E;
;  OCR1CL = 0x20;
;  ICR1H  = 0x4E;
;  ICR1L  = 0x20;
;  TCCR1A = 0x01;
;  TCCR1B = 0x12; //start Timer
; }*/
; //TIMER1 initialize - prescale:64
; // WGM: 7) PWM 10bit fast, TOP=0x03FF
; // desired value: 40mSec
; // actual value:  8.192mSec (79.5%)
; void timer1_init(void)
; {
	.dbline 323
;  TCCR1B = 0x00; //stop
	clr R2
	out 0x2e,R2
	.dbline 324
;  TCNT1H = 0xFC; //setup
	ldi R24,252
	out 0x2d,R24
	.dbline 325
;  TCNT1L = 0x01;
	ldi R24,1
	out 0x2c,R24
	.dbline 326
;  OCR1AH = 0x03;
	ldi R24,3
	out 0x2b,R24
	.dbline 327
;  OCR1AL = 0xFF;
	ldi R24,255
	out 0x2a,R24
	.dbline 328
;  OCR1BH = 0x03;
	ldi R24,3
	out 0x29,R24
	.dbline 329
;  OCR1BL = 0xFF;
	ldi R24,255
	out 0x28,R24
	.dbline 330
;  OCR1CH = 0x03;
	ldi R24,3
	sts 121,R24
	.dbline 331
;  OCR1CL = 0xFF;
	ldi R24,255
	sts 120,R24
	.dbline 332
;  ICR1H  = 0x03;
	ldi R24,3
	out 0x27,R24
	.dbline 333
;  ICR1L  = 0xFF;
	ldi R24,255
	out 0x26,R24
	.dbline 334
;  TCCR1A = 0x33;
	ldi R24,51
	out 0x2f,R24
	.dbline 335
;  TCCR1B = 0x0B; //start Timer
	ldi R24,11
	out 0x2e,R24
	.dbline -2
L85:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fI
;              n -> <dead>
;         n_juli -> R10
;       n_jiaodu -> R10
;          n_sec -> R10
;      pwm_duoji -> R10,R11
	.even
_main::
	sbiw R28,1
	.dbline -1
	.dbline 342
; }
; 
; 
; #define PWM_ON    DDRB|=   R_pwm0 | R_pwm1 | L_pwm0 | L_pwm1;
; #define PWM_OFF   DDRB&= ~(R_pwm0 | R_pwm1 | L_pwm0 | L_pwm1);
; main()
; {int n;
	.dbline 343
; unsigned char n_jiaodu=0,n_juli=0;
	.dbline 343
	.dbline 344
; unsigned char n_sec=0;
	.dbline 345
; unsigned int pwm_duoji=0;
	.dbline 346
; init_devices();
	xcall _init_devices
	.dbline 347
; timer1_init();timer0_init();
	xcall _timer1_init
	.dbline 347
	xcall _timer0_init
	.dbline 358
;  //OCR1AH = 0x00;
; /* OCR1AL = 64;
;  //OCR1BH = 0x00;
;  OCR1BL = 64;
;  //OCR1CH = 0x00;
;  OCR1CL = 64;
;  OCR0=64;*/
; 
;  
; //while(1);
; DDRE|=0x38;//while(1);
	in R24,0x2
	ori R24,56
	out 0x2,R24
	.dbline 368
; /////////LCD
; 	/* DDRB = 0xBF;    //SI输入,SO,SCK,SS输出
; 	 SPCR = 0x50;  //setup SPI
; 	 SPSR = 0x01;  //setup SPI*/
; /*while(!(UCSR0A&(1<<UDRE0)));
; UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
; UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
; UDR0='a';while(!(UCSR0A&(1<<UDRE0)));
; UDR0='a';*/
; delay_ms(3000);
	ldi R16,3000
	ldi R17,11
	xcall _delay_ms
	.dbline 369
; number_uart1(1010,1);
	ldi R24,1
	std y+0,R24
	ldi R16,242
	ldi R17,3
	ldi R18,0
	ldi R19,0
	xcall _number_uart1
	.dbline 370
; 			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 371
; 			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 372
; delay_ms(3000);	
	ldi R16,3000
	ldi R17,11
	xcall _delay_ms
	.dbline 373
; xx=0;
	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
	.dbline 377
; //LCD_Init();
; //LCD_clear();
; 
; DDRE &= ~0x7c;//if (!(PORTE & STOP))  if (!(PORTE & VOLDOWN))  if (!(PORTE & VOLUP))  if (!(PORTE & NEXTSONG))  if (!(PORTE & PREVSONG))
	in R24,0x2
	andi R24,131
	out 0x2,R24
	.dbline 378
; PORTE |=0x7c;
	in R24,0x3
	ori R24,124
	out 0x3,R24
	.dbline 380
; 
; PORTD=0x01;
	ldi R24,1
	out 0x12,R24
	.dbline 386
; //number(0,0,4,-999,1);
; 	     /* OCR1AL = pwm_pingjun;
;  		  OCR1BL = pwm_pingjun;
;  		  OCR1CL = pwm_pingjun;
;  		  OCR0=pwm_pingjun;*/
; OCR1BH = 0;
	clr R2
	out 0x29,R2
	.dbline 387
; OCR1BL = 0;
	out 0x28,R2
	.dbline 388
; pwm_duoji=177;
	ldi R24,177
	ldi R25,0
	movw R10,R24
	xjmp L88
L87:
	.dbline 390
; while(1)
; {
	.dbline 391
; 		if (!(PINE & NEXTSONG))
	sbic 0x1,3
	rjmp L90
X47:
	.dbline 392
; 	     {delay_ms(500);
	.dbline 392
	ldi R16,500
	ldi R17,1
	xcall _delay_ms
	.dbline 393
; 		  if (!(PINE & NEXTSONG))
	sbic 0x1,3
	rjmp L92
X48:
	.dbline 394
; 		  {
	.dbline 396
; 			 //CLI();
; 		     if(pwm_duoji<900) pwm_duoji++;//2.5ms
	movw R24,R10
	cpi R24,132
	ldi R30,3
	cpc R25,R30
	brsh L94
X49:
	.dbline 396
	adiw R24,1
	movw R10,R24
L94:
	.dbline 397
;  			 OCR1BH = (pwm_duoji>>8)&0x07;
	movw R24,R10
	mov R24,R25
	clr R25
	andi R24,7
	andi R25,0
	out 0x29,R24
	.dbline 398
;  			 OCR1BL = pwm_duoji; 
	out 0x28,R10
	.dbline 404
; 			 /*OCR1BH = 0x03;
;  			 OCR1BL = 0xF0;
;  			 OCR1CH = 0x03;
;  			 OCR1CL = 0xF0;
; 			 */
; 			PWM_ON
	in R24,0x17
	ori R24,240
	out 0x17,R24
	.dbline 406
; 			//SEI();
; 		  }
L92:
	.dbline 407
; 		}
L90:
	.dbline 408
; 		if (!(PINE & PREVSONG))
	sbic 0x1,2
	rjmp L96
X50:
	.dbline 409
; 	     {delay_ms(500);
	.dbline 409
	ldi R16,500
	ldi R17,1
	xcall _delay_ms
	.dbline 410
; 		  if (!(PINE & PREVSONG))
	sbic 0x1,2
	rjmp L98
X51:
	.dbline 411
; 		  {
	.dbline 413
; 			 //CLI();
; 		     if(pwm_duoji>200) pwm_duoji--;//0.5ms
	ldi R24,200
	ldi R25,0
	cp R24,R10
	cpc R25,R11
	brsh L100
X52:
	.dbline 413
	movw R24,R10
	sbiw R24,1
	movw R10,R24
L100:
	.dbline 414
;  			 OCR1BH = (pwm_duoji>>8)&0x07;
	movw R24,R10
	mov R24,R25
	clr R25
	andi R24,7
	andi R25,0
	out 0x29,R24
	.dbline 415
;  			 OCR1BL = pwm_duoji; 
	out 0x28,R10
	.dbline 421
; 			 /*OCR1BH = 0x03;
;  			 OCR1BL = 0xF0;
;  			 OCR1CH = 0x03;
;  			 OCR1CL = 0xF0;
; 			 */
; 			PWM_ON
	in R24,0x17
	ori R24,240
	out 0x17,R24
	.dbline 423
; 			//SEI();
; 		  }
L98:
	.dbline 424
; 		}
L96:
	.dbline 426
; 
; }
L88:
	.dbline 389
	xjmp L87
L102:
	.dbline 428
;   while(1)
;   { //(unsigned char)jiaodu;
	.dbline 429
;   	PORTF=juli;
	lds R2,_juli
	lds R3,_juli+1
	sts 98,R2
	.dbline 430
;   	if (!(PINE & STOP))jiaodu=100;//PWM_ON//PORTD=~PORTD;
	sbic 0x1,6
	rjmp L105
X53:
	.dbline 430
	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
L105:
	.dbline 431
;     if (ms==1)
	lds R24,_ms
	lds R25,_ms+1
	cpi R24,1
	ldi R26,0
	cpc R25,R26
	breq X65
	xjmp L107
X65:
X54:
	.dbline 432
;    	   { //if (jiaodu!=n_jiaodu)//test
	.dbline 433
; 	   	 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 X66
	xjmp L109
X66:
X55:
	.dbline 434
; 	      {//PORTF=jiaodu;
	.dbline 436
; 		    //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 L111
X56:
	.dbline 437
; 	   	 	 {DDRB |=(R_pwm1 | L_pwm0);
	.dbline 437
	in R24,0x17
	ori R24,96
	out 0x17,R24
	.dbline 438
; 			  DDRB &=~(R_pwm1 | L_pwm0);
	in R24,0x17
	andi R24,159
	out 0x17,R24
	.dbline 439
; 			  PORTB &=~(R_pwm0 |R_pwm1| L_pwm1 | L_pwm0);
	in R24,0x18
	andi R24,15
	out 0x18,R24
	.dbline 440
; 			  OCR1AL = pwm_pingjun;
	lds R2,_pwm_pingjun
	out 0x2a,R2
	.dbline 441
;  		  	  OCR1BL = pwm_pingjun;
	out 0x28,R2
	.dbline 442
;  		  	  OCR1CL = 0;
	clr R2
	sts 120,R2
	.dbline 443
;  		  	  OCR0=0;
	out 0x31,R2
	.dbline 444
; 			  PWM_ON
	in R24,0x17
	ori R24,240
	out 0x17,R24
	.dbline 445
; 			 }
	xjmp L112
L111:
	.dbline 447
; 		    //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 L113
X57:
	.dbline 448
; 	   	 	 {DDRB |=(R_pwm0 | L_pwm1);
	.dbline 448
	in R24,0x17
	ori R24,144
	out 0x17,R24
	.dbline 449
; 			  DDRB &=~(R_pwm0 | L_pwm1);
	in R24,0x17
	andi R24,111
	out 0x17,R24
	.dbline 450
; 			  PORTB =0xf0;
	ldi R24,240
	out 0x18,R24
	.dbline 451
; 			  OCR1AL = 0;
	clr R2
	out 0x2a,R2
	.dbline 452
;  		  	  OCR1BL = 0;
	out 0x28,R2
	.dbline 453
;  		  	  OCR1CL = pwm_pingjun;
	lds R2,_pwm_pingjun
	sts 120,R2
	.dbline 454
;  		  	  OCR0=pwm_pingjun;
	out 0x31,R2
	.dbline 455
; 			  PWM_ON
	in R24,0x17
	ori R24,240
	out 0x17,R24
	.dbline 456
; 			 }
	xjmp L114
L113:
	.dbline 457
; 		    else PWM_OFF
	in R24,0x17
	andi R24,15
	out 0x17,R24
L114:
L112:
	.dbline 458
; 		   n_jiaodu=jiaodu;
	lds R10,_jiaodu
	.dbline 459
; 		  }
L109:
	.dbline 460
; 		 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 X67
	xjmp L115
X67:
X58:
	.dbline 461
; 		 if (sec!=n_sec)
	lds R2,_sec
	cp R2,R10
	brne X68
	xjmp L117
X68:
X59:
	.dbline 462
; 		    {
	.dbline 463
; 			 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 L119
X60:
	.dbline 464
; 	   	 	  {DDRB |=(R_pwm1 | L_pwm1);
	.dbline 464
	in R24,0x17
	ori R24,160
	out 0x17,R24
	.dbline 465
; 			   DDRB &=~(R_pwm1 | L_pwm1);
	in R24,0x17
	andi R24,95
	out 0x17,R24
	.dbline 466
; 			   OCR1AL = 0;
	clr R2
	out 0x2a,R2
	.dbline 467
;  		  	   OCR1BL = pwm_pingjun+Rpwm0;
	lds R2,_Rpwm0
	lds R3,_pwm_pingjun
	add R3,R2
	out 0x28,R3
	.dbline 468
;  		  	   OCR1CL = 0;
	clr R2
	sts 120,R2
	.dbline 469
;  		  	   OCR0=pwm_pingjun;
	lds R2,_pwm_pingjun
	out 0x31,R2
	.dbline 470
; 			   PWM_ON
	in R24,0x17
	ori R24,240
	out 0x17,R24
	.dbline 471
; 			   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 472
; 			  }
	xjmp L120
L119:
	.dbline 473
; 			 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 L121
X61:
	.dbline 474
; 	   	 	  {DDRB |=(R_pwm0 | L_pwm0);
	.dbline 474
	in R24,0x17
	ori R24,80
	out 0x17,R24
	.dbline 475
; 			   DDRB &=~(R_pwm0 | L_pwm0);
	in R24,0x17
	andi R24,175
	out 0x17,R24
	.dbline 476
; 			   OCR1AL = pwm_pingjun;
	lds R2,_pwm_pingjun
	out 0x2a,R2
	.dbline 477
;  		  	   OCR1BL = 0;
	clr R2
	out 0x28,R2
	.dbline 478
;  		  	   OCR1CL = pwm_pingjun;
	lds R2,_pwm_pingjun
	sts 120,R2
	.dbline 479
;  		  	   OCR0=0;
	clr R2
	out 0x31,R2
	.dbline 480
; 			   PWM_ON
	in R24,0x17
	ori R24,240
	out 0x17,R24
	.dbline 481
; 			   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 482
; 			  }/**/
	xjmp L122
L121:
	.dbline 483
; 			 else PWM_OFF
	in R24,0x17
	andi R24,15
	out 0x17,R24
L122:
L120:
	.dbline 484
; 			n_sec=sec;
	lds R10,_sec
	.dbline 485
; 			}	
L117:
L115:
	.dbline 489
; 
; 	   	//number(0,2,5,xx,1);
; 		//number(0,4,5,ADCjohu,1);
; 		if (!(PINE & PREVSONG))xx=0;
	sbic 0x1,2
	rjmp L123
X62:
	.dbline 489
	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
L123:
	.dbline 490
; 		if (!(PINE & NEXTSONG))
	sbic 0x1,3
	rjmp L125
X63:
	.dbline 491
; 	    	{
	.dbline 493
; 			//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 494
; 			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 495
; 			delay_ms(20);
	ldi R16,20
	ldi R17,0
	xcall _delay_ms
	.dbline 497
; 			//SEI();
; 			}
L125:
	.dbline 498
;    	    ms=0;
	clr R2
	clr R3
	sts _ms+1,R3
	sts _ms,R2
	.dbline 499
;        }
L107:
	.dbline 500
;   }
L103:
	.dbline 427
	xjmp L102
X64:
	.dbline -2
L86:
	.dbline 0 ; func end
	adiw R28,1
	ret
	.dbsym l n 2 I
	.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 + -