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

📄 main.s

📁 一个正在应用的步进电机控制程序,包括电机的调速,正反,细分,通讯控制
💻 S
📖 第 1 页 / 共 4 页
字号:
	.dbline 237
;    if (micros_nu0==16)
	lds R24,_micros_nu0
	cpi R24,16
	brne L32
	.dbline 238
;       {da_counter=da_counter+2;}
	.dbline 238
	lds R24,_da_counter
	subi R24,254    ; addi 2
	sts _da_counter,R24
	.dbline 238
	xjmp L33
L32:
	.dbline 240
;    else 
;    	  {
	.dbline 241
; 	  if (micros_nu0==8)
	lds R24,_micros_nu0
	cpi R24,8
	brne L34
	.dbline 242
; 	     {da_counter=da_counter+4;}
	.dbline 242
	lds R24,_da_counter
	subi R24,252    ; addi 4
	sts _da_counter,R24
	.dbline 242
	xjmp L35
L34:
	.dbline 244
; 	  else
; 	     {
	.dbline 245
; 		 if (micros_nu0==4)
	lds R24,_micros_nu0
	cpi R24,4
	brne L36
	.dbline 246
; 		 	{da_counter=da_counter+8;}
	.dbline 246
	lds R24,_da_counter
	subi R24,248    ; addi 8
	sts _da_counter,R24
	.dbline 246
	xjmp L37
L36:
	.dbline 248
; 	     else
; 		    {
	.dbline 249
; 			if (micros_nu0==2)
	lds R24,_micros_nu0
	cpi R24,2
	brne L38
	.dbline 250
; 			   {da_counter=da_counter+16;}
	.dbline 250
	lds R24,_da_counter
	subi R24,240    ; addi 16
	sts _da_counter,R24
	.dbline 250
	xjmp L39
L38:
	.dbline 252
; 			else
; 			   {
	.dbline 253
; 			   if (micros_nu0==1)
	lds R24,_micros_nu0
	cpi R24,1
	brne L40
	.dbline 254
; 			      {da_counter=da_counter+32;}
	.dbline 254
	lds R24,_da_counter
	subi R24,224    ; addi 32
	sts _da_counter,R24
	.dbline 254
L40:
	.dbline 255
; 			   }
L39:
	.dbline 256
; 			}
L37:
	.dbline 257
; 		 }
L35:
	.dbline 258
; 	  }
L33:
	.dbline 259
L31:
	.dbline -2
L1:
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R18,y+
	ld R16,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbsym r j 16 c
	.dbsym r i 18 c
	.dbend
	.dbfunc e time2_int _time2_int fV
	.even
_time2_int::
	st -y,R2
	st -y,R3
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 266
;    }
; }
; 
; /******************************************************
; 测量脉冲闸门时间波形中断函数(定时器2比较匹配中断)20-12KHZ  1-600RPM
; ******************************************************/
; void time2_int(void)
; {
	.dbline 268
; //200MS闸门
; counter++;
	lds R24,_counter
	subi R24,255    ; addi 1
	sts _counter,R24
	.dbline 269
; if (counter==6)
	cpi R24,6
	brne L43
	.dbline 270
;   {OCR2=32;}
	.dbline 270
	ldi R24,32
	out 0x23,R24
	.dbline 270
L43:
	.dbline 271
	lds R24,_counter
	cpi R24,7
	brne L45
	.dbline 272
	.dbline 273
	lds R2,_pull_number
	lds R3,_pull_number+1
	sts _speed_pull+1,R3
	sts _speed_pull,R2
	.dbline 274
	clr R2
	clr R3
	sts _pull_number+1,R3
	sts _pull_number,R2
	.dbline 275
	sts _counter,R2
	.dbline 276
	ldi R24,255
	out 0x23,R24
	.dbline 277
L45:
	.dbline -2
L42:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e pull_int _pull_int fV
	.even
_pull_int::
	st -y,R2
	st -y,R3
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 283
	.dbline 284
	lds R24,_pull_number
	lds R25,_pull_number+1
	adiw R24,1
	sts _pull_number+1,R25
	sts _pull_number,R24
	.dbline 285
	ldi R24,2400
	ldi R25,9
	lds R2,_pull_number
	lds R3,_pull_number+1
	cp R24,R2
	cpc R25,R3
	brsh L48
	.dbline 286
	.dbline 286
	sts _pull_number+1,R25
	sts _pull_number,R24
	.dbline 286
L48:
	.dbline -2
L47:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 292
; if (counter==7)
;   {
;   speed_pull=pull_number;
;   pull_number=0;
;   counter=0;
;   OCR2=0XFF;
;   }
; }
; /******************************************************
; 测量脉冲数中断函数(外部INT0中断)
; ******************************************************/
; void pull_int(void)
; {
; pull_number++;
; if (pull_number>2400)
;   {pull_number=2400;}
; }
; /****************************************************************
;                              定时器1初始化函数
; ****************************************************************/
; void timer1_init(void)
; {
	.dbline 293
;  TCCR1B = (1<<CS10)|(1<<WGM12); 	 		  //time1的控制寄存器B,CTC模式,clk=系统时钟
	ldi R24,9
	out 0x2e,R24
	.dbline 294
;  TIMSK &=~(1<<OCIE1A);                        //定时中断屏蔽寄存器
	in R24,0x39
	andi R24,239
	out 0x39,R24
	.dbline -2
L50:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer2_init _timer2_init fV
	.even
_timer2_init::
	.dbline -1
	.dbline 301
; }
; 
; /****************************************************************
;                              定时器2初始化函数
; ****************************************************************/
; void timer2_init(void)
; {
	.dbline 302
; TCCR2=(1<<CS20)|(1<<CS21)|(1<<CS22)|(1<<WGM21);
	ldi R24,15
	out 0x25,R24
	.dbline 303
; OCR2=0XFF;
	ldi R24,255
	out 0x23,R24
	.dbline -2
L51:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e int0_init _int0_init fV
	.even
_int0_init::
	.dbline -1
	.dbline 309
; }
; /****************************************************************
;                              INT0初始化函数
; ****************************************************************/
; void int0_init(void)
; {
	.dbline 310
; DDRD&=~(1<PULL_IN);
	cbi 0x11,0
	.dbline 311
; MCUCR=(1<<ISC01)|(1<<ISC00);
	ldi R24,3
	out 0x35,R24
	.dbline -2
L52:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 319
; }
; 
; 
; /****************************************************************
; 端口初始化
; ****************************************************************/
; void port_init(void)
; {
	.dbline 328
;  //PORTA = 0xff;
;  //DDRA  = 0xdf;
;  //PORTB = 0x00;
;  //DDRB  = 0x00;
;  //PORTC = 0b01111110;             
;  //DDRC  = 0b10000001;
;  //PORTD = 0xff;
;  //DDRD  = 0x00;
; PORTC&=~(1<<INT);
	cbi 0x15,1
	.dbline 329
; DDRC |=(1<<INT);
	sbi 0x14,1
	.dbline -2
L53:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e pull_start _pull_start fV
	.even
_pull_start::
	.dbline -1
	.dbline 336
; }
; 
; /******************************************************
; 脉冲输入开始函数
; ******************************************************/
; void pull_start(void)
; {
	.dbline 337
; GICR|=(1<<INT0);
	in R24,0x3b
	ori R24,64
	out 0x3b,R24
	.dbline 338
; TIMSK|=(1<<OCIE2);
	in R24,0x39
	ori R24,128
	out 0x39,R24
	.dbline 339
; pull_number=0;
	clr R2
	clr R3
	sts _pull_number+1,R3
	sts _pull_number,R2
	.dbline 340
; counter=0;
	sts _counter,R2
	.dbline 341
; OCR2=0XFF;
	ldi R24,255
	out 0x23,R24
	.dbline -2
L54:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e pull_stop _pull_stop fV
	.even
_pull_stop::
	.dbline -1
	.dbline 347
; }
; /******************************************************
; 脉冲输入开始函数
; ******************************************************/
; void pull_stop(void)
; {
	.dbline 348
; GICR&=~(1<<INT0);
	in R24,0x3b
	andi R24,191
	out 0x3b,R24
	.dbline 349
; TIMSK&=~(1<<OCIE2);
	in R24,0x39
	andi R24,127
	out 0x39,R24
	.dbline -2
L55:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e da_init _da_init fV
	.even
_da_init::
	.dbline -1
	.dbline 355
; }
; /******************************************************
; D/A初始化函数
; ******************************************************/
; void da_init(void)
; {
	.dbline 356
; cal_timer1(speed);
	lds R16,_speed
	lds R17,_speed+1
	xcall _cal_timer1
	.dbline 357
; PORTA|=(1<<DA_WR);
	sbi 0x1b,1
	.dbline 358
; PORTD|=(1<<DA_CS);
	sbi 0x12,6
	.dbline 359
; DDRA|=(1<<DA_WR);
	sbi 0x1a,1
	.dbline 360
; DDRD|=(1<<DA_CS)|(1<<DA_AB);
	in R24,0x11
	ori R24,192
	out 0x11,R24
	.dbline 361
; DDRC|=(1<<DA_SIN)|(1<<DA_COS);
	in R24,0x14
	ori R24,192
	out 0x14,R24
	.dbline 362
; DATA_OUT=0x00;
	clr R2
	out 0x18,R2
	.dbline 363
; DATA_IO=0xff;
	ldi R24,255
	out 0x17,R24
	.dbline 364
; timer1_init();
	xcall _timer1_init
	.dbline -2
L56:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e adc_init _adc_init fV
	.even
_adc_init::
	.dbline -1
	.dbline 372
; }
; 
; 
; /****************************************************************
; A/D初始化
; ****************************************************************/
; void adc_init(void)
; {
	.dbline 373
; ADMUX=0b00000000;	  //选择ADC0做AD输入						 
	clr R2
	out 0x7,R2
	.dbline 374
; ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADATE);  //允许AD转换,128分频
	ldi R24,167
	out 0x6,R24
	.dbline -2
L57:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e adc_change _adc_change fV
;              l -> R22
;              g -> R20,R21
;              s -> y+0
;              j -> R12,R13
;              k -> R10
;              i -> R14
	.even
_adc_change::
	xcall push_gset5
	sbiw R28,20
	.dbline -1
	.dbline 380
; }
; 
; 
; 
; void adc_change(void)
; {
	.dbline 387
; unsigned char i;
; unsigned char k;
; unsigned int j;
; unsigned int g;
; unsigned char l;
; unsigned int s[10];
; g=0;
	clr R20
	clr R21
	.dbline 388
; for (l=0;l<10;l++)
	clr R22
	xjmp L62
L59:
	.dbline 389
; 	{
	.dbline 390
; 	for (k=0;k<10;k++)
	clr R10
	xjmp L66
L63:
	.dbline 391
; 		{
	.dbline 392
; 		ADCSRA|=(1<<ADSC);
	sbi 0x6,6
	.dbline 393
; 		i=ADCSRA;
	in R14,0x6
	xjmp L68
L67:
	.dbline 395
	.dbline 395
	in R14,0x6
	.dbline 395
L68:
	.dbline 394
	sbrs R14,4
	rjmp L67
	.dbline 396
	in R12,0x4
	in R13,0x5
	.dbline 397
	ldi R24,2
	mul R24,R10
	movw R30,R0
	movw R24,R28
	add R30,R24
	adc R31,R25
	std z+1,R13
	std z+0,R12
	.dbline 398
	sbi 0x6,4
	.dbline 399
L64:
	.dbline 390
	inc R10
L66:
	.dbline 390
	mov R24,R10
	cpi R24,10
	brlo L63
	.dbline 400
; 		while ((i&(1<<ADIF))==0)
;    			  {i=ADCSRA;}
;    		j=ADC;
;    		s[k]=j; 
;   		ADCSRA|=(1<<ADIF);
; 		}
; 	ins(s,10);
	ldi R18,10
	movw R16,R28
	xcall _ins
	.dbline 401
; 	j=0;
	clr R12
	clr R13
	.dbline 402
; 	for (k=0;k<5;k++)
	clr R10
	xjmp L73
L70:
	.dbline 403
	.dbline 404
	ldi R24,2
	mul R24,R10
	movw R30,R0
	movw R24,R28
	adiw R24,4
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	add R12,R2
	adc R13,R3
	.dbline 405
L71:
	.dbline 402
	inc R10
L73:
	.dbline 402
	mov R24,R10
	cpi R24,5
	brlo L70
	.dbline 406
	ldi R18,5
	ldi R19,0
	movw R16,R12
	xcall div16u
	movw R12,R16
	.dbline 407
	add R20,R16
	adc R21,R17
	.dbline 408
L60:
	.dbline 388
	inc R22
L62:
	.dbline 388
	cpi R22,10
	brsh X0
	xjmp L59
X0:
	.dbline 409
;   		 {
;    		 j=j+s[k+2];
;   		 }
; 	j=j/5;
; 	g=g+j;
; 	}
; g=g/10; 
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall div16u
	movw R20,R16
	.dbline 410
; g=g*6/10;
	ldi R16,6
	ldi R17,0
	movw R18,R20
	xcall empy16s
	ldi R18,10
	ldi R19,0
	xcall div16u
	movw R20,R16
	.dbline 411
; if (g<=6)
	ldi R24,6
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlo L75
	.dbline 412
;   {g=1;}
	.dbline 412
	ldi R20,1
	ldi R21,0
	.dbline 412
	xjmp L76
L75:

⌨️ 快捷键说明

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