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

📄 a-d转换之电位器控制电机-差分.txt

📁 c8051f310单片机A-D转换之电位器控制电机-差分
💻 TXT
字号:
#include <c8051f310.h>	
#include <stdio.h> 
#include <math.h>             
#include <Intrins.h>
#include <absacc.h>

sbit  a4=P0^4; //P0.4给定左右轮方向
sbit  a5=P0^5; //PWM输出          
unsigned j,k,m;

void pwm1_1(void)    //PWM的初始化
{
   PCA0MD &= ~0x40; 
   PCA0CN=0x40;  //允许PCA工作   
   PCA0MD=0x02;  //PCA时钟为4分频
  
   PCA0CPM0=0x42;  //设置左轮为8为PWM输出  
   PCA0CPH0=0;
  
  }

 unsigned L;
  
  
void pio(void)  
{
   P0MDIN=0xFF;//全为数字输入→1111 1111
   P0MDOUT=0xEF; //P0.4控转向要驱动能力强选择开漏置0;P0.5控制转速就选择开关能力强更好些置1→1110 1111
   P0SKIP=0xDF;//不跳过P0.5,因为它是控制转速,要给CEX0功能留着→1101  1111 
  
   P1MDIN=0xEF;  //P1.4接电位器,随时控制转速大小,为模拟输入→1110 1111
   P1MDOUT=0xEF; //0为开漏,1为推挽,我觉得P1.4外接电位器,属于接了负载,要驱动能力强的,选择开漏置0→1110 1111
   P1SKIP=0xFF;//必须跳过P1.4其他就随便→1111 1111  

   XBR0=0x00;
   XBR1=0xC1;   //CEX0
 
}

void sysclk(void)    //内部晶振
{
   OSCICL=0x2D;  //20MHZ
   OSCICN=0xC2;// 二分频,分后为10MHZ
   CLKSEL=0x00;  
}

void AD(void)
{
   AMX0P=0x0C;//正输入选择P1.4(12脚口)→0000 1100
   AMX0N=0x0D;
   REF0CN=0x00;//选择基准电压→0000 0000

   ADC0CF=0x24;//2M SAR,左对齐→0010 0100
   ADC0CN=0x80;//→1000 0000
   
   ADC0H=0xff;//左对齐用ADC0H
     
}
 
main( )
 {
   PCA0MD &= ~0x40;// 关狗
   sysclk();
   pio();
   pwm1_1() ;
   AD();
   a4=1;//电机转向
   a5=0;
  while(1)
  {
   AD0BUSY=0;
   AD0BUSY=1;
   
if((ADC0H>0)&(ADC0H<127))
   {
    a4=0;  
    L=ADC0H;L=L*2;L=256-L;
   PCA0CPH0=L;
   
   }  

   else
 {
a4=1;
L=ADC0H;L=(256-L);
L=L*2;L=256-L;
PCA0CPH0=L;

   }

   
   }
     
}

⌨️ 快捷键说明

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