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

📄 bjqd.lst

📁 一个正在应用的步进电机控制程序,包括电机的调速,正反,细分,通讯控制
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0397 8042      LDD	R4,Z+2
    0398 8053      LDD	R5,Z+3
    0399 938A      ST	R24,-Y
    039A 0181      MOVW	R16,R2
    039B 0192      MOVW	R18,R4
    039C 940E0A67  CALL	lsr32
    039E 01FE      MOVW	R30,R28
    039F 8300      STD	Z+0,R16
    03A0 8311      STD	Z+1,R17
    03A1 8322      STD	Z+2,R18
    03A2 8333      STD	Z+3,R19
(0514)   TCCR1B |= (1<<CS11); 
    03A3 B58E      IN	R24,0x2E
    03A4 6082      ORI	R24,2
    03A5 BD8E      OUT	0x2E,R24
(0515)   TCCR1B &=~(1<<CS10);
    03A6 B58E      IN	R24,0x2E
    03A7 7F8E      ANDI	R24,0xFE
    03A8 BD8E      OUT	0x2E,R24
(0516)   data=data-1;
    03A9 E041      LDI	R20,1
    03AA E050      LDI	R21,0
    03AB E060      LDI	R22,0
    03AC E070      LDI	R23,0
    03AD 01FE      MOVW	R30,R28
    03AE 8020      LDD	R2,Z+0
    03AF 8031      LDD	R3,Z+1
    03B0 8042      LDD	R4,Z+2
    03B1 8053      LDD	R5,Z+3
    03B2 1A24      SUB	R2,R20
    03B3 0A35      SBC	R3,R21
    03B4 0A46      SBC	R4,R22
    03B5 0A57      SBC	R5,R23
    03B6 01FE      MOVW	R30,R28
    03B7 8220      STD	Z+0,R2
    03B8 8231      STD	Z+1,R3
    03B9 8242      STD	Z+2,R4
    03BA 8253      STD	Z+3,R5
(0517)   }
    03BB C018      RJMP	0x03D4
(0518) else
(0519)   {
(0520)   TCCR1B |= (1<<CS10);
    03BC B58E      IN	R24,0x2E
    03BD 6081      ORI	R24,1
    03BE BD8E      OUT	0x2E,R24
(0521)   TCCR1B &=~(1<<CS11);
    03BF B58E      IN	R24,0x2E
    03C0 7F8D      ANDI	R24,0xFD
    03C1 BD8E      OUT	0x2E,R24
(0522)   data=data-1;
    03C2 E041      LDI	R20,1
    03C3 E050      LDI	R21,0
    03C4 E060      LDI	R22,0
    03C5 E070      LDI	R23,0
    03C6 01FE      MOVW	R30,R28
    03C7 8020      LDD	R2,Z+0
    03C8 8031      LDD	R3,Z+1
    03C9 8042      LDD	R4,Z+2
    03CA 8053      LDD	R5,Z+3
    03CB 1A24      SUB	R2,R20
    03CC 0A35      SBC	R3,R21
    03CD 0A46      SBC	R4,R22
    03CE 0A57      SBC	R5,R23
    03CF 01FE      MOVW	R30,R28
    03D0 8220      STD	Z+0,R2
    03D1 8231      STD	Z+1,R3
    03D2 8242      STD	Z+2,R4
    03D3 8253      STD	Z+3,R5
(0523)   }
(0524) time_da=data;
    03D4 01FE      MOVW	R30,R28
    03D5 8020      LDD	R2,Z+0
    03D6 8031      LDD	R3,Z+1
    03D7 9230007C  STS	time_da+1,R3
    03D9 9220007B  STS	time_da,R2
    03DB 9624      ADIW	R28,4
    03DC 940E0A1A  CALL	pop_gset3
    03DE 9508      RET
(0525) }
(0526) 
(0527) void out_ctrol(void)//abcd
(0528) { 
(0529) unsigned char temp;
(0530) i_disen();
_out_ctrol:
  temp                 --> Y+1
    03DF DF47      RCALL	_i_disen
(0531) state&=0b11110101;
    03E0 91800068  LDS	R24,state
    03E2 7F85      ANDI	R24,0xF5
    03E3 93800068  STS	state,R24
(0532) state2|=0b00100000;		
    03E5 918000F5  LDS	R24,state2
    03E7 6280      ORI	R24,0x20
    03E8 938000F5  STS	state2,R24
    03EA 9508      RET
(0533) }  
(0534)   
(0535) void adc_ctrol(void)
(0536) { 
(0537) adc_change();
_adc_ctrol:
    03EB DE91      RCALL	_adc_change
(0538) speed_slow(speed,out_ctr);
    03EC 9120007F  LDS	R18,out_ctr
    03EE 91300080  LDS	R19,out_ctr+1
    03F0 91000081  LDS	R16,speed
    03F2 91100082  LDS	R17,speed+1
    03F4 DF5D      RCALL	_speed_slow
(0539) if (out_ctr==speed)
    03F5 90200081  LDS	R2,speed
    03F7 90300082  LDS	R3,speed+1
    03F9 9040007F  LDS	R4,out_ctr
    03FB 90500080  LDS	R5,out_ctr+1
    03FD 1442      CP	R4,R2
    03FE 0453      CPC	R5,R3
    03FF F411      BNE	0x0402
(0540) 	{asm("nop");}
    0400 0000      NOP
    0401 C008      RJMP	0x040A
(0541) else 
(0542)   	{speed=out_ctr;}  
    0402 9020007F  LDS	R2,out_ctr
    0404 90300080  LDS	R3,out_ctr+1
    0406 92300082  STS	speed+1,R3
    0408 92200081  STS	speed,R2
    040A 9508      RET
_key_disposal:
  temp                 --> Y+1
  j                    --> Y+1
  i                    --> Y+1
    040B 940E0A2B  CALL	push_gset1
(0543) } 
(0544) 
(0545) /*键盘处理函数*/
(0546) void key_disposal(void)
(0547) {
(0548)   unsigned char i;
(0549)   unsigned char j;
(0550)   unsigned int temp;
(0551)   switch (key)
    040D 91400078  LDS	R20,key
    040F 2755      CLR	R21
    0410 3041      CPI	R20,1
    0411 E0E0      LDI	R30,0
    0412 075E      CPC	R21,R30
    0413 F029      BEQ	0x0419
    0414 3042      CPI	R20,2
    0415 E0E0      LDI	R30,0
    0416 075E      CPC	R21,R30
    0417 F0E1      BEQ	0x0434
    0418 C035      RJMP	0x044E
(0552)     {
(0553) /*******************************启停控制*********************************/	
(0554) 	case runstop_nu:	
(0555) 			  				
(0556) 		    if((state&0b00001000)==0)			  //判断启停状态
    0419 90200068  LDS	R2,state
    041B FC23      SBRC	R2,3
    041C C00D      RJMP	0x042A
(0557) 	     	   {
(0558) 		       state|=0b00001000;
    041D 2D82      MOV	R24,R2
    041E 6088      ORI	R24,0x8
    041F 93800068  STS	state,R24
(0559) 		       i_en();
    0421 DEFF      RCALL	_i_en
(0560) 		       speed_slow(1,speed);
    0422 91200081  LDS	R18,speed
    0424 91300082  LDS	R19,speed+1
    0426 E001      LDI	R16,1
    0427 E010      LDI	R17,0
    0428 DF29      RCALL	_speed_slow
(0561) 		       }
    0429 C006      RJMP	0x0430
(0562) 	        else
(0563) 	           {
(0564) 		       i_disen();
    042A DEFC      RCALL	_i_disen
(0565) 		       state&=0b11110111;
    042B 91800068  LDS	R24,state
    042D 7F87      ANDI	R24,0xF7
    042E 93800068  STS	state,R24
(0566) 			   }
(0567) 	  key=empty;
    0430 2422      CLR	R2
    0431 92200078  STS	key,R2
(0568) 	  break;
    0433 C01A      RJMP	0x044E
(0569) /******************************正反转控制**********************************/	  
(0570) 	case cwccw_nu:	
(0571) 
(0572) 	           if ((state|0b11111110)==0b11111110)	    //判断正反状态					  
    0434 91800068  LDS	R24,state
    0436 6F8E      ORI	R24,0xFE
    0437 3F8E      CPI	R24,0xFE
    0438 F431      BNE	0x043F
(0573) 	              {
(0574) 		          state|=0b00000001;	
    0439 91800068  LDS	R24,state
    043B 6081      ORI	R24,1
    043C 93800068  STS	state,R24
(0575) 	              } 		
    043E C005      RJMP	0x0444
(0576) 	           else 
(0577) 	              {
(0578) 		          state&=0b11111110;
    043F 91800068  LDS	R24,state
    0441 7F8E      ANDI	R24,0xFE
    0442 93800068  STS	state,R24
(0579) 		          }			 
(0580) 		       speed_slow(1,speed);
    0444 91200081  LDS	R18,speed
    0446 91300082  LDS	R19,speed+1
    0448 E001      LDI	R16,1
    0449 E010      LDI	R17,0
    044A DF07      RCALL	_speed_slow
(0581) 	  key=empty;
    044B 2422      CLR	R2
    044C 92200078  STS	key,R2
(0582) 	  break;
    044E 940E0A2E  CALL	pop_gset1
    0450 9508      RET
(0583)     }
(0584) }
(0585) 
(0586) //状态初始化函数
(0587) void state_init(void)  
(0588) { 
(0589) 	  if ((state&0b00001000)!=0)			  //如果电机没有运行可执行确认操作
_state_init:
    0451 90200068  LDS	R2,state
    0453 FE23      SBRS	R2,3
    0454 C007      RJMP	0x045C
(0590)          {
(0591) 	     state&=0b11110111;
    0455 2D82      MOV	R24,R2
    0456 7F87      ANDI	R24,0xF7
    0457 93800068  STS	state,R24
(0592) 	     key=runstop_nu;
    0459 E081      LDI	R24,1
    045A 93800078  STS	key,R24
(0593) 	     }
(0594)     key_disposal();
    045C DFAE      RCALL	_key_disposal
    045D 9508      RET
(0595) }
(0596) //停止所有运行 
(0597) void all_stop(void)   
(0598) { 
(0599) 			   i_disen();
_all_stop:
    045E DEC8      RCALL	_i_disen
(0600) 	           state&=~(1<<RUN_STOP); 
    045F 91800068  LDS	R24,state
    0461 7F87      ANDI	R24,0xF7
    0462 93800068  STS	state,R24
    0464 9508      RET
_defult_fac:
  temp                 --> R20
    0465 940E0A2B  CALL	push_gset1
(0601) }
(0602) 
(0603) //所有参数的出厂缺省值
(0604) void defult_fac(void)
(0605) {
(0606) unsigned int temp;
(0607) if ((EEPROMread(DEFAULT_ROMADDR))!=0)
    0467 E001      LDI	R16,1
    0468 E010      LDI	R17,0
    0469 940E0A73  CALL	_EEPROMread
    046B 2300      TST	R16
    046C F409      BNE	0x046E
    046D C03C      RJMP	0x04AA
(0608)   {
(0609)   do {temp=EEPROMwrite(DEFAULT_ROMADDR,0);}
    046E 2722      CLR	R18
    046F E001      LDI	R16,1
    0470 E010      LDI	R17,0
    0471 940E0A78  CALL	_EEPROMwrite
    0473 01A8      MOVW	R20,R16
(0610)   while(temp>0);	
    0474 3040      CPI	R20,0
    0475 0745      CPC	R20,R21
    0476 F7B9      BNE	0x046E
(0611)   speed=50;
    0477 E382      LDI	R24,0x32
    0478 E090      LDI	R25,0
    0479 93900082  STS	speed+1,R25
    047B 93800081  STS	speed,R24
(0612)   EEPROMWriteWord(speed_romaddr,&speed);	
    047D E821      LDI	R18,0x81
    047E E030      LDI	R19,0
    047F E003      LDI	R16,3
    0480 E010      LDI	R17,0
    0481 940E00E7  CALL	_EEPROMWriteWord
(0613)   state=0;
    0483 2422      CLR	R2
    0484 92200068  STS	state,R2
(0614)   do {temp=EEPROMwrite(state_romaddr,state);}
    0486 91200068  LDS	R18,state
    0488 E005      LDI	R16,5
    0489 E010      LDI	R17,0
    048A 940E0A78  CALL	_EEPROMwrite
    048C 01A8      MOVW	R20,R16
(0615)   while(temp>0);	
    048D 3040      CPI	R20,0
    048E 0745      CPC	R20,R21
    048F F7B1      BNE	0x0486
(0616)   pump_tab=1;
    0490 E081      LDI	R24,1
    0491 938000F3  STS	pump_tab,R24
(0617)   do {temp=EEPROMwrite(pump_tab_romaddr,pump_tab);}
    0493 912000F3  LDS	R18,pump_tab
    0495 E006      LDI	R16,6
    0496 E010      LDI	R17,0
    0497 940E0A78  CALL	_EEPROMwrite
    0499 01A8      MOVW	R20,R16
(0618)   while(temp>0);	
    049A 3040      CPI	R20,0
    049B 0745      CPC	R20,R21
    049C F7B1      BNE	0x0493
(0619)   state_other=0;
    049D 2422      CLR	R2
    049E 92200067  STS	state_other,R2
(0620)   do {temp=EEPROMwrite(state_other_romaddr,state_other);}
    04A0 91200067  LDS	R18,state_other
    04A2 E007      LDI	R16,7
    04A3 E010      LDI	R17,0
    04A4 940E0A78  CALL	_EEPROMwrite
    04A6 01A8      MOVW	R20,R16
(0621)   while(temp>0);	
    04A7 3040      CPI	R20,0
    04A8 0745      CPC	R20,R21
    04A9 F7B1      BNE	0x04A0
(0622)   }
    04AA 940E0A2E  CALL	pop_gset1
    04AC 9508      RET
(0623) //do {temp=EEPROMwrite(DEFAULT_ROMADDR,1);}
(0624) //while(temp>0);				
(0625) } 
(0626) 
(0627) 
(0628) /****************************************************************
(0629)                               主函数
(0630) ****************************************************************/
(0631) void main(void)
(0632) { 
(0633)   unsigned char i;
(0634)   CLI(); 
_main:
  i                    --> Y+1
    04AD 94F8      BCLR	7
(0635)   defult_fac();
    04AE DFB6      RCALL	_defult_fac
(0636)   EEPROMReadWord(speed_romaddr,&speed);	
    04AF E821      LDI	R18,0x81
    04B0 E030      LDI	R19,0
    04B1 E003      LDI	R16,3
    04B2 E010      LDI	R17,0
    04B3 940E00CB  CALL	_EEPROMReadWord
(0637)   pump_tab=EEPROMread(pump_tab_romaddr);
    04B5 E006      LDI	R16,6
    04B6 E010      LDI	R17,0
    04B7 940E0A73  CALL	_EEPROMread
    04B9 930000F3  STS	pump_tab,R16
(0638)   if ((pump_tab>=31)||(pump_tab==0))
    04BB 310F      CPI	R16,0x1F
    04BC F410      BCC	0x04BF
    04BD 2300      TST	R16
    04BE F419      BNE	0x04C2
(0639)     {pump_tab=1;}
    04BF E081      LDI	R24,1
    04C0 938000F3  STS	pump_tab,R24
(0640)   if ((speed>600)||(speed==0))
    04C2 E588      LDI	R24,0x58
    04C3 E092      LDI	R25,2
    04C4 90200081  LDS	R2,speed
    04C6 90300082  LDS	R3,speed+1
    04C8 1582      CP	R24,R2
    04C9 0593      CPC	R25,R3
    04CA F020      BCS	0x04CF
    04CB 2022      TST	R2
    04CC F441      BNE	0x04D5
    04CD 2033      TST	R3
    04CE F431      BNE	0x04D5
(0641)     {speed=1;}
    04CF E081      LDI	R24,1
    04D0 E090      LDI	R25,0
    04D1 93900082  STS	speed+1,R25
    04D3 93800081  STS	speed,R24
(0642)   state=0;
    04D5 2422      CLR	R2
    04D6 92200068  STS	state,R2
(0643)   state0=0;
    04D8 92200066  STS	state0,R2
(0644)   state1=0;
    04DA 922000F4  STS	state1,R2
(0645)   state2=0;
    04DC 922000F5  STS	state2,R2
(0646)   wrong=0;
    04DE 92200063  STS	wrong,R2
(0647)   micros_nu0=16;
    04E0 E180      LDI	R24,0x10
    04E1 93800075  STS	micros_nu0,R24
(0648)   in_out_number=in_int;
    04E3 92200064  STS	in_out_number,R2
(0649)   in_out_state=in_int;
    04E5 92200065  STS	in_out_state,R2
(0650)   port_init(); 		   		//端口初始化
    04E7 DD61      RCALL	_port_init
(0651)   da_init(); 
    04E8 DD7B      RCALL	_da_init
(0652)   out_init();		        //外控初始化
    04E9 940E0916  CALL	_out_init
(0653)   serial_init();

⌨️ 快捷键说明

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