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

📄 bjqd.lst

📁 一个正在应用的步进电机控制程序,包括电机的调速,正反,细分,通讯控制
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0375) }
(0376) 
(0377) 
(0378) 
(0379) void adc_change(void)
(0380) {
(0381) unsigned char i;
(0382) unsigned char k;
(0383) unsigned int j;
(0384) unsigned int g;
(0385) unsigned char l;
(0386) unsigned int s[10];
(0387) g=0;
    0280 2744      CLR	R20
    0281 2755      CLR	R21
(0388) for (l=0;l<10;l++)
    0282 2766      CLR	R22
    0283 C036      RJMP	0x02BA
(0389) 	{
(0390) 	for (k=0;k<10;k++)
    0284 24AA      CLR	R10
    0285 C012      RJMP	0x0298
(0391) 		{
(0392) 		ADCSRA|=(1<<ADSC);
    0286 9A36      SBI	0x06,6
(0393) 		i=ADCSRA;
    0287 B0E6      IN	R14,0x06
    0288 C001      RJMP	0x028A
(0394) 		while ((i&(1<<ADIF))==0)
(0395)    			  {i=ADCSRA;}
    0289 B0E6      IN	R14,0x06
    028A FEE4      SBRS	R14,4
    028B CFFD      RJMP	0x0289
(0396)    		j=ADC;
    028C B0C4      IN	R12,0x04
    028D B0D5      IN	R13,0x05
(0397)    		s[k]=j; 
    028E E082      LDI	R24,2
    028F 9D8A      MUL	R24,R10
    0290 01F0      MOVW	R30,R0
    0291 01CE      MOVW	R24,R28
    0292 0FE8      ADD	R30,R24
    0293 1FF9      ADC	R31,R25
    0294 82D1      STD	Z+1,R13
    0295 82C0      STD	Z+0,R12
(0398)   		ADCSRA|=(1<<ADIF);
    0296 9A34      SBI	0x06,4
    0297 94A3      INC	R10
    0298 2D8A      MOV	R24,R10
    0299 308A      CPI	R24,0xA
    029A F358      BCS	0x0286
(0399) 		}
(0400) 	ins(s,10);
    029B E02A      LDI	R18,0xA
    029C 018E      MOVW	R16,R28
    029D D04E      RCALL	_ins
(0401) 	j=0;
    029E 24CC      CLR	R12
    029F 24DD      CLR	R13
(0402) 	for (k=0;k<5;k++)
    02A0 24AA      CLR	R10
    02A1 C00C      RJMP	0x02AE
(0403)   		 {
(0404)    		 j=j+s[k+2];
    02A2 E082      LDI	R24,2
    02A3 9D8A      MUL	R24,R10
    02A4 01F0      MOVW	R30,R0
    02A5 01CE      MOVW	R24,R28
    02A6 9604      ADIW	R24,4
    02A7 0FE8      ADD	R30,R24
    02A8 1FF9      ADC	R31,R25
    02A9 8020      LDD	R2,Z+0
    02AA 8031      LDD	R3,Z+1
    02AB 0CC2      ADD	R12,R2
    02AC 1CD3      ADC	R13,R3
    02AD 94A3      INC	R10
    02AE 2D8A      MOV	R24,R10
    02AF 3085      CPI	R24,5
    02B0 F388      BCS	0x02A2
(0405)   		 }
(0406) 	j=j/5;
    02B1 E025      LDI	R18,5
    02B2 E030      LDI	R19,0
    02B3 0186      MOVW	R16,R12
    02B4 940E094C  CALL	div16u
    02B6 0168      MOVW	R12,R16
(0407) 	g=g+j;
    02B7 0F40      ADD	R20,R16
    02B8 1F51      ADC	R21,R17
    02B9 9563      INC	R22
    02BA 306A      CPI	R22,0xA
    02BB F408      BCC	0x02BD
    02BC CFC7      RJMP	0x0284
(0408) 	}
(0409) g=g/10; 
    02BD E02A      LDI	R18,0xA
    02BE E030      LDI	R19,0
    02BF 018A      MOVW	R16,R20
    02C0 940E094C  CALL	div16u
    02C2 01A8      MOVW	R20,R16
(0410) g=g*6/10;
    02C3 E006      LDI	R16,6
    02C4 E010      LDI	R17,0
    02C5 019A      MOVW	R18,R20
    02C6 940E09D7  CALL	empy16s
    02C8 E02A      LDI	R18,0xA
    02C9 E030      LDI	R19,0
    02CA 940E094C  CALL	div16u
    02CC 01A8      MOVW	R20,R16
(0411) if (g<=6)
    02CD E086      LDI	R24,6
    02CE E090      LDI	R25,0
    02CF 1780      CP	R24,R16
    02D0 0791      CPC	R25,R17
    02D1 F018      BCS	0x02D5
(0412)   {g=1;}
    02D2 E041      LDI	R20,1
    02D3 E050      LDI	R21,0
    02D4 C002      RJMP	0x02D7
(0413) else
(0414)   {g=g-6;}
    02D5 5046      SUBI	R20,6
    02D6 4050      SBCI	R21,0
(0415) if (g>=600)
    02D7 3548      CPI	R20,0x58
    02D8 E0E2      LDI	R30,2
    02D9 075E      CPC	R21,R30
    02DA F010      BCS	0x02DD
(0416)    {g=600;}
    02DB E548      LDI	R20,0x58
    02DC E052      LDI	R21,2
(0417) if (g<=1)
    02DD E081      LDI	R24,1
    02DE E090      LDI	R25,0
    02DF 1784      CP	R24,R20
    02E0 0795      CPC	R25,R21
    02E1 F010      BCS	0x02E4
(0418)    {g=1;}
    02E2 E041      LDI	R20,1
    02E3 E050      LDI	R21,0
(0419) out_ctr=g;
    02E4 93500080  STS	out_ctr+1,R21
    02E6 9340007F  STS	out_ctr,R20
    02E8 9664      ADIW	R28,0x14
    02E9 940E0A20  CALL	pop_gset5
    02EB 9508      RET
_ins:
  a                    --> R20
  t                    --> R22
  b                    --> R10
  count                --> R18
  item                 --> R16
    02EC 940E0A27  CALL	push_gset3
(0420) }
(0421) 
(0422) void ins(unsigned int *item,unsigned char count)
(0423) {
(0424) unsigned char a;
(0425) unsigned char b;
(0426) unsigned int t;
(0427) for (a=1;a<count;a++)
    02EE E041      LDI	R20,1
    02EF C02B      RJMP	0x031B
(0428)    {
(0429)    t=item[a];
    02F0 E082      LDI	R24,2
    02F1 9F84      MUL	R24,R20
    02F2 01F0      MOVW	R30,R0
    02F3 0FE0      ADD	R30,R16
    02F4 1FF1      ADC	R31,R17
    02F5 8160      LDD	R22,Z+0
    02F6 8171      LDD	R23,Z+1
(0430)    b=a-1;
    02F7 2F84      MOV	R24,R20
    02F8 5081      SUBI	R24,1
    02F9 2EA8      MOV	R10,R24
    02FA C00B      RJMP	0x0306
(0431)    while(b>=1&&t<item[b])
(0432)       {
(0433) 	  item[b+1]=item[b];
    02FB E082      LDI	R24,2
    02FC 9D8A      MUL	R24,R10
    02FD 0110      MOVW	R2,R0
    02FE 0E20      ADD	R2,R16
    02FF 1E31      ADC	R3,R17
    0300 01F1      MOVW	R30,R2
    0301 8040      LDD	R4,Z+0
    0302 8051      LDD	R5,Z+1
    0303 8253      STD	Z+3,R5
    0304 8242      STD	Z+2,R4
(0434) 	  b--;
    0305 94AA      DEC	R10
    0306 2D8A      MOV	R24,R10
    0307 3081      CPI	R24,1
    0308 F050      BCS	0x0313
    0309 E082      LDI	R24,2
    030A 9D8A      MUL	R24,R10
    030B 01F0      MOVW	R30,R0
    030C 0FE0      ADD	R30,R16
    030D 1FF1      ADC	R31,R17
    030E 8020      LDD	R2,Z+0
    030F 8031      LDD	R3,Z+1
    0310 1562      CP	R22,R2
    0311 0573      CPC	R23,R3
    0312 F340      BCS	0x02FB
(0435) 	  }
(0436)    item[b+1]=t;
    0313 E082      LDI	R24,2
    0314 9D8A      MUL	R24,R10
    0315 01F0      MOVW	R30,R0
    0316 0FE0      ADD	R30,R16
    0317 1FF1      ADC	R31,R17
    0318 8373      STD	Z+3,R23
    0319 8362      STD	Z+2,R22
    031A 9543      INC	R20
    031B 1742      CP	R20,R18
    031C F408      BCC	0x031E
    031D CFD2      RJMP	0x02F0
    031E 940E0A1A  CALL	pop_gset3
    0320 9508      RET
(0437)    }
(0438) }
(0439) 
(0440) /*
(0441) *电流输出允许函数
(0442) */
(0443) void i_en(void)
(0444) {
(0445) TIMSK |= (1<<OCIE1A);
_i_en:
    0321 B789      IN	R24,0x39
    0322 6180      ORI	R24,0x10
    0323 BF89      OUT	0x39,R24
(0446) PORTC|=(1<<INT);
    0324 9AA9      SBI	0x15,1
(0447) DDRC |=(1<<INT);
    0325 9AA1      SBI	0x14,1
    0326 9508      RET
(0448) }
(0449) 
(0450) /*
(0451) *电流输出禁止函数
(0452) */
(0453) void i_disen(void)
(0454) {
(0455) TIMSK &=~(1<<OCIE1A);
_i_disen:
    0327 B789      IN	R24,0x39
    0328 7E8F      ANDI	R24,0xEF
    0329 BF89      OUT	0x39,R24
(0456) delay_ms(100);
    032A E604      LDI	R16,0x64
    032B E010      LDI	R17,0
    032C 940E0563  CALL	_delay_ms
(0457) PORTC&=~(1<<INT);
    032E 98A9      CBI	0x15,1
(0458) DDRC |=(1<<INT);
    032F 9AA1      SBI	0x14,1
    0330 9508      RET
_sp_mic:
  i                    --> R20
  sudu                 --> R16
    0331 940E0A2B  CALL	push_gset1
(0459) }
(0460)   
(0461) /*
(0462) *根据速度判断细分数函数
(0463) */
(0464) unsigned char sp_mic(unsigned int sudu)
(0465) {
(0466) unsigned char i;
(0467)    if (sudu<=410)
    0333 E98A      LDI	R24,0x9A
    0334 E091      LDI	R25,1
    0335 1780      CP	R24,R16
    0336 0791      CPC	R25,R17
    0337 F0A8      BCS	0x034D
(0468)    	  {
(0469) 	  if (sudu<=290)
    0338 E282      LDI	R24,0x22
    0339 1780      CP	R24,R16
    033A 0791      CPC	R25,R17
    033B F078      BCS	0x034B
(0470) 	  	 {
(0471) 		 if(sudu<=210)
    033C ED82      LDI	R24,0xD2
    033D E090      LDI	R25,0
    033E 1780      CP	R24,R16
    033F 0791      CPC	R25,R17
    0340 F040      BCS	0x0349
(0472) 		    {
(0473) 			if (sudu<=140)
    0341 E88C      LDI	R24,0x8C
    0342 1780      CP	R24,R16
    0343 0791      CPC	R25,R17
    0344 F010      BCS	0x0347
(0474) 			   {i=16;}
    0345 E140      LDI	R20,0x10
    0346 C007      RJMP	0x034E
(0475) 			else
(0476) 			   {i=8;}
    0347 E048      LDI	R20,0x8
(0477) 			}
    0348 C005      RJMP	0x034E
(0478) 		 else
(0479) 		    {i=4;}
    0349 E044      LDI	R20,4
(0480) 		 }
    034A C003      RJMP	0x034E
(0481) 	  else
(0482) 	  	 {i=2;}
    034B E042      LDI	R20,2
(0483) 	  }
    034C C001      RJMP	0x034E
(0484)    else
(0485)    	  {i=1;} 
    034D E041      LDI	R20,1
(0486) return i; 
    034E 2F04      MOV	R16,R20
    034F 940E0A2E  CALL	pop_gset1
    0351 9508      RET
_speed_slow:
  i                    --> R20
  speed_end            --> R22
  speed_start          --> R10
    0352 940E0A27  CALL	push_gset3
    0354 01B9      MOVW	R22,R18
    0355 0158      MOVW	R10,R16
(0487) }
(0488) 
(0489) 
(0490) /*
(0491) 缓启动函数
(0492) */
(0493) void speed_slow(unsigned int speed_start,unsigned int speed_end)
(0494) {
(0495) unsigned char i;
(0496) for (i=0;speed_start<speed_end;i++)
    0356 2744      CLR	R20
    0357 C00A      RJMP	0x0362
(0497)     {
(0498) 	cal_timer1(speed_start);
    0358 0185      MOVW	R16,R10
    0359 D011      RCALL	_cal_timer1
(0499) 	speed_start=speed_start+5;
    035A 01C5      MOVW	R24,R10
    035B 9605      ADIW	R24,5
    035C 015C      MOVW	R10,R24
(0500) 	delay_ms(slow_time);            //缓启动加速延时
    035D E00A      LDI	R16,0xA
    035E E010      LDI	R17,0
    035F 940E0563  CALL	_delay_ms
    0361 9543      INC	R20
    0362 16A6      CP	R10,R22
    0363 06B7      CPC	R11,R23
    0364 F398      BCS	0x0358
(0501) 	}
(0502) 	speed_start=speed_end;//abcd
    0365 015B      MOVW	R10,R22
(0503)     cal_timer1(speed_start);
    0366 0185      MOVW	R16,R10
    0367 D003      RCALL	_cal_timer1
    0368 940E0A1A  CALL	pop_gset3
    036A 9508      RET
_cal_timer1:
  data                 --> Y+0
  sudu                 --> R10
    036B 940E0A27  CALL	push_gset3
    036D 0158      MOVW	R10,R16
    036E 9724      SBIW	R28,4
(0504) }
(0505) 
(0506) void cal_timer1(unsigned int sudu)
(0507) {
(0508) unsigned long data;
(0509) micros_nu=sp_mic(sudu);
    036F 0185      MOVW	R16,R10
    0370 DFC0      RCALL	_sp_mic
    0371 93000076  STS	micros_nu,R16
(0510) data=1200000/(sudu*micros_nu);
    0373 2F20      MOV	R18,R16
    0374 2733      CLR	R19
    0375 0185      MOVW	R16,R10
    0376 940E09D7  CALL	empy16s
    0378 0118      MOVW	R2,R16
    0379 2444      CLR	R4
    037A 2455      CLR	R5
    037B E840      LDI	R20,0x80
    037C E45F      LDI	R21,0x4F
    037D E162      LDI	R22,0x12
    037E E070      LDI	R23,0
    037F 925A      ST	R5,-Y
    0380 924A      ST	R4,-Y
    0381 923A      ST	R3,-Y
    0382 922A      ST	R2,-Y
    0383 018A      MOVW	R16,R20
    0384 019B      MOVW	R18,R22
    0385 940E096C  CALL	div32s
    0387 01FE      MOVW	R30,R28
    0388 8300      STD	Z+0,R16
    0389 8311      STD	Z+1,R17
    038A 8322      STD	Z+2,R18
    038B 8333      STD	Z+3,R19
(0511) if (sudu==1)
    038C 01C5      MOVW	R24,R10
    038D 3081      CPI	R24,1
    038E E0E0      LDI	R30,0
    038F 079E      CPC	R25,R30
    0390 F009      BEQ	0x0392
    0391 C02A      RJMP	0x03BC
(0512)   {
(0513)   data=data/8;
    0392 E083      LDI	R24,3
    0393 E090      LDI	R25,0
    0394 01FE      MOVW	R30,R28
    0395 8020      LDD	R2,Z+0
    0396 8031      LDD	R3,Z+1

⌨️ 快捷键说明

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