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

📄 main.s

📁 一个正在应用的步进电机控制程序,包括电机的调速,正反,细分,通讯控制
💻 S
📖 第 1 页 / 共 4 页
字号:
; 			  				
; 		    if((state&0b00001000)==0)			  //判断启停状态
	lds R2,_state
	sbrc R2,3
	rjmp L118
	.dbline 557
; 	     	   {
	.dbline 558
; 		       state|=0b00001000;
	mov R24,R2
	ori R24,8
	sts _state,R24
	.dbline 559
; 		       i_en();
	xcall _i_en
	.dbline 560
; 		       speed_slow(1,speed);
	lds R18,_speed
	lds R19,_speed+1
	ldi R16,1
	ldi R17,0
	xcall _speed_slow
	.dbline 561
; 		       }
	xjmp L119
L118:
	.dbline 563
; 	        else
; 	           {
	.dbline 564
; 		       i_disen();
	xcall _i_disen
	.dbline 565
; 		       state&=0b11110111;
	lds R24,_state
	andi R24,247
	sts _state,R24
	.dbline 566
; 			   }
L119:
	.dbline 567
; 	  key=empty;
	clr R2
	sts _key,R2
	.dbline 568
; 	  break;
	xjmp L115
L120:
	.dbline 572
; /******************************正反转控制**********************************/	  
; 	case cwccw_nu:	
; 
; 	           if ((state|0b11111110)==0b11111110)	    //判断正反状态					  
	lds R24,_state
	ori R24,254
	cpi R24,254
	brne L121
	.dbline 573
; 	              {
	.dbline 574
; 		          state|=0b00000001;	
	lds R24,_state
	ori R24,1
	sts _state,R24
	.dbline 575
; 	              } 		
	xjmp L122
L121:
	.dbline 577
; 	           else 
; 	              {
	.dbline 578
; 		          state&=0b11111110;
	lds R24,_state
	andi R24,254
	sts _state,R24
	.dbline 579
; 		          }			 
L122:
	.dbline 580
; 		       speed_slow(1,speed);
	lds R18,_speed
	lds R19,_speed+1
	ldi R16,1
	ldi R17,0
	xcall _speed_slow
	.dbline 581
; 	  key=empty;
	clr R2
	sts _key,R2
	.dbline 582
; 	  break;
L114:
L115:
	.dbline -2
L113:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l temp 1 i
	.dbsym l j 1 c
	.dbsym l i 1 c
	.dbend
	.dbfunc e state_init _state_init fV
	.even
_state_init::
	.dbline -1
	.dbline 588
;     }
; }
; 
; //状态初始化函数
; void state_init(void)  
; { 
	.dbline 589
; 	  if ((state&0b00001000)!=0)			  //如果电机没有运行可执行确认操作
	lds R2,_state
	sbrs R2,3
	rjmp L124
	.dbline 590
;          {
	.dbline 591
; 	     state&=0b11110111;
	mov R24,R2
	andi R24,247
	sts _state,R24
	.dbline 592
; 	     key=runstop_nu;
	ldi R24,1
	sts _key,R24
	.dbline 593
; 	     }
L124:
	.dbline 594
;     key_disposal();
	xcall _key_disposal
	.dbline -2
L123:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e all_stop _all_stop fV
	.even
_all_stop::
	.dbline -1
	.dbline 598
; }
; //停止所有运行 
; void all_stop(void)   
; { 
	.dbline 599
; 			   i_disen();
	xcall _i_disen
	.dbline 600
; 	           state&=~(1<<RUN_STOP); 
	lds R24,_state
	andi R24,247
	sts _state,R24
	.dbline -2
L126:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e defult_fac _defult_fac fV
;           temp -> R20,R21
	.even
_defult_fac::
	xcall push_gset1
	.dbline -1
	.dbline 605
; }
; 
; //所有参数的出厂缺省值
; void defult_fac(void)
; {
	.dbline 607
; unsigned int temp;
; if ((EEPROMread(DEFAULT_ROMADDR))!=0)
	ldi R16,1
	ldi R17,0
	xcall _EEPROMread
	tst R16
	brne X8
	xjmp L128
X8:
	.dbline 608
;   {
L130:
	.dbline 609
;   do {temp=EEPROMwrite(DEFAULT_ROMADDR,0);}
	.dbline 609
	clr R18
	ldi R16,1
	ldi R17,0
	xcall _EEPROMwrite
	movw R20,R16
	.dbline 609
L131:
	.dbline 610
;   while(temp>0);	
	cpi R20,0
	cpc R20,R21
	brne L130
X4:
	.dbline 611
;   speed=50;
	ldi R24,50
	ldi R25,0
	sts _speed+1,R25
	sts _speed,R24
	.dbline 612
;   EEPROMWriteWord(speed_romaddr,&speed);	
	ldi R18,<_speed
	ldi R19,>_speed
	ldi R16,3
	ldi R17,0
	xcall _EEPROMWriteWord
	.dbline 613
;   state=0;
	clr R2
	sts _state,R2
L133:
	.dbline 614
;   do {temp=EEPROMwrite(state_romaddr,state);}
	.dbline 614
	lds R18,_state
	ldi R16,5
	ldi R17,0
	xcall _EEPROMwrite
	movw R20,R16
	.dbline 614
L134:
	.dbline 615
;   while(temp>0);	
	cpi R20,0
	cpc R20,R21
	brne L133
X5:
	.dbline 616
;   pump_tab=1;
	ldi R24,1
	sts _pump_tab,R24
L136:
	.dbline 617
;   do {temp=EEPROMwrite(pump_tab_romaddr,pump_tab);}
	.dbline 617
	lds R18,_pump_tab
	ldi R16,6
	ldi R17,0
	xcall _EEPROMwrite
	movw R20,R16
	.dbline 617
L137:
	.dbline 618
;   while(temp>0);	
	cpi R20,0
	cpc R20,R21
	brne L136
X6:
	.dbline 619
;   state_other=0;
	clr R2
	sts _state_other,R2
L139:
	.dbline 620
;   do {temp=EEPROMwrite(state_other_romaddr,state_other);}
	.dbline 620
	lds R18,_state_other
	ldi R16,7
	ldi R17,0
	xcall _EEPROMwrite
	movw R20,R16
	.dbline 620
L140:
	.dbline 621
	cpi R20,0
	cpc R20,R21
	brne L139
X7:
	.dbline 622
L128:
	.dbline -2
L127:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 i
	.dbend
	.dbfunc e main _main fV
;              i -> <dead>
	.even
_main::
	.dbline -1
	.dbline 632
;   while(temp>0);	
;   }
; //do {temp=EEPROMwrite(DEFAULT_ROMADDR,1);}
; //while(temp>0);				
; } 
; 
; 
; /****************************************************************
;                               主函数
; ****************************************************************/
; void main(void)
; { 
	.dbline 634
;   unsigned char i;
;   CLI(); 
	cli
	.dbline 635
;   defult_fac();
	xcall _defult_fac
	.dbline 636
;   EEPROMReadWord(speed_romaddr,&speed);	
	ldi R18,<_speed
	ldi R19,>_speed
	ldi R16,3
	ldi R17,0
	xcall _EEPROMReadWord
	.dbline 637
;   pump_tab=EEPROMread(pump_tab_romaddr);
	ldi R16,6
	ldi R17,0
	xcall _EEPROMread
	sts _pump_tab,R16
	.dbline 638
;   if ((pump_tab>=31)||(pump_tab==0))
	cpi R16,31
	brsh L145
	tst R16
	brne L143
L145:
	.dbline 639
;     {pump_tab=1;}
	.dbline 639
	ldi R24,1
	sts _pump_tab,R24
	.dbline 639
L143:
	.dbline 640
;   if ((speed>600)||(speed==0))
	ldi R24,600
	ldi R25,2
	lds R2,_speed
	lds R3,_speed+1
	cp R24,R2
	cpc R25,R3
	brlo L148
	tst R2
	brne L146
	tst R3
	brne L146
X9:
L148:
	.dbline 641
;     {speed=1;}
	.dbline 641
	ldi R24,1
	ldi R25,0
	sts _speed+1,R25
	sts _speed,R24
	.dbline 641
L146:
	.dbline 642
;   state=0;
	clr R2
	sts _state,R2
	.dbline 643
;   state0=0;
	sts _state0,R2
	.dbline 644
;   state1=0;
	sts _state1,R2
	.dbline 645
;   state2=0;
	sts _state2,R2
	.dbline 646
;   wrong=0;
	sts _wrong,R2
	.dbline 647
;   micros_nu0=16;
	ldi R24,16
	sts _micros_nu0,R24
	.dbline 648
;   in_out_number=in_int;
	sts _in_out_number,R2
	.dbline 649
;   in_out_state=in_int;
	sts _in_out_state,R2
	.dbline 650
;   port_init(); 		   		//端口初始化
	xcall _port_init
	.dbline 651
;   da_init(); 
	xcall _da_init
	.dbline 652
;   out_init();		        //外控初始化
	xcall _out_init
	.dbline 653
;   serial_init();
	xcall _serial_init
	.dbline 654
;   adc_init();
	xcall _adc_init
	.dbline 655
;   int0_init();
	xcall _int0_init
	.dbline 656
;   cal_timer1(speed);
	lds R16,_speed
	lds R17,_speed+1
	xcall _cal_timer1
	.dbline 657
;   GIFR=0;
	clr R2
	out 0x3a,R2
	.dbline 658
;   TIFR=0;
	out 0x38,R2
	.dbline 659
;   SEI(); 
	sei
	.dbline 660
;   delay_ms(50);
	ldi R16,50
	ldi R17,0
	xcall _delay_ms
	.dbline 661
;   i_disen();
	xcall _i_disen
	.dbline 662
;   job_att(0);
	clr R16
	xcall _job_att
	.dbline 664
;   //临时
;   state2|=0b00000010;//进入计算机控制状态
	lds R24,_state2
	ori R24,2
	sts _state2,R24
	xjmp L150
L149:
	.dbline 666
;   while(1)					//按键循环处理
;      {
	.dbline 667
;         job_att(1);					  //485
	ldi R16,1
	xcall _job_att
	.dbline 668
; 		in_out_number=out_pull; 
	ldi R24,2
	sts _in_out_number,R24
	.dbline 669
; 	        switch (in_out_number)  
	mov R20,R24
	clr R21
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L158
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	breq L155
	xjmp L153
X10:
	.dbline 670
; 			   {          
L155:
	.dbline 672
; 			   case out_v :				   	  //外控电压
; 			      if (in_out_state!=out_v)
	lds R24,_in_out_state
	cpi R24,3
	breq L156
	.dbline 673
; 				     {
	.dbline 674
; 					 in_out_state=out_v;
	ldi R24,3
	sts _in_out_state,R24
	.dbline 675
; 					 out_ctrol();
	xcall _out_ctrol
	.dbline 676
; 					 pull_stop();
	xcall _pull_stop
	.dbline 677
; 					 }
L156:
	.dbline 678
; 				  adc_ctrol();
	xcall _adc_ctrol
	.dbline 679
; 				  break;  
	xjmp L153
L158:
	.dbline 681
; 			   case out_pull:
; 			      if (in_out_state!=out_pull)
	lds R24,_in_out_state
	cpi R24,2
	breq L159
	.dbline 682
; 				    {
	.dbline 683
; 					in_out_state=out_pull;
	ldi R24,2
	sts _in_out_state,R24
	.dbline 684
; 					timer2_init();
	xcall _timer2_init
	.dbline 685
; 					pull_start();
	xcall _pull_start
	.dbline 686
; 					}
L159:
	.dbline 687
; 				  if (speed_pull>2400)
	ldi R24,2400
	ldi R25,9
	lds R2,_speed_pull
	lds R3,_speed_pull+1
	cp R24,R2
	cpc R25,R3
	brsh L161
	.dbline 688
; 				    {speed_pull=2400;}
	.dbline 688
	sts _speed_pull+1,R25
	sts _speed_pull,R24
	.dbline 688
L161:
	.dbline 689
; 				  if(speed_pull<=4)
	ldi R24,4
	ldi R25,0
	lds R2,_speed_pull
	lds R3,_speed_pull+1
	cp R24,R2
	cpc R25,R3
	brlo L163
	.dbline 690
; 				    {speed_pull=4;}
	.dbline 690
	sts _speed_pull+1,R25
	sts _speed_pull,R24
	.dbline 690
L163:
	.dbline 692
; 				  //cal_timer1();
; 				  speed_slow(speed,speed_pull/4);
	lds R18,_speed_pull
	lds R19,_speed_pull+1
	lsr R19
	ror R18
	lsr R19
	ror R18
	lds R16,_speed
	lds R17,_speed+1
	xcall _speed_slow
	.dbline 693
; 				  speed=speed_pull/4;
	lds R2,_speed_pull
	lds R3,_speed_pull+1
	lsr R3
	ror R2
	lsr R3
	ror R2
	sts _speed+1,R3
	sts _speed,R2
	.dbline 695
; 			   default :
; 	  		   	  break;
L153:
	.dbline 697
	xcall _out_key
	.dbline 698
	xcall _key_disposal
	.dbline 699
L150:
	.dbline 665
	xjmp L149
X11:
	.dbline -2
L142:
	.dbline 0 ; func end
	ret
	.dbsym l i 1 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\BJQD\main.c
_speed_pull::
	.blkb 2
	.dbsym e speed_pull _speed_pull i
_counter::
	.blkb 1
	.dbsym e counter _counter c
_wrong::
	.blkb 1
	.dbsym e wrong _wrong c
_in_out_number::
	.blkb 1
	.dbsym e in_out_number _in_out_number c
_in_out_state::
	.blkb 1
	.dbsym e in_out_state _in_out_state c
_state0::
	.blkb 1
	.dbsym e state0 _state0 c
_state_other::
	.blkb 1
	.dbsym e state_other _state_other c
_state::
	.blkb 1
	.dbsym e state _state c
_ac_bd_state::
	.blkb 1
	.dbsym e ac_bd_state _ac_bd_state c
_add_dec_nu::
	.blkb 1
	.dbsym e add_dec_nu _add_dec_nu c
_disp_time_counter1::
	.blkb 4
	.dbsym e disp_time_counter1 _disp_time_counter1 l
_disp_time_counter0::
	.blkb 4
	.dbsym e disp_time_counter0 _disp_time_counter0 l
_key_counter::
	.blkb 1
	.dbsym e key_counter _key_counter c
_key_state::
	.blkb 1
	.dbsym e key_state _key_state c
_micros_nu0::
	.blkb 1
	.dbsym e micros_nu0 _micros_nu0 c
_micros_nu::
	.blkb 1
	.dbsym e micros_nu _micros_nu c
_da_counter::
	.blkb 1
	.dbsym e da_counter _da_counter c
_key::
	.blkb 1
	.dbsym e key _key c
_time_da0::
	.blkb 2
	.dbsym e time_da0 _time_da0 i
_time_da::
	.blkb 2
	.dbsym e time_da _time_da i
_pull_number::
	.blkb 2
	.dbsym e pull_number _pull_number i
_out_ctr::
	.blkb 2
	.dbsym e out_ctr _out_ctr i
_speed::
	.blkb 2
	.dbsym e speed _speed i

⌨️ 快捷键说明

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