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

📄 单端adc控制两电机.txt

📁 c8051f330单片机 用adc功能实现电位器调速
💻 TXT
字号:
#include  <c8051f310.h>	
#include <stdio.h> 
#include <math.h>   
#include <Intrins.h>
#include <absacc.h>

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

sbit  a4=P0^4; //P04给定右轮方向,
sbit  a5=P0^5; //PWM,定右轮速度                 
unsigned j,k,m;


void pwm(void) //PWM的初始化
 {
  PCA0MD &= ~0x40; 
  PCA0CN=0x40; //允许PCA工作   
  PCA0MD=0x02; //PCA时钟为4分频
  
  PCA0L=230;//设置没什么关系
  PCA0H=230;//设置没什么关系
  
  PCA0CPM0=0x42; //设置左轮为8位PWM输出  
  PCA0CPL0=0; //左轮
  PCA0CPH0=256;
  
  PCA0CPM1=0x42; //设置右轮为8位PWM输出  
  PCA0CPL1=0; //右轮
  PCA0CPH1=256;

  }


void adc(void)
{AMX0P=0x11;//正输入选择电源VDD--0001 0001
 AMX0N=0x0C;//负输入选择P1.4(12脚口)--0000 1100
 ADC0CF=0x24;//2M,左对齐
 ADC0H=0xFF;
 ADC0L=0x00;
 ADC0CN=0x90;
 REF0CN=0x01;


 }

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

 } 
  

void pio(void)  
 {
   P0MDIN=0xff;  
   P0MDOUT=0x20; //0为开漏(接负载),1为推挽(开关能力强)0010 0000
   P0SKIP=0xDF; //P0.5就是PWM控制转速的—1101 1111  
   
   P1MDIN=0xef;//一定要让P1.4为模拟输入--1110 1111  
   P1MDOUT=0x02; //0为开漏,1为推挽—0000 0010
   P1SKIP=0x11;//跳过P1.0,因为P1.1就是PWM来控制转速的,再跳过P1.4,留给adc的负输入选择—0001 0001  
   
   XBR0=0x00;
   XBR1=0xc2;//选择CEX0,CEX1 PCA0ME
 
  }


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


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

   a4=1;
   a0=1;
  }

 

⌨️ 快捷键说明

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