bskz.c

来自「这是9个步进电机控制程序,每个都编译通过,并在使用中,可以共同商讨.联系:gua」· C语言 代码 · 共 68 行

C
68
字号

/*步进电机变速控制*/
/*2007年7月14日*/

#include<reg51.h>
#define uchar unsigned char
uchar sn=10;     /*步数*/
uchar idata nowrate[2]={0x00,0x00}; /*匀速定时器初值*/
uchar idata *pp;
bit pf=1;        /*中断标志*/

void contrl(direct,mode)
bit direct;  /*方向*/
uchar mode;  /*速度控制*/

{  
  uchar i;
  uchar idata *cmode;
  uchar idata rise[20];  /*加速*/
  uchar idata fall[20];  /*减速*/
  uchar idata plus[7]={0x01,0x03,0x02,0x06,0x04,0x05,0x00}; /*正转*/
  uchar idata minu[7]={0x05,0x04,0x06,0x02,0x03,0x01,0x00}; /*反转*/

  if(direct) cmode=plus;
     else cmode=minu;
  switch(mode)
  {
   case 1:pp=rise;break;  /*pp指向定时器初值*/
   case 2:pp=nowrate;break;
   case 3:pp=fall;break;
   default:pp=nowrate;break;
   }

  do
    {
	 P1=cmode[i];  /*输出转动控制字*/
	 if(cmode[++i]==0x00)i=0;
        while(pf);   /*等待定时时间到*/
		pf=1;
	   if((mode==1)||(mode==3))pp+=2;  /*定时器初值变化*/
	  }
	   while(sn--);
   }


   void intt0(void) interrupt 1    /*T/C0中断服务*/
   {
    TL0=*pp;nowrate[0]=TL0;  /*赋T/C0初值,记录当前定时器初值*/
	TH0=*(pp+1);nowrate[1]=TH0;
	pf=0;
	}

	void main (void)
	{
	TMOD=0X01;
	TH0=0x00;
	TL0=0X00;
	TR0=1;
	ET0=1;
	EA=1;
	contrl(1,1);
	sn=10;
	contrl(1,2);
	sn=10;
	contrl(1,3);
	}

⌨️ 快捷键说明

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