📄 新建 文本文档.txt
字号:
/******************************************************************/
/*****************************************************************/
/*
/* 步进电机加减速运行程序
/* 步进电机启动时,转速由慢到快逐步加速。
/* 步进电机匀速运行
/* 步进电机由快到慢逐步减速到停止
/*
/******************************************************************/
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
uchar code FFW[8]={0x03,0x09,0x0c,0x06};//正转数组
uchar code REV[8]={0x06,0x0c,0x09,0x03};//反转数组
uchar rate=0x40;
bit StartFlag=0;
sbit photoelectric_switch=P3^2;
/********************************************************/
/*
/* 延时
/* 11.0592MHz时钟,
/*
/********************************************************/
void delay()
{
uchar k;
uint s;
k = rate;
do
{
for(s = 0 ; s <100 ; s++) ;
}while(--k);
}
/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void motor_ffw()
{
uchar i;
for (i=0; i<4; i++) //一个周期转30度
{ if(StartFlag==1)break;
P1 = FFW[i];//取数据
delay(); //调节转速
}
}
/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void motor_rev()
{
uchar i;
for (i=0; i<4; i++) //一个周期转30度
{ if(StartFlag==1)break;
P1 = REV[i]; //取数据
delay(); //调节转速
}
}
/********************************************************
*
* 主程序
*
*********************************************************/
main()
{
EA=1;EX0=1; //外部0中断开
PX0=1;IT0=1; //高优先级脉冲触发
while(1)
{
do{ motor_ffw();
} while(StartFlag==0) ;
StartFlag=0;
do{ motor_rev();
} while(StartFlag==0) ;
StartFlag=0;
}
}
int0_srv() interrupt 0 using 0 //电机起始定位ISP
{ uint m;
EX0=0; //关中断0
StartFlag=1;
EX0=1 ; //开中断
for(m=0;m<10;m++);
//延时
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -