/*--------------------------------------------------------------------------------
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);
}
完整资料打包: