您的当前位置:首页正文

单片机驱动步进电机程序代码

2024-07-13 来源:星星旅游


/********************************************************

实现功能:正转程序

使用芯片:AT89S52

晶振:11.0592MHZ

编译环境:Keil

作者:

【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!

********************************************************/

#include //库文件

#define uchar unsigned char //字符型宏定义

#define uint unsigned int //整型宏定义

uchar tcnt; //定时器计数初值定义

uint sec; //速度值定义

uchar buf[11];

uchar bai,shi,ge;

/********************控制位定义*************************/

sbit shi_neng=P1^0; // 使能控制位

sbit fang_shi=P1^1; // 工作方式控制位

sbit fang_xiang=P1^2;// 旋转方向控制位

sbit mai_chong=P1^3; // 脉冲控制位

/********************延时函数***************************/

void delay1ms(uchar z)

{

uchar x,y;

for(x=0;xfor(y=0;y<110;y++);

}

/***************************定时中断服务函数*************/

void t0(void) interrupt 1 using 0 //定时中断服务函数

{

tcnt++; //每过250ust tcnt 加一

if(tcnt==1) //当tcnt满足条件时

{

tcnt=0; //计满重新再计

sec++;

if(sec==6) //括号内数值越小,电机转动速度越快

{

sec=0; //计满重新再计

mai_chong=~mai_chong; //脉冲输出

}

}

}

/***********************定时器0/1初始化****************************/

void T0_Init()

{

ET0 = 1;

TMOD = 0x22;

TH0=0x06; //对TH0 TL0 赋值

TL0=0x06;

TR0=1; //开始定时

sec=0;

mai_chong=1; // 脉冲控制位

}

/***********************串口初始化****************************/

void Uart_Init()

{

TMOD = 0x22;

TH1 = 0xFD;

TL1 = 0xFD;

SCON = 0x50;

PCON &= 0xef;

TR1 = 1;

}

/***********************数据接收函数****************************/

void ReceiveBuf()

{

int i;

for(i=0;i<11;i++)

{

buf[i] = SBUF;

while(RI == 0);

RI=0;

}

}

/***********************角度控制函数****************************/

void Control()

{

if((bai==buf[5])&(shi==buf[6])&(ge==buf[7]))

{

shi_neng=0;

};

if(bai{

shi_neng=1;

fang_xiang=0;

}

else if(bai>buf[5])

{

shi_neng=1;

fang_xiang=1;

};

if((bai==buf[5])&shi{

shi_neng=1;

fang_xiang=0;

}

else if((bai==buf[5]&shi>buf[6]))

{

shi_neng=1;

fang_xiang=1;

};

if((bai==buf[5])&(shi==buf[6]&(ge{

shi_neng=1;

fang_xiang=0;

}

else if((bai==buf[5])&(shi==buf[6])&(ge>buf[7]))

{

shi_neng=1;

fang_xiang=1;

};

if((bai==buf[5])&(shi==buf[6])&(ge==buf[7]))

{

shi_neng=0;

};

delay1ms(3);

bai=buf[5];

shi=buf[6];

ge=buf[7];

}

/************************主函数****************************/

main()

{

EA=1;

T0_Init();

Uart_Init();

while(1)

{

// shi_neng=1; // 使能控制位

fang_shi=1; // 工作方式控制

ReceiveBuf();

delay1ms(1);

Control();

delay1ms(10);

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容