STC51单片机34——五线四相步进电机驱动(1个步进电机)

 

/*--------------------------------------------------------------------------------
     MCU:             STC15W408AS 注意其没有T1,但是有T2
     开发板:             STC15W408AS最小系统板
     晶振:              内部时钟11.0592M,波特率38400
     扩展模块:        -
     软件:            Keil.C51.V9.01
-------------------------------------------------------------------------------------*/


#include "STC15.h"

#define u8 unsigned char
#define u16 unsigned int    


sbit StepperPin1=P1^2;
sbit StepperPin2=P1^3;
sbit StepperPin3=P1^4;
sbit StepperPin4=P1^5;

void StepmotorDelay(u8 n){
  u16 i;
    for(;n>0;n--)
      for(i=2000;i>0;i--) //不要小于2000
            ;
}

void Step(void);


//----------------------------------------------------------   
//  函数名称:void IniSerialPort(void)   
//  函数功能:串口初始化   
//----------------------------------------------------------   

void InitSerialPort(void)
{
        SCON = 0x50;            //8位数据,可变波特率
    AUXR = 0x14;                //T2为1T模式, 并启动定时器2
    AUXR |= 0x01;               //选择定时器2为串口1的波特率发生器
        T2L = 0xB8;        //设置定时初始值
      T2H = 0xFF;        //设置定时初始值
      ES=1;                     //串口中断开关,采用查询法时不用打开中断   
    EA=1;    
      //PS=1;//高优先级
    REN=1;                  //串口为工作方式1,允许接收数据
}
//----------------------------------------------------------   
//  函数名称:void SerialPortInte(void)
//  函数功能:串口中断方式接收一个字符
//----------------------------------------------------------   
#define Download_command 0xf1 //功能码

void SerialPortInte(void) interrupt 4
{
    unsigned char dat;
    unsigned int ISP_i,ISP_j;
    
    if(TI==1)
    {
        TI=0;
    }
    else
    {
        RI=0;
        dat=SBUF;
        SBUF=dat;
        if(dat==Download_command)
        {
            for(ISP_j=1000;ISP_j>0;ISP_j--)
              for(ISP_i=123;ISP_i>0;ISP_i--);
            IAP_CONTR =0x60;//软件复位
        }
    }
}

/************************主函数******************************************************/
void main()  
{
  InitSerialPort();
     while(1)
     {
      Step();
            StepmotorDelay(10);
     }
}  

u8 StepN=1;
void Step(void) //4 相8 拍
{
    switch(StepN){
        case 1: StepperPin1=1;
                        StepperPin2=0;
                        StepperPin3=0;
                        StepperPin4=0;
                        break;
        case 2: StepperPin1=1;
                        StepperPin2=1;
                        StepperPin3=0;
                        StepperPin4=0;    
                        break;
        case 3: StepperPin1=0;
                        StepperPin2=1;
                        StepperPin3=0;
                        StepperPin4=0;    
                        break;
        case 4: StepperPin1=0;
                        StepperPin2=1;
                        StepperPin3=1;
                        StepperPin4=0;
                        break;
        case 5: StepperPin1=0;
                        StepperPin2=0;
                        StepperPin3=1;
                        StepperPin4=0;
                        break;
        case 6: StepperPin1=0;
                        StepperPin2=0;
                        StepperPin3=1;
                        StepperPin4=1;
                        break;
        case 7: StepperPin1=0;
                        StepperPin2=0;
                        StepperPin3=0;
                        StepperPin4=1;
                        break;
        case 8: StepperPin1=1;
                        StepperPin2=0;
                        StepperPin3=0;
                        StepperPin4=1;        
                        StepN=0;
                        break;
    default:break;                        
    }
    StepN++;
    StepmotorDelay(1);

}

完整资料打包:

STC51单片机34-五线四相步进电机驱动(1个步进电机)-单片机文档类资源-CSDN下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fengyuzhe13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值