深圳市利记SBO伺服控制技术有限公司
电话:0755-29030191
邮箱:983847136@qq.com
地址:深圳市龙华区东环一路天汇大厦D栋306房
步进电机控制之二:中断实现正反转控制
发布时间:2020-11-20 07:13:31
步进电机控制之二:中断实现正反转控制
/*设计思路:采用按键对标志位flag1、flag2的
奇偶性判断不同的键值含义;步进电机采用四
相四拍的工作方式;Proteus不支持八拍工作模式,
该程序在Keil5下运行,低版本需修改头文件为:
#include
/*优点:执行效率高,无需键盘扫描,无需松手检测;
缺点:不具备键盘消抖功能*/
#include
#define uint unsigned int
#define uchar unsigned char
uchar code num[]={0x01,0x02,0x04,0x08};
bit flag1,flag2;
void init_exint();
void delay_ms(uint z);
void motorzz();
void motorfz();
void motorstop();
void main()
{
init_exint();
while(1)
{
if(flag1==0)
motorstop();
else if(flag2==0)
motorzz();
else
motorfz();
}
}
void init_exint()
{
EA=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
}
void delay_ms(uint z)
{
uchar i;
while(z--)
for(i=0;i<120;i++);
}
void motorstop()
{
P0=0X00;
}
void motorzz()
{
uchar i;
for(i=0;i<4;i++)
{
P0=num[i];
delay_ms(20);
}
}
void motorfz()
{
char i;
/*注意:此处定义为有符号字符型,如果定义为
无符号字符型,i=0,i-1=255,i=255,for循
环依旧成立,而num[255]是一个未知数*/
for(i=3;i>=0;i--)
{
P0=num[i];
delay_ms(20);
}
}
/*以上motorfz()函数又等价于
void motorfz()
{
uchar i;
for(i=4;i>0;i--)
{
P0=num[i-1];
delay_ms(20);
}
}
*/
void ext0() interrupt 0
{
flag1=~flag1;
}
void ext1() interrupt 2
{
flag2=~flag2;
}
- 上一篇:步进电机控制之启停正反转与调速
- 下一篇:步进电机控制之一:查询实现正反转控制
产品推荐:两相步进电机
产品推荐:无刷电机
产品推荐:两相步进驱动器
产品推荐:直流无刷驱动器