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

📄 bjqd.lst

📁 一个正在应用的步进电机控制程序,包括电机的调速,正反,细分,通讯控制
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0188) 	   if (da_counter==64)
    0179 91800077  LDS	R24,da_counter
    017B 3480      CPI	R24,0x40
    017C F541      BNE	0x01A5
(0189) 	   	  {
(0190) 		  PORTC|=(1<<DA_SIN);
    017D 9AAF      SBI	0x15,7
(0191) 	      PORTC&=~(1<<DA_COS);
    017E 98AE      CBI	0x15,6
(0192) 		  }
(0193) 	   }		 
(0194)     }
(0195)   }
    017F C025      RJMP	0x01A5
(0196) else  		  	   		  			 //反转
(0197)   {
(0198)   if (ac_bd_state==0)         //ac相处理
    0180 90200069  LDS	R2,ac_bd_state
    0182 2022      TST	R2
    0183 F489      BNE	0x0195
(0199)     {
(0200) 	if (da_counter==0)
    0184 90200077  LDS	R2,da_counter
    0186 2022      TST	R2
    0187 F431      BNE	0x018E
(0201) 	   {
(0202) 	   PORTC&=~(1<<DA_SIN);
    0188 98AF      CBI	0x15,7
(0203) 	   PORTC|=(1<<DA_COS);
    0189 9AAE      SBI	0x15,6
(0204) 	   ac_bd_state=1;
    018A E081      LDI	R24,1
    018B 93800069  STS	ac_bd_state,R24
(0205) 	   }
    018D C017      RJMP	0x01A5
(0206) 	else 
(0207) 	   {
(0208) 	   if (da_counter==64)
    018E 91800077  LDS	R24,da_counter
    0190 3480      CPI	R24,0x40
    0191 F499      BNE	0x01A5
(0209) 	   	  {
(0210) 		  PORTC&=~(1<<DA_SIN);
    0192 98AF      CBI	0x15,7
(0211) 	      PORTC&=~(1<<DA_COS);
    0193 98AE      CBI	0x15,6
(0212) 		  }
(0213) 	   }	
(0214) 	}
    0194 C010      RJMP	0x01A5
(0215)   else 			   		  			 //bd相处理
(0216)     {
(0217) 	if (da_counter==0)
    0195 90200077  LDS	R2,da_counter
    0197 2022      TST	R2
    0198 F431      BNE	0x019F
(0218) 	   {
(0219) 	   PORTC|=(1<<DA_SIN);
    0199 9AAF      SBI	0x15,7
(0220) 	   PORTC&=~(1<<DA_COS);
    019A 98AE      CBI	0x15,6
(0221) 	   ac_bd_state=0;
    019B 2422      CLR	R2
    019C 92200069  STS	ac_bd_state,R2
(0222) 	   }
    019E C006      RJMP	0x01A5
(0223) 	else 
(0224) 	   {
(0225) 	   if (da_counter==64)
    019F 91800077  LDS	R24,da_counter
    01A1 3480      CPI	R24,0x40
    01A2 F411      BNE	0x01A5
(0226) 	   	  {
(0227) 		  PORTC|=(1<<DA_SIN);
    01A3 9AAF      SBI	0x15,7
(0228) 	      PORTC|=(1<<DA_COS);
    01A4 9AAE      SBI	0x15,6
(0229) 		  }
(0230) 	   }		 
(0231)     }
(0232)   }
(0233) if (micros_nu0==32)	 	  			 		   	//根据细分数对地址指针步进
    01A5 91800075  LDS	R24,micros_nu0
    01A7 3280      CPI	R24,0x20
    01A8 F431      BNE	0x01AF
(0234)    {da_counter++;}
    01A9 91800077  LDS	R24,da_counter
    01AB 5F8F      SUBI	R24,0xFF
    01AC 93800077  STS	da_counter,R24
    01AE C031      RJMP	0x01E0
(0235) else
(0236)    {
(0237)    if (micros_nu0==16)
    01AF 91800075  LDS	R24,micros_nu0
    01B1 3180      CPI	R24,0x10
    01B2 F431      BNE	0x01B9
(0238)       {da_counter=da_counter+2;}
    01B3 91800077  LDS	R24,da_counter
    01B5 5F8E      SUBI	R24,0xFE
    01B6 93800077  STS	da_counter,R24
    01B8 C027      RJMP	0x01E0
(0239)    else 
(0240)    	  {
(0241) 	  if (micros_nu0==8)
    01B9 91800075  LDS	R24,micros_nu0
    01BB 3088      CPI	R24,0x8
    01BC F431      BNE	0x01C3
(0242) 	     {da_counter=da_counter+4;}
    01BD 91800077  LDS	R24,da_counter
    01BF 5F8C      SUBI	R24,0xFC
    01C0 93800077  STS	da_counter,R24
    01C2 C01D      RJMP	0x01E0
(0243) 	  else
(0244) 	     {
(0245) 		 if (micros_nu0==4)
    01C3 91800075  LDS	R24,micros_nu0
    01C5 3084      CPI	R24,4
    01C6 F431      BNE	0x01CD
(0246) 		 	{da_counter=da_counter+8;}
    01C7 91800077  LDS	R24,da_counter
    01C9 5F88      SUBI	R24,0xF8
    01CA 93800077  STS	da_counter,R24
    01CC C013      RJMP	0x01E0
(0247) 	     else
(0248) 		    {
(0249) 			if (micros_nu0==2)
    01CD 91800075  LDS	R24,micros_nu0
    01CF 3082      CPI	R24,2
    01D0 F431      BNE	0x01D7
(0250) 			   {da_counter=da_counter+16;}
    01D1 91800077  LDS	R24,da_counter
    01D3 5F80      SUBI	R24,0xF0
    01D4 93800077  STS	da_counter,R24
    01D6 C009      RJMP	0x01E0
(0251) 			else
(0252) 			   {
(0253) 			   if (micros_nu0==1)
    01D7 91800075  LDS	R24,micros_nu0
    01D9 3081      CPI	R24,1
    01DA F429      BNE	0x01E0
(0254) 			      {da_counter=da_counter+32;}
    01DB 91800077  LDS	R24,da_counter
    01DD 5E80      SUBI	R24,0xE0
    01DE 93800077  STS	da_counter,R24
(0255) 			   }
(0256) 			}
(0257) 		 }
(0258) 	  }
(0259)    }
    01E0 9029      LD	R2,Y+
    01E1 BE2F      OUT	0x3F,R2
    01E2 91F9      LD	R31,Y+
    01E3 91E9      LD	R30,Y+
    01E4 9199      LD	R25,Y+
    01E5 9189      LD	R24,Y+
    01E6 9129      LD	R18,Y+
    01E7 9109      LD	R16,Y+
    01E8 9039      LD	R3,Y+
    01E9 9029      LD	R2,Y+
    01EA 9518      RETI
_time2_int:
    01EB 922A      ST	R2,-Y
    01EC 923A      ST	R3,-Y
    01ED 938A      ST	R24,-Y
    01EE 939A      ST	R25,-Y
    01EF B62F      IN	R2,0x3F
    01F0 922A      ST	R2,-Y
(0260) }
(0261) 
(0262) /******************************************************
(0263) 测量脉冲闸门时间波形中断函数(定时器2比较匹配中断)20-12KHZ  1-600RPM
(0264) ******************************************************/
(0265) void time2_int(void)
(0266) {
(0267) //200MS闸门
(0268) counter++;
    01F1 91800062  LDS	R24,counter
    01F3 5F8F      SUBI	R24,0xFF
    01F4 93800062  STS	counter,R24
(0269) if (counter==6)
    01F6 3086      CPI	R24,6
    01F7 F411      BNE	0x01FA
(0270)   {OCR2=32;}
    01F8 E280      LDI	R24,0x20
    01F9 BD83      OUT	0x23,R24
(0271) if (counter==7)
    01FA 91800062  LDS	R24,counter
    01FC 3087      CPI	R24,7
    01FD F491      BNE	0x0210
(0272)   {
(0273)   speed_pull=pull_number;
    01FE 9020007D  LDS	R2,pull_number
    0200 9030007E  LDS	R3,pull_number+1
    0202 92300061  STS	speed_pull+1,R3
    0204 92200060  STS	speed_pull,R2
(0274)   pull_number=0;
    0206 2422      CLR	R2
    0207 2433      CLR	R3
    0208 9230007E  STS	pull_number+1,R3
    020A 9220007D  STS	pull_number,R2
(0275)   counter=0;
    020C 92200062  STS	counter,R2
(0276)   OCR2=0XFF;
    020E EF8F      LDI	R24,0xFF
    020F BD83      OUT	0x23,R24
(0277)   }
    0210 9029      LD	R2,Y+
    0211 BE2F      OUT	0x3F,R2
    0212 9199      LD	R25,Y+
    0213 9189      LD	R24,Y+
    0214 9039      LD	R3,Y+
    0215 9029      LD	R2,Y+
    0216 9518      RETI
_pull_int:
    0217 922A      ST	R2,-Y
    0218 923A      ST	R3,-Y
    0219 938A      ST	R24,-Y
    021A 939A      ST	R25,-Y
    021B B62F      IN	R2,0x3F
    021C 922A      ST	R2,-Y
(0278) }
(0279) /******************************************************
(0280) 测量脉冲数中断函数(外部INT0中断)
(0281) ******************************************************/
(0282) void pull_int(void)
(0283) {
(0284) pull_number++;
    021D 9180007D  LDS	R24,pull_number
    021F 9190007E  LDS	R25,pull_number+1
    0221 9601      ADIW	R24,1
    0222 9390007E  STS	pull_number+1,R25
    0224 9380007D  STS	pull_number,R24
(0285) if (pull_number>2400)
    0226 E680      LDI	R24,0x60
    0227 E099      LDI	R25,0x9
    0228 9020007D  LDS	R2,pull_number
    022A 9030007E  LDS	R3,pull_number+1
    022C 1582      CP	R24,R2
    022D 0593      CPC	R25,R3
    022E F420      BCC	0x0233
(0286)   {pull_number=2400;}
    022F 9390007E  STS	pull_number+1,R25
    0231 9380007D  STS	pull_number,R24
    0233 9029      LD	R2,Y+
    0234 BE2F      OUT	0x3F,R2
    0235 9199      LD	R25,Y+
    0236 9189      LD	R24,Y+
    0237 9039      LD	R3,Y+
    0238 9029      LD	R2,Y+
    0239 9518      RETI
(0287) }
(0288) /****************************************************************
(0289)                              定时器1初始化函数
(0290) ****************************************************************/
(0291) void timer1_init(void)
(0292) {
(0293)  TCCR1B = (1<<CS10)|(1<<WGM12); 	 		  //time1的控制寄存器B,CTC模式,clk=系统时钟
_timer1_init:
    023A E089      LDI	R24,0x9
    023B BD8E      OUT	0x2E,R24
(0294)  TIMSK &=~(1<<OCIE1A);                        //定时中断屏蔽寄存器
    023C B789      IN	R24,0x39
    023D 7E8F      ANDI	R24,0xEF
    023E BF89      OUT	0x39,R24
    023F 9508      RET
(0295) }
(0296) 
(0297) /****************************************************************
(0298)                              定时器2初始化函数
(0299) ****************************************************************/
(0300) void timer2_init(void)
(0301) {
(0302) TCCR2=(1<<CS20)|(1<<CS21)|(1<<CS22)|(1<<WGM21);
_timer2_init:
    0240 E08F      LDI	R24,0xF
    0241 BD85      OUT	0x25,R24
(0303) OCR2=0XFF;
    0242 EF8F      LDI	R24,0xFF
    0243 BD83      OUT	0x23,R24
    0244 9508      RET
(0304) }
(0305) /****************************************************************
(0306)                              INT0初始化函数
(0307) ****************************************************************/
(0308) void int0_init(void)
(0309) {
(0310) DDRD&=~(1<PULL_IN);
_int0_init:
    0245 9888      CBI	0x11,0
(0311) MCUCR=(1<<ISC01)|(1<<ISC00);
    0246 E083      LDI	R24,3
    0247 BF85      OUT	0x35,R24
    0248 9508      RET
(0312) }
(0313) 
(0314) 
(0315) /****************************************************************
(0316) 端口初始化
(0317) ****************************************************************/
(0318) void port_init(void)
(0319) {
(0320)  //PORTA = 0xff;
(0321)  //DDRA  = 0xdf;
(0322)  //PORTB = 0x00;
(0323)  //DDRB  = 0x00;
(0324)  //PORTC = 0b01111110;             
(0325)  //DDRC  = 0b10000001;
(0326)  //PORTD = 0xff;
(0327)  //DDRD  = 0x00;
(0328) PORTC&=~(1<<INT);
_port_init:
    0249 98A9      CBI	0x15,1
(0329) DDRC |=(1<<INT);
    024A 9AA1      SBI	0x14,1
    024B 9508      RET
(0330) }
(0331) 
(0332) /******************************************************
(0333) 脉冲输入开始函数
(0334) ******************************************************/
(0335) void pull_start(void)
(0336) {
(0337) GICR|=(1<<INT0);
_pull_start:
    024C B78B      IN	R24,0x3B
    024D 6480      ORI	R24,0x40
    024E BF8B      OUT	0x3B,R24
(0338) TIMSK|=(1<<OCIE2);
    024F B789      IN	R24,0x39
    0250 6880      ORI	R24,0x80
    0251 BF89      OUT	0x39,R24
(0339) pull_number=0;
    0252 2422      CLR	R2
    0253 2433      CLR	R3
    0254 9230007E  STS	pull_number+1,R3
    0256 9220007D  STS	pull_number,R2
(0340) counter=0;
    0258 92200062  STS	counter,R2
(0341) OCR2=0XFF;
    025A EF8F      LDI	R24,0xFF
    025B BD83      OUT	0x23,R24
    025C 9508      RET
(0342) }
(0343) /******************************************************
(0344) 脉冲输入开始函数
(0345) ******************************************************/
(0346) void pull_stop(void)
(0347) {
(0348) GICR&=~(1<<INT0);
_pull_stop:
    025D B78B      IN	R24,0x3B
    025E 7B8F      ANDI	R24,0xBF
    025F BF8B      OUT	0x3B,R24
(0349) TIMSK&=~(1<<OCIE2);
    0260 B789      IN	R24,0x39
    0261 778F      ANDI	R24,0x7F
    0262 BF89      OUT	0x39,R24
    0263 9508      RET
(0350) }
(0351) /******************************************************
(0352) D/A初始化函数
(0353) ******************************************************/
(0354) void da_init(void)
(0355) {
(0356) cal_timer1(speed);
_da_init:
    0264 91000081  LDS	R16,speed
    0266 91100082  LDS	R17,speed+1
    0268 D102      RCALL	_cal_timer1
(0357) PORTA|=(1<<DA_WR);
    0269 9AD9      SBI	0x1B,1
(0358) PORTD|=(1<<DA_CS);
    026A 9A96      SBI	0x12,6
(0359) DDRA|=(1<<DA_WR);
    026B 9AD1      SBI	0x1A,1
(0360) DDRD|=(1<<DA_CS)|(1<<DA_AB);
    026C B381      IN	R24,0x11
    026D 6C80      ORI	R24,0xC0
    026E BB81      OUT	0x11,R24
(0361) DDRC|=(1<<DA_SIN)|(1<<DA_COS);
    026F B384      IN	R24,0x14
    0270 6C80      ORI	R24,0xC0
    0271 BB84      OUT	0x14,R24
(0362) DATA_OUT=0x00;
    0272 2422      CLR	R2
    0273 BA28      OUT	0x18,R2
(0363) DATA_IO=0xff;
    0274 EF8F      LDI	R24,0xFF
    0275 BB87      OUT	0x17,R24
(0364) timer1_init();
    0276 DFC3      RCALL	_timer1_init
    0277 9508      RET
(0365) }
(0366) 
(0367) 
(0368) /****************************************************************
(0369) A/D初始化
(0370) ****************************************************************/
(0371) void adc_init(void)
(0372) {
(0373) ADMUX=0b00000000;	  //选择ADC0做AD输入						 
_adc_init:
    0278 2422      CLR	R2
    0279 B827      OUT	0x07,R2
(0374) ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)|(1<<ADATE);  //允许AD转换,128分频
    027A EA87      LDI	R24,0xA7
    027B B986      OUT	0x06,R24
    027C 9508      RET
_adc_change:
  l                    --> R22
  g                    --> R20
  s                    --> Y+0
  j                    --> R12
  k                    --> R10
  i                    --> R14
    027D 940E0A23  CALL	push_gset5
    027F 9764      SBIW	R28,0x14

⌨️ 快捷键说明

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