// 到P2.4-P2.7。按S19可控制步进电机1的转动停止、加减速和正反转,按S20可控制步进电机2的转动停
// 止、加减速和正反转。
//****************************************************************************************************************
#include
//#include
sbit A1=P2^0; //步进电机1输出脚定义
sbit B1=P2^1;
sbit C1=P2^2;
sbit D1=P2^3;
sbit A2=P2^4; //步进电机2输出脚定义
sbit B2=P2^5;
sbit C2=P2^6;
sbit D2=P2^7;
//步进电机1工作定义------------------------------------------------------------------------------------------------------
#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#define Coil_OFF1 {A1=0;B1=0;C1=0;D1=0;}//全部断电
//步进电机2工作定义
#define Coil_A2 {A2=1;B2=0;C2=0;D2=0;}//A相通电,其他相断电
#define Coil_B2 {A2=0;B2=1;C2=0;D2=0;}//B相通电,其他相断电
#define Coil_C2 {A2=0;B2=0;C2=1;D2=0;}//C相通电,其他相断电
#define Coil_D2 {A2=0;B2=0;C2=0;D2=1;}//D相通电,其他相断电
#define Coil_OFF2 {A2=0;B2=0;C2=0;D2=0;}//全部断电
unsigned char x1,y1,i1,s1;
unsigned char x2,y2,i2,s2;
//unsigned char y1;
//unsigned char i1;
//unsigned char S1;
//------------------------------------------------------------------------------------------------------
// uS延时函数,含有输入参数 unsigned char t,无返回值
// unsigned char 是定义无符号字符变量,其值的范围是
// 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
// 长度如下 T=tx2+5 uS
//-----------------------------------------------------------------------------------------------------
void DelayUs2x(unsigned char t)
{
while(--t);
}
//--------------------------------------------------------------------------------------------------------
// mS延时函数,含有输入参数 unsigned char t,无返回值
// unsigned char 是定义无符号字符变量,其值的范围是
// 0~255 这里使用晶振12M,精确延时请使用汇编
//-----------------------------------------------------------------------------------------------------------
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
//---------------------------------------------------------------------------------------------------
// 定时器初始化子程序
//---------------------------------------------------------------------------------------------------
void Init_Timer(void)
{
TMOD |= 0x11; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
//TH0=0x00; //给定初值
//TL0=0x00;
EA=1; //总中断打开
ET1=1; //定时器中断打开
TR1=1; //定时器开关打开
PT1=1; //优先级打开
ET0=1; //定时器中断打开
TR0=1; //定时器开关打开
PT0=1; //优先级打开
}
void main()
{
s1=2;
s2=2;
Init_Timer();
EX0=1; //外部中断0开
IT0=1; //1表示边沿触发
EX1=1; //外部中断0开
IT1=1; //1表示边沿触发
while(1)
{
}
}
////步进电机2控制按钮(S20)中断子程序
void ISR_INT0(void) interrupt 0
{
if(!INT0)
{
DelayMs(50);//在此处可以添加去抖动程序,防止按键抖动造成错误
if(!INT0)
s1++;
}
switch(s1)
{
case 0:
x1=0xe4; //快速转动赋值 间隔6ms
y1=0xa8;
break;
case 1:
x1=0xf4; //慢速转动赋值 间隔3ms
y1=0x48;
break;
case 3:
x1=0xe4; //反转赋值 间隔6ms
y1=0xa8;
break;
}
if(s1==5)
s1=0;
}
//步进电机2控制按钮(S20)中断子程序
void ISR_INT1(void) interrupt 2
{
if(!INT1)
{
DelayMs(50);//在此处可以添加去抖动程序,防止按键抖动造成错误
if(!INT1)
s2++;
}
switch(s2)
{
case 0:
x2=0xe4; //快速转动赋值 间隔6ms
y2=0xa8;
break;
case 1:
x2=0xf4; //慢速转动赋值 间隔3ms
y2=0x48;
break;
case 3:
x2=0xe4; //反转赋值 间隔6ms
y2=0xa8;
break;
}
if(s2==5)
s2=0;
}
//定时器0中断子程序,用于驱动步进电机1-----------------------------------------------------------------------
void Timer0_isr(void) interrupt 1
{
TH0=x1; //重新赋值
TL0=y1;
if(s1==0||s1==1) //正转工作流程
{
switch(i1)
{
case 0:Coil_A1;i1++;break;
case 1:Coil_B1;i1++;break;
case 2:Coil_C1;i1++;break;
case 3:Coil_D1;i1=0;break;
default:Coil_OFF1;i1=0;
}
}
else if(s1==3) //反转工作流程
{
switch(i1)
{
case 0:Coil_D1;i1++;break;
case 1:Coil_C1;i1++;break;
case 2:Coil_B1;i1++;break;
case 3:Coil_A1;i1=0;break;
default:Coil_OFF1;i1=0;
}
}
else //停止转动
Coil_OFF1;
}
//定时器1中断子程序,用于驱动步进电机2-----------------------------------------------------------------------
void Timer1_isr(void) interrupt 3
{
TH1=x2; //重新赋值
TL1=y2;
if(s2==0||s2==1) //正转工作流程
{
switch(i2)
{
case 0:Coil_A2;i2++;break;
case 1:Coil_B2;i2++;break;
case 2:Coil_C2;i2++;break;
case 3:Coil_D2;i2=0;break;
default:Coil_OFF2;i2=0;
}
}
else if(s2==3) //反转工作流程
{
switch(i2)
{
case 0:Coil_D2;i2++;break;
case 1:Coil_C2;i2++;break;
case 2:Coil_B2;i2++;break;
case 3:Coil_A2;i2=0;break;
default:Coil_OFF2;i2=0;
}
}
else //停止转动
Coil_OFF2;
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』