⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 111.c

📁 用C8051F330单片机控制L297和L298驱动步进电机。能够实现正反转
💻 C
字号:
//--------------------------------------------------------------------------
//步进电机L297-02驱动程序。实现对步进电机的正反转的控制
//注:为了便于观察,步进电机初始设定很快,要实现步进角精确控制请更改延时

//-----------------------------------------------------------------------------
#include <c8051F330.h>
#include <intrins.h>                    
// SFR declarations
//-----------------------------------------------------------------------------
// 16-bit SFR Definitions for 'F33x
//-----------------------------------------------------------------------------
sfr16 TMR2RL   = 0xca;                 // Timer2 reload value
sfr16 TMR2     = 0xcc;                 // Timer2 counter
#define SYSCLK      24500000           // SYSCLK frequency in Hz
#define TIMER2_RATE     1000           // Timer 2 overflow rate in Hz
//K
unsigned int i;
//端口配置
sbit reset=P1^4;
sbit half=P1^2;
sbit clock=P0^1;
sbit ccw=P1^1;
sbit enable=P1^3;
//sbit control=P1^7;


//*** 函数定义 ***
void delay100ms(int);			// 延时100MS
void short_delay(void);      //短延时2US
void SYSCLK_Init (void);        //初始化系统时钟
void PORT_Init (void);          //端口初始化
void Timer2_Init (int);         //定时器2初始化

void S_Init(void);              //复位函数
void Dir_F(void);               //正转函数
void Dir_B(void);               //反转函数


void SYSCLK_Init (void)
{

   OSCICN |= 0x03;                     // Configure internal oscillator to
                                       //  24.5MHz
   RSTSRC  = 0x04;                     // Enable missing clock detector
}

void PORT_Init (void)
{

   XBR0     = 0x00;                       // no digital peripherals selected
   XBR1     = 0x40;                       // Enable crossbar and weak pull-ups
   P1MDOUT |= 0xff;                       // enable P1 as a push-pull output
   P0MDOUT |= 0xff;                       // enable P0 as a push-pull output
}

void Timer2_Init (int counts)
{
   TMR2CN = 0x00;                      // STOP Timer2; Clear TF2H and TF2L;
                                       // disable low-byte interrupt; disable                                    // split mode; select internal timebase
   CKCON |= 0x10;                      // Timer2 uses SYSCLK as its timebase

   TMR2RL  = -counts;                  // Init reload values
   TMR2    = TMR2RL;                   // Init Timer2 with reload value
   ET2 = 0;                            // disable Timer2 interrupts
   TR2 = 1;                            // start Timer2
}

void delay100ms(int time)	//when time=100,the delay is 100ms
{
   unsigned int count;
   TF2H = 0;                           // Clear Timer2 overflow flag
   TR2 = 1;                            // Start Timer2
   
   for (count = time; count != 0; count--) {
      while (!TF2H);                   // wait for overflow
      TF2H = 0;                        // clear overflow indicator
   }

   TR2 = 0;                            // Stop Timer2
}



void short_delay(void) //delay 2us
{ 
unsigned int i; 
for (i=0;i<49;i++); 
}

//-----------------------------------------------------------------------------
void S_Init(void)
{
    reset=0;
    short_delay();
    reset=1;
    short_delay();
	short_delay();
	short_delay();
}

void Dir_F(void)
{
    ccw=1;
    for(i=0;i<1000;i++)
	{
      clock=1;
      short_delay();
	  clock=0;
	  short_delay();
	  clock=1;
      delay100ms(10);
    }
}

void Dir_B(void)
{
    ccw=0;
    for(i=0;i<1000;i++)
	{
      clock=1;
      short_delay();
	  clock=0;
	  short_delay();
	  clock=1;
      delay100ms(10);
    }
}
//主函数
void main ( ){
   unsigned int i;
   PCA0MD &= ~0x40;
   OSCICN |= 0x03; // Set internal oscillator to highest
                   // setting (24500000)
   PORT_Init ();			/*初始化I/O口*/



  SYSCLK_Init ();                        // Initialize system clock to 24.5MHz
  Timer2_Init(SYSCLK/TIMER2_RATE);    // Init Timer 2
  
//  ccw=1;
  half=1;
  enable=1;
//  control=0;
  S_Init( );
  while (1) 
  {
    
    Dir_F( );
    delay100ms(1000);
    Dir_B( );
   
  }
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -