打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
步进电机驱动程序
 #include <REG52.H>

#define uchar unsigned char

#define uint unsigned int  

#define ulong unsigned long

#define CLK_WISE 0//顺时针方向转动

#define INVERSE 1//逆时针方向转动

bit direction=CLK_WISE;/***方向标志,取值为CLK_WISE INVERSE*/

static uchar speedcount=0;//加速标志,越大转速越快,最大到7,然后回归到0,循环。

//程序中可以依据它来改变占空比

uchar step[8]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03};//8个步

uchar th_0[8]={0x5D,0x85,0x9E,0xAE,0xBA,0xC2,0xC9,0xCF};//8个定时器值,高8

uchar tl_0[8]={0x3D,0xEE,0x58,0x9E,0x3E,0xF7,0xBF,0x2C};//8个定时器值,低8

int step_i=0;//当前处于哪一步

/***定时器t0***/

void time0(void) interrupt 1 using 1

{

P2=step[step_i];//输出电机控制信号

if(direction==CLK_WISE) //顺时针转

step_i++;

else

step_i--;//逆时针转

if (step_i>7)//顺时针到最后一步,需要调整到第一步

step_i=0;

if (step_i<0)//顺时针到第一步,需要调整到最后一步

step_i=7;

TH0=th_0[speedcount];//根据当前速度设定定时器初值

TL0=tl_0[speedcount];

}

 

/****改变转向标志*****/

void int1_srv (void) interrupt 2 using 2

{

if(INT1==0)

{

while(!INT1);

 direction=!direction;

}

}

 

/*******加速********/

void change(void) interrupt 0 using 0

{

if(INT0==0)

{

while(!INT0);

  speedcount++;//记录加速次数

if(speedcount>7)

speedcount=0;//最大为7,然后从0开始循环。

}

}

void main()

{

EA=1;

TMOD=0x01;

ET0=1;//定时器0初始化

TR0=1;

 

EX0=1;

IT0=1;//外部中断0

 

EX1=1;

IT1=1;//外部中断1

 

TH0=th_0[0];

TL0=th_0[0];//定时器0初始值

 

while(1)

{

;

}

}

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
51单片机H桥电路控制电机正反转和PWM调速
T0控制LED实现二进计数
STC单片机之PCA -- 单片机爱好者
模数转换IC ADC0809的使用制做之二
51单片机C语言程序(二)定时/计数器?中断
基于单片机89C51产生PWM信号来控制直流电机调速程序
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服