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

📄 zhjbjdj.c

📁 步进电机单片机驱动程序
💻 C
字号:
/*旋转适粘度计步进电机驱动程序晶振24MHZ*/

#include <at89x51.h>
#include <absacc.h>
#include <intrins.h>

#define DA1 XBYTE[0x8000]//定义硬件地址
#define DA2 XBYTE[0x8100]
#define LEVEL1 XBYTE[0x8200]
#define LEVEL2 XBYTE[0x8300]
#define CHIP_ADDR 0x04
#define START_STEPTIMES 10

unsigned char Command=0,Command_Temp,Step_Num=0,Start_f=0,Start_Stepnum=2,Start_Steptimes=START_STEPTIMES;
unsigned char Iasuffix=0,Ibsuffix=0,TimeH=0,TimeL=0;

unsigned char code IAB[256]={0,3,6,9,12,16,19,22,25,28,31,34,37,40,43,46
,49,51,54,57,60,63,65,68,71,73,76,78,81,83,85,88,90,92,94,96,98,100,102
,104,106,107,109,111,112,113,115,116,117,118,120,121,122,122,123,124,125
,125,126,126,126,127,127,127,127,127,127,127,126,126,126,125,125,124,123
,122,122,121,120,118,117,116,115,113,112,111,109,107,106,104,102,100,98
,96,94,92,90,88,85,83,81,78,76,73,71,68,65,63,60,57,54,51,49,46,43,40,37
,34,31,28,25,22,19,16,12,9,6,3,0,131,134,137,140,144,147,150,153,156,159
,162,165,168,171,174,177,179,182,185,188,191,193,196,199,201,204,206,209
,211,213,216,218,220,222,224,226,228,230,232,234,235,237,239,240,241,243
,244,245,246,248,249,250,250,251,252,253,253,254,254,254,255,255,255,255
,255,255,255,254,254,254,253,253,252,251,250,250,249,248,246,245,244,243
,241,240,239,237,235,234,232,230,228,226,224,222,220,218,216,213,211,209
,206,204,201,199,196,193,191,188,185,182,179,177,174,171,168,165,162,159
,156,153,150,147,144,140,137,134,131};

void init(void)
{
 TMOD|=0x21;//初始化T1及串口,波特率9600,24M时钟
 SCON=0xf0;//T1为16位计数器
 PCON|=0x80;
 TH1=0xf3;
 TL1=0xf3;
 TR1=1;
 TR0=0;
 ET0=1;
 ES=1;
 //EA=1;
 //RI=0;
 //TI=0;
}

void servial(void) interrupt 4 using 3
{
if (RI==1)
	{
	RI=0;
	if (SM2==1&&SBUF==0x04)
		{SM2=0;TB8=1;SBUF=4;
		while (TI!=1);
		TI=0;
		}
	else 
		{if(SM2==0&&SBUF==0xff&&RB8==1) SM2=1;
		else if (SM2==0&&RB8==0)
			{Command_Temp=SBUF;
			TB8=1;
			if(Command_Temp<=20&&Command_Temp>=1)
					{Command=Command_Temp;
					SBUF=Command;
					while (TI!=1);
					TI=0;}
			if (Command<=18&&Command>=1)TR0=0;
			}
		}
	}
}

void time0(void) interrupt 1 using 1
{
	EA=0;
	TH0=TimeH;
	TL0=TimeL;
	TR0=1;
	if (Start_f==0)
	{
		DA1=IAB[Iasuffix];
		_nop_();_nop_();
		DA2=IAB[Ibsuffix];

		Iasuffix+=Step_Num;
		Ibsuffix+=Step_Num;

		//if (Iasuffix>255)Iasuffix=0;
		//if (Ibsuffix>255)Ibsuffix=0;
			
	}
	else  
		{DA1=IAB[Iasuffix];
		_nop_();_nop_();
		DA2=IAB[Ibsuffix];
	
		Iasuffix+=Start_Stepnum;
		Ibsuffix+=Start_Stepnum;

		//if (Iasuffix>255)Iasuffix=0;
		//if (Ibsuffix>255)Ibsuffix=0;
			
  		Start_Steptimes--;
  		if (Start_Steptimes<=0){Start_Steptimes=START_STEPTIMES;Start_Stepnum=Start_Stepnum*2;}
   		if (Start_Stepnum==32) {Start_f=0;Start_Stepnum=2;}
		}
		EA=1;
}

main()
{
init();
while(1)
switch(Command)
{
case 0:
	LEVEL1=0xff;
	_nop_();_nop_();
	LEVEL2=0xff;	
	_nop_();_nop_();
	DA1=0x00;
	_nop_();_nop_();
	DA2=0x00;
	Start_f=0;
    Start_Stepnum=2;
    Start_Steptimes=START_STEPTIMES;
	Iasuffix=0;
	Ibsuffix=0;
	Command=88;
	EA=1;
	break;
case 1:
	Step_Num=1;
	TimeH=0xc2;
	TimeL=0xf6;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;
case 2:
	Step_Num=1;
	TimeH=0xDB;
	TimeL=0x60;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;
case 3:
	Step_Num=1;
	TimeH=0xe1;
	TimeL=0x7a;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;
case 4:
	Step_Num=1;
	TimeH=0xed;
	TimeL=0xaf;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;
case 5:		
	Step_Num=1;
	TimeH=0xf3;
	TimeL=0xca;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;
case 6:
	Step_Num=4;
	TimeH=0xdb;
	TimeL=0x60;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;
case 7:
	Step_Num=4;
	TimeH=0xe2;
	TimeL=0xb3;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;
case 8:
	Step_Num=4;
	TimeH=0xe5;
	TimeL=0x97;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;
case 9:
	Step_Num=4;
	TimeH=0xed;
	TimeL=0xaf;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;
case 10:
	Step_Num=4;
	TimeH=0xf1;
	TimeL=0x59;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;
case 11:
	Step_Num=16;
	TimeH=0xcf;
	TimeL=0x2b;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;
case 12:
	Step_Num=16;
	TimeH=0xe2;
	TimeL=0xb3;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;	
case 13:
	Step_Num=16;
	TimeH=0xe7;
	TimeL=0x95;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;
case 14:
	Step_Num=16;
	TimeH=0xf1;
	TimeL=0x59;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;
case 15:
	Step_Num=16;
	TimeH=0xf6;
	TimeL=0x3b;
	TH0=TimeH;
	TL0=TimeL;
	Command=88;
	break;
case 16:
	Step_Num=32;
	TimeH=0xf4;
	TimeL=0x47;
	TH0=TimeH;
	TL0=TimeL;
	Start_f=1;
	Command=88;
	break;
case 17:
	Step_Num=32;
	TimeH=0xf6;
	TimeL=0x3b;
	TH0=TimeH;
	TL0=TimeL;
	Start_f=1;
	Command=88;
	break;	
case 18:
	Step_Num=32;
	TimeH=0xfa;
	TimeL=0x23;
	TH0=TimeH;
	TL0=TimeL;
	Start_f=1;
	Command=88;
	break;
case 19://开始运转
	Iasuffix=0;
	Ibsuffix=64;
	TR0=1;
	Command=88;
	break;	
case 20://停止运转
	TR0=0;
	Command=0;
	break;
case 88:
	break;
default: 
    break;
}
}

⌨️ 快捷键说明

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