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

📄 main.c

📁 基于7279的直流电机程序
💻 C
字号:
#include <c8051F020.h>
#include <intrins.h>
#include <main.h>

bit Moto_Dir=0;
uchar irq_count;
uchar irq_count_t;
uchar PWM_TIME_H,PWM_TIME_L;

bit i=0;

/***********************短延时*******************************/
 
void SYSCLK_Init (void)
{
   int i;                              // delay counter
   OSCXCN = 0x67;                      // start external oscillator with
                                       // 18.432MHz crystal
   for (i=0; i < 256; i++) ;           // Wait for osc. to start up
   while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle
   OSCICN = 0x88;                      // select external oscillator as SYSCLK
                                       // source and enable missing clock
                                       // detector
  //OSCICN = 0x07;   //interal 16MHZ
}

void PORT_Init (void)
{
 //  XBR0    = 0x07;                     // Enable SMBus, SPI0, and UART0
   XBR1    = 0x00;
   XBR2    = 0x44;                     // Enable crossbar and weak pull-ups
   EMI0CF  = 0x27;
   EMI0TC  = 0x21;
   P74OUT  = 0xFF;
   P0MDOUT = 0x15;
  
   P2MDOUT |= 0x0F;                     //P1.2-P1.5推挽输出
   P2 &= 0xff;   

   P1MDOUT |= 0x00;                     //P1.2-P1.5推挽输出
   P1 &= 0xff;                      	//P1.2-P1.5=0
}

void SPI0_Init (void)
{
   SPI0CFG = 0x07;                     // data sampled on 1st SCK rising edge
                                       // 8-bit data words
   SPI0CFG|=0xC0;   //CKPOL =1;

   SPI0CN = 0x03;                      // Master mode; SPI enabled; flags
                                       // cleared
   SPI0CKR = SYSCLK/2/8000000-1;       // SPI clock <= 8MHz (limited by 
                                       // EEPROM spec.)
}

void ShortDelay(void)
{ uchar x,y;
  for(x=0;x<5;x++)
     for(y=0;y<125;y++)
	      _Nop();
  return;
}

/************************主函数******************************/
void main(void)
{
 
    WDTCN = 0xde;
    WDTCN = 0xad;           //关看门狗
    SYSCLK_Init ();         //初始化时钟
    //Timer0_Init();          //初始化定时器
    PORT_Init ();           //初始化IO口
    SPI0_Init ();           //初始化SPI0

  PWM1=0; PWM2=0; PWM3=1; PWM4=1;

  irq_count=0;
  i=0;
  PWM_TIME_H=80;
  PWM_TIME_L=20;

   ET0=1;                   // T1使能
   TMOD=0x01;               // T1都为方式1计时*/
   TH0=0x0FF;  TL0=0x0F2;     // T1 初值
   TR0=1;                   // 定时器启动
   EA=1;                    // 开全局中断

  while(1)
     {  //**************按键处理*****************************/
        if(!LEFT_KEY)
         { ShortDelay();
           if(!LEFT_KEY)  // 延时去抖
             {
                Moto_Dir=1;
                PWM3=0; PWM4=1;
             }  // end if(LEFT_KEY)
            while(!LEFT_KEY);
          } // end if(LEFT_KEY)

        if(!RIGHT_KEY)
         { ShortDelay();
           if(!RIGHT_KEY)  // 延时去抖
             {
                Moto_Dir=0;
                PWM3=1; PWM4=0;
             }  // end if(RIGHT_KEY)
            while(!RIGHT_KEY);
          } // end if(RIGHT_KEY)

        if(!UP_KEY)
         { ShortDelay();
           if(!UP_KEY)  // 延时去抖
             {
                if(PWM_TIME_H > 70)
                   {
                     PWM_TIME_H--;
                     PWM_TIME_L = 100-PWM_TIME_H;
                   }
             }  // end if(UP_KEY)
            while(!UP_KEY);
          } // end if(UP_KEY)

        if(!DOWN_KEY)
         { ShortDelay();
           if(!DOWN_KEY)  // 延时去抖
             {
                if(PWM_TIME_H < 96)
                   {
                     PWM_TIME_H++;
                     PWM_TIME_L = 100-PWM_TIME_H;
                   }
             }  // end if(DOWN_KEY)
            while(!DOWN_KEY);
          } // end if(DOWN_KEY)
     }   // end while(1)
}

void timer1(void)  interrupt 1 //using 1    // T0定时器中断 发PWM脉冲
{
   TH0=0x0FF;
   TL0=0x0F2;
   irq_count++;
   if (irq_count>=irq_count_t)
      { irq_count=0; i=~i;
        if(i==1)
            irq_count_t = PWM_TIME_H; 
        else
            irq_count_t = PWM_TIME_L;
        if(Moto_Dir==1)
           { PWM2=~PWM2; PWM1=1; }
        else
           { PWM2=1; PWM1=~PWM1; }
      }
}







⌨️ 快捷键说明

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