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

📄 4、单片机控制两个电机.txt

📁 c8051f330的电机控制
💻 TXT
字号:
//P0.4(20脚口)--L298的5口--控制0转向
//P0.5(19脚口)--L298的6口--控制PWM
//P1.0(16脚口)--L298的12口--控制1转向
//P1.1(15脚口)--L298的11口--控制1PWM

#include  <c8051f330.h>	

sbit  a4=P0^4; //给定0轮方向,
sbit  a5=P0^5; //PWM,定0轮速度

sbit  a0=P1^0;//给定1轮方向
sbit  a1=P1^1;//PWM,定1轮速度                  

unsigned j,k,m;

void pwm(void) //PWM的初始化
 {
  PCA0MD &= ~0x40; 
  PCA0CN=0x40; //允许PCA工作   
  PCA0MD=0x02; //PCA时钟为4分频
  
  PCA0CPM0=0x42; //设置0轮为8位PWM输出  
  PCA0CPL0=0; 
  PCA0CPH0=156;
  
  PCA0CPM1=0x42; //设置1轮为8位PWM输出  
  PCA0CPL1=0; 
  PCA0CPH1=156;

  }


void  delay(m) 
 {
  unsigned i;
  for(i=0;i<200;i++)
  {
    for(j=0;j<m;j++)
	 {; ;}
  }

 } 
  
void pio(void)  
 {
   P0MDIN=0xff;  
   P0MDOUT=0xEF; //0为开漏(接负载),1为推挽(开关能力强)P0^4定0轮方向置0,P0^5定0轮速度置1→1110 1111               

   P0SKIP=0xDF; //P0.5控制电机0转速的→1101 1111  
   
   P1MDIN=0xff;  
   P1MDOUT=0xFE; //0为开漏,1为推挽,P1^0定1轮方向置0,P1^1定1轮速度置1→1111 1110
   P1SKIP=0xFD;//P1.1控制电机1转速→1111 1101  
   
   XBR0=0x00;
   XBR1=0xc2;//选择CEX0,CEX1通过交叉开关后,CEX0对应(P1^0定0轮方向,P1^1定0轮速度) ;CEX1对应(P0^4定1轮方向,P0^5定1轮速度)                 
 
 }

void sysclk(void) //内部晶振
  {
   OSCICL=0x2d; //20MHZ
   OSCICN=0xC2;// 10MHZ
   CLKSEL=0x00;  
  }

main( )
 { 
   PCA0MD &=~0x40;// 关狗
   sysclk();
   pio();
   pwm();   

  while(1)
  {
    a4=1;
    a0=1;
    PCA0CPH0=0;
    PCA0CPH1=0;
    delay(5000);//2秒左右 
   
    a4=0;
    a0=0;
    PCA0CPH0=255;
    PCA0CPH1=255;
    delay(5000); 

    a4=0;
    a0=0;
    PCA0CPH0=0;
    PCA0CPH1=0;
    delay(5000);  
	
	a4=1;
    a0=1;
    PCA0CPH0=255;
    PCA0CPH1=255;
    delay(5000); 


  }
 
} 

⌨️ 快捷键说明

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