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

📄 main.s

📁 数字舵机(1) 数字脉宽检测 数字脉宽检测
💻 S
📖 第 1 页 / 共 4 页
字号:
	.dbline 242
	lds R2,155
	sbrs R2,5
	rjmp L52
X36:
	.dbline 242
	ldi R24,43
	sts 156,R24
	.dbline 242
L55:
	.dbline 243
; 		     while(!(UCSR1A&(1<<UDRE1)));
L56:
	.dbline 243
	lds R2,155
	sbrs R2,5
	rjmp L55
X37:
	.dbline 244
; 		     UDR1=(n/10000)%10+48;
	ldi R24,16
	ldi R25,39
	ldi R26,0
	ldi R27,0
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	st -y,R27
	st -y,R26
	st -y,R25
	st -y,R24
	xcall div32s
	ldi R24,10
	ldi R25,0
	ldi R26,0
	ldi R27,0
	st -y,R27
	st -y,R26
	st -y,R25
	st -y,R24
	xcall mod32s
	movw R2,R16
	movw R4,R18
	ldi R24,48
	ldi R25,0
	ldi R26,0
	ldi R27,0
	add R2,R24
	adc R3,R25
	adc R4,R26
	adc R5,R27
	sts 156,R2
L58:
	.dbline 245
; 		     while(!(UCSR1A&(1<<UDRE1)));
L59:
	.dbline 245
	lds R2,155
	sbrs R2,5
	rjmp L58
X38:
	.dbline 246
; 		     UDR1=(n/1000)%10+48;
	ldi R24,232
	ldi R25,3
	ldi R26,0
	ldi R27,0
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	st -y,R27
	st -y,R26
	st -y,R25
	st -y,R24
	xcall div32s
	ldi R24,10
	ldi R25,0
	ldi R26,0
	ldi R27,0
	st -y,R27
	st -y,R26
	st -y,R25
	st -y,R24
	xcall mod32s
	movw R2,R16
	movw R4,R18
	ldi R24,48
	ldi R25,0
	ldi R26,0
	ldi R27,0
	add R2,R24
	adc R3,R25
	adc R4,R26
	adc R5,R27
	sts 156,R2
L61:
	.dbline 247
; 			 while(!(UCSR1A&(1<<UDRE1)));
L62:
	.dbline 247
	lds R2,155
	sbrs R2,5
	rjmp L61
X39:
	.dbline 248
; 		     UDR1=(n/100)%10+48;
	ldi R24,100
	ldi R25,0
	ldi R26,0
	ldi R27,0
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	st -y,R27
	st -y,R26
	st -y,R25
	st -y,R24
	xcall div32s
	ldi R24,10
	ldi R25,0
	ldi R26,0
	ldi R27,0
	st -y,R27
	st -y,R26
	st -y,R25
	st -y,R24
	xcall mod32s
	movw R2,R16
	movw R4,R18
	ldi R24,48
	ldi R25,0
	ldi R26,0
	ldi R27,0
	add R2,R24
	adc R3,R25
	adc R4,R26
	adc R5,R27
	sts 156,R2
L64:
	.dbline 249
; 			 while(!(UCSR1A&(1<<UDRE1)));
L65:
	.dbline 249
	lds R2,155
	sbrs R2,5
	rjmp L64
X40:
	.dbline 250
; 		     UDR1=(n/10)%10+48;
	ldi R24,10
	ldi R25,0
	ldi R26,0
	ldi R27,0
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	st -y,R27
	st -y,R26
	st -y,R25
	st -y,R24
	xcall div32s
	ldi R24,10
	ldi R25,0
	ldi R26,0
	ldi R27,0
	st -y,R27
	st -y,R26
	st -y,R25
	st -y,R24
	xcall mod32s
	movw R2,R16
	movw R4,R18
	ldi R24,48
	ldi R25,0
	ldi R26,0
	ldi R27,0
	add R2,R24
	adc R3,R25
	adc R4,R26
	adc R5,R27
	sts 156,R2
L67:
	.dbline 251
; 			 while(!(UCSR1A&(1<<UDRE1)));
L68:
	.dbline 251
	lds R2,155
	sbrs R2,5
	rjmp L67
X41:
	.dbline 252
; 		     UDR1=n%10+48;
	ldi R24,10
	ldi R25,0
	ldi R26,0
	ldi R27,0
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	st -y,R27
	st -y,R26
	st -y,R25
	st -y,R24
	xcall mod32s
	movw R2,R16
	movw R4,R18
	ldi R24,48
	ldi R25,0
	ldi R26,0
	ldi R27,0
	add R2,R24
	adc R3,R25
	adc R4,R26
	adc R5,R27
	sts 156,R2
	.dbline 253
; 			if (huanhang)
	ldd R0,y+8
	tst R0
	breq L79
X42:
	.dbline 254
; 			 {
L72:
	.dbline 255
; 			  while(!(UCSR1A&(1<<UDRE1)));
L73:
	.dbline 255
	lds R2,155
	sbrs R2,5
	rjmp L72
X43:
	.dbline 256
; 		      UDR1=0x0d;
	ldi R24,13
	sts 156,R24
L75:
	.dbline 257
; 			  while(!(UCSR1A&(1<<UDRE1)));
L76:
	.dbline 257
	lds R2,155
	sbrs R2,5
	rjmp L75
X44:
	.dbline 258
; 		      UDR1=0x0a;
	ldi R24,10
	sts 156,R24
	.dbline 259
; 			 }
	xjmp L71
L78:
	.dbline 262
; 			 else
; 			 {
; 			  while(!(UCSR1A&(1<<UDRE1)));
L79:
	.dbline 262
	lds R2,155
	sbrs R2,5
	rjmp L78
X45:
	.dbline 263
; 		      UDR1=0x20;
	ldi R24,32
	sts 156,R24
L81:
	.dbline 264
; 			  while(!(UCSR1A&(1<<UDRE1)));
L82:
	.dbline 264
	lds R2,155
	sbrs R2,5
	rjmp L81
X46:
	.dbline 265
; 		      UDR1=0x20;
	ldi R24,32
	sts 156,R24
	.dbline 266
; 			 } 
L71:
	.dbline -2
L46:
	.dbline 0 ; func end
	adiw R28,8
	ret
	.dbsym l n 0 L
	.dbsym l huanhang 8 c
	.dbsym l NUM 4 L
	.dbend
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 276
; }
; 
; 
; 
; //TIMER0 initialize - prescale:64
; // WGM: PWM Fast
; // desired value: 1KHz
; // actual value:  0.488KHz (-104.8%)
; void timer0_init(void)
; {
	.dbline 277
;  TCCR0 = 0x00; //stop
	clr R2
	out 0x33,R2
	.dbline 278
;  ASSR  = 0x00; //set async mode
	out 0x30,R2
	.dbline 279
;  TCNT0 = 0x01; //set count
	ldi R24,1
	out 0x32,R24
	.dbline 280
;  OCR0  = 0x0f;
	ldi R24,15
	out 0x31,R24
	.dbline 281
;  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 329
; }
; 
; //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:256
; // WGM: 7) PWM 10bit fast, TOP=0x03FF
; // desired value: 40mSec
; // actual value: 32.768mSec (18.1%)
; void timer1_init(void)
; {
	.dbline 330
;  TCCR1B = 0x00; //stop
	clr R2
	out 0x2e,R2
	.dbline 331
;  TCNT1H = 0xFC; //setup
	ldi R24,252
	out 0x2d,R24
	.dbline 332
;  TCNT1L = 0x01;
	ldi R24,1
	out 0x2c,R24
	.dbline 333
;  OCR1AH = 0x03;
	ldi R24,3
	out 0x2b,R24
	.dbline 334
;  OCR1AL = 0xFF;
	ldi R24,255
	out 0x2a,R24
	.dbline 335
;  OCR1BH = 0x03;
	ldi R24,3
	out 0x29,R24
	.dbline 336
;  OCR1BL = 0xFF;
	ldi R24,255
	out 0x28,R24
	.dbline 337
;  OCR1CH = 0x03;
	ldi R24,3
	sts 121,R24
	.dbline 338
;  OCR1CL = 0xFF;
	ldi R24,255
	sts 120,R24
	.dbline 339
;  ICR1H  = 0x03;
	ldi R24,3
	out 0x27,R24
	.dbline 340
;  ICR1L  = 0xFF;
	ldi R24,255
	out 0x26,R24
	.dbline 341
;  TCCR1A = 0xAB;
	ldi R24,171
	out 0x2f,R24
	.dbline 342
;  TCCR1B = 0x0C; //start Timer
	ldi R24,12
	out 0x2e,R24
	.dbline -2
L85:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 44
	jmp _timer1_capt_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\ZDH\桌面\JOHU_2~1.180\digital_duoji\buhuo\main.c
	.dbfunc e timer1_capt_isr _timer1_capt_isr fV
	.even
_timer1_capt_isr::
	st -y,R2
	st -y,R3
	st -y,R24
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 350
; }
; 
; #pragma interrupt_handler timer1_capt_isr:iv_TIM1_CAPT
; 
; void timer1_capt_isr(void)
; //ICP输入捕获中断处理程序 
; //SIGNAL(SIG_INPUT_CAPTURE1) 
; { //PORTF=~PORTF;
	.dbline 352
;         
; 		if(shang_johu)
	lds R2,_shang_johu
	tst R2
	breq L87
X47:
	.dbline 353
; 		  {
	.dbline 355
; 		     					//ICR1=0;;	
; 						        temp1 = ICR1;							   
	in R2,0x26
	in R3,0x27
	sts _temp1+1,R3
	sts _temp1,R2
	.dbline 357
;                                 //TCCR1B |= (1<<ICNC1)|(1<<CS11);//8分频,8M时钟时正好1us                                
; 								TCCR1B &= ~(1<<ICES1); 	
	in R24,0x2e
	andi R24,191
	out 0x2e,R24
	.dbline 358
; 								shang_johu=0;	
	clr R2
	sts _shang_johu,R2
	.dbline 360
; 								
; 		  }
	xjmp L88
L87:
	.dbline 362
; 		else
; 		  {
	.dbline 363
;                                 temp2 = ICR1; 
	in R2,0x26
	in R3,0x27
	sts _temp2+1,R3
	sts _temp2,R2
	.dbline 372
;                                 //TIMSK &= ~((1<<TICIE1)|(1<<TOIE1));//关闭中断使能                                 
;                                 //TCCR1B &= ~((1<<CS12)|(1<<CS11)|(1<<CS10)); 
;                                 //TCNT1 = 0; 
;                                 
; 														 
;                                //temp2 -= temp1; 
; 							  
;    							   //TCCR1B=0x00; 
; 							   TCCR1B |= (1<<ICES1);
	in R24,0x2e
	ori R24,64
	out 0x2e,R24
	.dbline 373
; 							   count1=0;
	clr R2
	sts _count1,R2
	.dbline 374
; 							   shang_johu=1;	 
	ldi R24,1
	sts _shang_johu,R24
	.dbline 375
; 		  }
L88:
	.dbline -2
L86:
	.dbline 0 ; func end
	ld R2,y+
	out 0x3f,R2
	ld R24,y+
	ld R3,y+
	ld R2,y+
	reti
	.dbend
	.dbfunc e main _main fI
;              n -> <dead>
;              i -> R12
;         n_juli -> R10
;       n_jiaodu -> R10
;          n_sec -> R10
;      pwm_duoji -> R10,R11
	.even
_main::
	sbiw R28,1
	.dbline -1
	.dbline 416
; //shang_johu=!shang_johu;
; /*
; 		count1++;
;         switch(count1) 
;         { 
;                 case 2://第一次捕获,则开始计数 
;                         {
; 						       ICR1=0;
; 						       temp1 = ICR1;
; 							   
;                                 TCCR1B |= (1<<ICNC1)|(1<<CS11);//8分频,8M时钟时正好1us                                
; 								TCCR1B &= ~(1<<ICES1); 				
; 					   		    
;                         } 
;                         break; 
;                 case 3: //第二次捕获,表示一个周期结束,计数结束 
;                         { 
;                                 temp2 = ICR1; 
;                                 TIMSK &= ~((1<<TICIE1)|(1<<TOIE1));//关闭中断使能                                 
;                                 //TCCR1B &= ~((1<<CS12)|(1<<CS11)|(1<<CS10)); 
;                                 //TCNT1 = 0; 
;                                 
; 														 
;                                //temp2 -= temp1; 
; 							  
;    							   TCCR1B=0x00; 
; 							   TCCR1B |= (1<<ICES1);
; 							   count1=0;
;                         } 
;                         break; 
; 						
;                 default:  ; 
;         } 
; */		 
; } 
; 
; 
; #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 417
; unsigned char n_jiaodu=0,n_juli=0;
	clr R10
	.dbline 417
	.dbline 418
; unsigned char n_sec=0;
	.dbline 419
; unsigned int pwm_duoji=0;
	clr R11
	.dbline 422
; 
; 
; unsigned char i=0;
	clr R12
	.dbline 423
; init_devices();
	xcall _init_devices
	.dbline 424
; timer1_init();timer0_init();
	xcall _timer1_init
	.dbline 424
	xcall _timer0_init
	.dbline 435
;  //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 445
; /////////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 446
; 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 447
; 			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 448
; 			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 449
; delay_ms(3000);	
	ldi R16,3000
	ldi R17,11
	xcall _delay_ms
	.dbline 450
; 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 454
; //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 455
; PORTE |=0x7c;
	in R24,0x3
	ori R24,124
	out 0x3,R24
	.dbline 457
; 
; PORTD=0x01;
	ldi R24,1
	out 0x12,R24
	.dbline 464
; //number(0,0,4,-999,1);
; 	     /* OCR1AL = pwm_pingjun;
;  		  OCR1BL = pwm_pingjun;
;  		  OCR1CL = pwm_pingjun;
;  		  OCR0=pwm_pingjun;*/
; 		  
;         PORTD &= ~(1<<PD4); 
	cbi 0x12,4
	.dbline 465
;         DDRD  &= ~(1<<PD4); 

⌨️ 快捷键说明

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