//-----------------------------------------------------------------------------
// 版权归新华龙电子公司所有
//-----------------------------------------------------------------------------
//
//文件名: StepMotor.c
//
//编写人: LC
//
//编写时间:2005/03/10
//
//目标器件: C8051F02x
//
//编译工具: Silicon Laboratories IDE
//
//程序说明: 此程序通过I/O口驱动步进电机
//P50--STEPA P51--STEPB P52--STEPC P53--STEPD
//------------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------------
#include <c8051f020.h> // SFR declarations
#include <intrins.h>
//------------------------------------------------------------------------------------
// Function PROTOTYPES
//------------------------------------------------------------------------------------
void PORT_Init (void);
/***************************************************************************************
函数名称: void sleep_ms(WORD count)
功能描述: 延时
输入: WORD count(所要延时的长度)
输出: 无
全局变量: 无
调用模块: _nop_()
***************************************************************************************/
void sleep_ms(unsigned char count)
{
unsigned char ii,jj;
for(ii=0;ii<count;ii++)
{
for(jj=0;jj<250;jj++)
_nop_();
}
}
//------------------------------------------------------------------------------------
// MAIN Routine
//------------------------------------------------------------------------------------
void main (void) {
unsigned char k;
unsigned char SendData;
/*无效看门狗*/
WDTCN = 0xde;
WDTCN = 0xad;
PORT_Init ();
SendData=0xff; /*4相线圈都截止*/
while(1)
{
/*步进电机正转*/
for(k=0;k<10;k++){
SendData=0x0e; /*A相通电*/
P5=SendData;
sleep_ms(250);
sleep_ms(250);
sleep_ms(250);
SendData=0x0c; /*AB相通电*/
P5=SendData;
sleep_ms(250);
sleep_ms(250);
sleep_ms(250);
SendData=0x0d; /*B相通电*/
P5=SendData;
sleep_ms(250);
sleep_ms(250);
sleep_ms(250);
SendData=0x09; /*BC相通电*/
P5=SendData;
sleep_ms(250);
sleep_ms(250);
sleep_ms(250);
SendData=0x0b; /*C相通电*/
P5=SendData;
sleep_ms(250);
sleep_ms(250);
sleep_ms(250);
SendData=0x03; /*CD相通电*/
P5=SendData;
sleep_ms(250);
sleep_ms(250);
sleep_ms(250);
SendData=0x07; /*D相通电*/
P5=SendData;
sleep_ms(250);
sleep_ms(250);
sleep_ms(250);
SendData=0x06; /*DA相通电*/
P5=SendData;
sleep_ms(250);
sleep_ms(250);
sleep_ms(250);
}
/*步进电机反转*/
for(k=0;k<10;k++){
SendData=0x06;
P5=SendData;
sleep_ms(250);
sleep_ms(250);
SendData=0x03;
P5=SendData;
sleep_ms(250);
sleep_ms(250);
SendData=0x09;
P5=SendData;
sleep_ms(250);
sleep_ms(250);
SendData=0x0c;
P5=SendData;
sleep_ms(250);
sleep_ms(250);
}
}
}
/***************************************************************************************
函数名称: void PORT_Init(void)
功能描述: 初始化I/O
输入: 无
输出: 无
全局变量: XBR2,P74OUT
调用模块: 无
***************************************************************************************/
void PORT_Init (void)
{
XBR2 = 0x40; /*使能交叉开关和弱上拉*/
P74OUT |= 0x0f; /*P5低4位为推挽输出,其余口为开漏输出*/
}