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

📄 main.s

📁 一个正在应用的步进电机控制程序,包括电机的调速,正反,细分,通讯控制
💻 S
📖 第 1 页 / 共 4 页
字号:
	.dbline 414
; else
;   {g=g-6;}
	.dbline 414
	subi R20,6
	sbci R21,0
	.dbline 414
L76:
	.dbline 415
; if (g>=600)
	cpi R20,88
	ldi R30,2
	cpc R21,R30
	brlo L77
	.dbline 416
;    {g=600;}
	.dbline 416
	ldi R20,600
	ldi R21,2
	.dbline 416
L77:
	.dbline 417
; if (g<=1)
	ldi R24,1
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brlo L79
	.dbline 418
;    {g=1;}
	.dbline 418
	ldi R20,1
	ldi R21,0
	.dbline 418
L79:
	.dbline 419
; out_ctr=g;
	sts _out_ctr+1,R21
	sts _out_ctr,R20
	.dbline -2
L58:
	adiw R28,20
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r l 22 c
	.dbsym r g 20 i
	.dbsym l s 0 A[20:10]i
	.dbsym r j 12 i
	.dbsym r k 10 c
	.dbsym r i 14 c
	.dbend
	.dbfunc e ins _ins fV
;              a -> R20
;              t -> R22,R23
;              b -> R10
;          count -> R18
;           item -> R16,R17
	.even
_ins::
	xcall push_gset3
	.dbline -1
	.dbline 423
; }
; 
; void ins(unsigned int *item,unsigned char count)
; {
	.dbline 427
; unsigned char a;
; unsigned char b;
; unsigned int t;
; for (a=1;a<count;a++)
	ldi R20,1
	xjmp L85
L82:
	.dbline 428
;    {
	.dbline 429
;    t=item[a];
	ldi R24,2
	mul R24,R20
	movw R30,R0
	add R30,R16
	adc R31,R17
	ldd R22,z+0
	ldd R23,z+1
	.dbline 430
;    b=a-1;
	mov R24,R20
	subi R24,1
	mov R10,R24
	xjmp L87
L86:
	.dbline 432
	.dbline 433
	ldi R24,2
	mul R24,R10
	movw R2,R0
	add R2,R16
	adc R3,R17
	movw R30,R2
	ldd R4,z+0
	ldd R5,z+1
	std z+3,R5
	std z+2,R4
	.dbline 434
	dec R10
	.dbline 435
L87:
	.dbline 431
;    while(b>=1&&t<item[b])
	mov R24,R10
	cpi R24,1
	brlo L89
	ldi R24,2
	mul R24,R10
	movw R30,R0
	add R30,R16
	adc R31,R17
	ldd R2,z+0
	ldd R3,z+1
	cp R22,R2
	cpc R23,R3
	brlo L86
L89:
	.dbline 436
	ldi R24,2
	mul R24,R10
	movw R30,R0
	add R30,R16
	adc R31,R17
	std z+3,R23
	std z+2,R22
	.dbline 437
L83:
	.dbline 427
	inc R20
L85:
	.dbline 427
	cp R20,R18
	brsh X1
	xjmp L82
X1:
	.dbline -2
L81:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r a 20 c
	.dbsym r t 22 i
	.dbsym r b 10 c
	.dbsym r count 18 c
	.dbsym r item 16 pi
	.dbend
	.dbfunc e i_en _i_en fV
	.even
_i_en::
	.dbline -1
	.dbline 444
;       {
; 	  item[b+1]=item[b];
; 	  b--;
; 	  }
;    item[b+1]=t;
;    }
; }
; 
; /*
; *电流输出允许函数
; */
; void i_en(void)
; {
	.dbline 445
; TIMSK |= (1<<OCIE1A);
	in R24,0x39
	ori R24,16
	out 0x39,R24
	.dbline 446
; PORTC|=(1<<INT);
	sbi 0x15,1
	.dbline 447
; DDRC |=(1<<INT);
	sbi 0x14,1
	.dbline -2
L90:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e i_disen _i_disen fV
	.even
_i_disen::
	.dbline -1
	.dbline 454
; }
; 
; /*
; *电流输出禁止函数
; */
; void i_disen(void)
; {
	.dbline 455
; TIMSK &=~(1<<OCIE1A);
	in R24,0x39
	andi R24,239
	out 0x39,R24
	.dbline 456
; delay_ms(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_ms
	.dbline 457
; PORTC&=~(1<<INT);
	cbi 0x15,1
	.dbline 458
; DDRC |=(1<<INT);
	sbi 0x14,1
	.dbline -2
L91:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e sp_mic _sp_mic fc
;              i -> R20
;           sudu -> R16,R17
	.even
_sp_mic::
	xcall push_gset1
	.dbline -1
	.dbline 465
; }
;   
; /*
; *根据速度判断细分数函数
; */
; unsigned char sp_mic(unsigned int sudu)
; {
	.dbline 467
; unsigned char i;
;    if (sudu<=410)
	ldi R24,410
	ldi R25,1
	cp R24,R16
	cpc R25,R17
	brlo L93
	.dbline 468
;    	  {
	.dbline 469
; 	  if (sudu<=290)
	ldi R24,34
	cp R24,R16
	cpc R25,R17
	brlo L95
	.dbline 470
; 	  	 {
	.dbline 471
; 		 if(sudu<=210)
	ldi R24,210
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlo L97
	.dbline 472
; 		    {
	.dbline 473
; 			if (sudu<=140)
	ldi R24,140
	cp R24,R16
	cpc R25,R17
	brlo L99
	.dbline 474
; 			   {i=16;}
	.dbline 474
	ldi R20,16
	.dbline 474
	xjmp L94
L99:
	.dbline 476
; 			else
; 			   {i=8;}
	.dbline 476
	ldi R20,8
	.dbline 476
	.dbline 477
; 			}
	xjmp L94
L97:
	.dbline 479
; 		 else
; 		    {i=4;}
	.dbline 479
	ldi R20,4
	.dbline 479
	.dbline 480
; 		 }
	xjmp L94
L95:
	.dbline 482
; 	  else
; 	  	 {i=2;}
	.dbline 482
	ldi R20,2
	.dbline 482
	.dbline 483
; 	  }
	xjmp L94
L93:
	.dbline 485
;    else
;    	  {i=1;} 
	.dbline 485
	ldi R20,1
	.dbline 485
L94:
	.dbline 486
; return i; 
	mov R16,R20
	.dbline -2
L92:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r sudu 16 i
	.dbend
	.dbfunc e speed_slow _speed_slow fV
;              i -> R20
;      speed_end -> R22,R23
;    speed_start -> R10,R11
	.even
_speed_slow::
	xcall push_gset3
	movw R22,R18
	movw R10,R16
	.dbline -1
	.dbline 494
; }
; 
; 
; /*
; 缓启动函数
; */
; void speed_slow(unsigned int speed_start,unsigned int speed_end)
; {
	.dbline 496
; unsigned char i;
; for (i=0;speed_start<speed_end;i++)
	clr R20
	xjmp L105
L102:
	.dbline 497
	.dbline 498
	movw R16,R10
	xcall _cal_timer1
	.dbline 499
	movw R24,R10
	adiw R24,5
	movw R10,R24
	.dbline 500
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 501
L103:
	.dbline 496
	inc R20
L105:
	.dbline 496
	cp R10,R22
	cpc R11,R23
	brlo L102
	.dbline 502
;     {
; 	cal_timer1(speed_start);
; 	speed_start=speed_start+5;
; 	delay_ms(slow_time);            //缓启动加速延时
; 	}
; 	speed_start=speed_end;//abcd
	movw R10,R22
	.dbline 503
;     cal_timer1(speed_start);
	movw R16,R10
	xcall _cal_timer1
	.dbline -2
L101:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r speed_end 22 i
	.dbsym r speed_start 10 i
	.dbend
	.dbfunc e cal_timer1 _cal_timer1 fV
;           data -> y+0
;           sudu -> R10,R11
	.even
_cal_timer1::
	xcall push_gset3
	movw R10,R16
	sbiw R28,4
	.dbline -1
	.dbline 507
; }
; 
; void cal_timer1(unsigned int sudu)
; {
	.dbline 509
; unsigned long data;
; micros_nu=sp_mic(sudu);
	movw R16,R10
	xcall _sp_mic
	sts _micros_nu,R16
	.dbline 510
; data=1200000/(sudu*micros_nu);
	mov R18,R16
	clr R19
	movw R16,R10
	xcall empy16s
	movw R2,R16
	clr R4
	clr R5
	ldi R20,128
	ldi R21,79
	ldi R22,18
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall div32s
	movw R30,R28
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 511
; if (sudu==1)
	movw R24,R10
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	breq X2
	xjmp L107
X2:
	.dbline 512
;   {
	.dbline 513
;   data=data/8;
	ldi R24,3
	ldi R25,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsr32
	movw R30,R28
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 514
;   TCCR1B |= (1<<CS11); 
	in R24,0x2e
	ori R24,2
	out 0x2e,R24
	.dbline 515
;   TCCR1B &=~(1<<CS10);
	in R24,0x2e
	andi R24,254
	out 0x2e,R24
	.dbline 516
;   data=data-1;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 517
;   }
	xjmp L108
L107:
	.dbline 519
; else
;   {
	.dbline 520
;   TCCR1B |= (1<<CS10);
	in R24,0x2e
	ori R24,1
	out 0x2e,R24
	.dbline 521
;   TCCR1B &=~(1<<CS11);
	in R24,0x2e
	andi R24,253
	out 0x2e,R24
	.dbline 522
;   data=data-1;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	.dbline 523
;   }
L108:
	.dbline 524
; time_da=data;
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	sts _time_da+1,R3
	sts _time_da,R2
	.dbline -2
L106:
	adiw R28,4
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym l data 0 l
	.dbsym r sudu 10 i
	.dbend
	.dbfunc e out_ctrol _out_ctrol fV
;           temp -> <dead>
	.even
_out_ctrol::
	.dbline -1
	.dbline 528
; }
; 
; void out_ctrol(void)//abcd
; { 
	.dbline 530
; unsigned char temp;
; i_disen();
	xcall _i_disen
	.dbline 531
; state&=0b11110101;
	lds R24,_state
	andi R24,245
	sts _state,R24
	.dbline 532
; state2|=0b00100000;		
	lds R24,_state2
	ori R24,32
	sts _state2,R24
	.dbline -2
L109:
	.dbline 0 ; func end
	ret
	.dbsym l temp 1 c
	.dbend
	.dbfunc e adc_ctrol _adc_ctrol fV
	.even
_adc_ctrol::
	.dbline -1
	.dbline 536
; }  
;   
; void adc_ctrol(void)
; { 
	.dbline 537
; adc_change();
	xcall _adc_change
	.dbline 538
; speed_slow(speed,out_ctr);
	lds R18,_out_ctr
	lds R19,_out_ctr+1
	lds R16,_speed
	lds R17,_speed+1
	xcall _speed_slow
	.dbline 539
; if (out_ctr==speed)
	lds R2,_speed
	lds R3,_speed+1
	lds R4,_out_ctr
	lds R5,_out_ctr+1
	cp R4,R2
	cpc R5,R3
	brne L111
	.dbline 540
; 	{asm("nop");}
	.dbline 540
	nop
	.dbline 540
	xjmp L112
L111:
	.dbline 542
	.dbline 542
	lds R2,_out_ctr
	lds R3,_out_ctr+1
	sts _speed+1,R3
	sts _speed,R2
	.dbline 542
L112:
	.dbline -2
L110:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e key_disposal _key_disposal fV
;           temp -> <dead>
;              j -> <dead>
;              i -> <dead>
	.even
_key_disposal::
	xcall push_gset1
	.dbline -1
	.dbline 547
; else 
;   	{speed=out_ctr;}  
; } 
; 
; /*键盘处理函数*/
; void key_disposal(void)
; {
	.dbline 551
;   unsigned char i;
;   unsigned char j;
;   unsigned int temp;
;   switch (key)
	lds R20,_key
	clr R21
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L117
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L120
	xjmp L114
X3:
	.dbline 552
;     {
L117:
	.dbline 556
; /*******************************启停控制*********************************/	
; 	case runstop_nu:	

⌨️ 快捷键说明

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