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

📄 adc.bak

📁 看看ARM菜鸟在ARM7上写的操作系统——ARM圈圈操作系统 最近在ADuC7027上写了一个ARM_00_OS
💻 BAK
字号:
/**********************************************************************
  ADC.c file
  ADuC7027的ADC函数
  作者:Computer-lov
  建立日期:2006-3-25
  修改日期:2006-3-25
  版本:V1.0
  版权所有,盗版必究。
  Copyright(C) Computer-lov 2006-2016
  All rights reserved
**********************************************************************/

#include <../My_type.h>
#include <ADuC7027.H>
#include "ADC.h"

////////////////////////由软件启动一次转换,并将ADC结果返回//////////////////////////
uint16 ADC_software_conversion(void)
{
 uint16 result;

 ADCCON=0x00A3;				//开始一次软件启动转换
 while(!(ADCSTA & 0x01));   //等待转换完成
 ADCCON=0x0020;             //停止转换
 result=ADCDAT>>16;         //保存结果
 return result;             //返回结果
}
/////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////ADC校准/////////////////////////////////////////////////
void ADC_calibration(void)
{
 uint16 i;
 uint16 result;

 ADCCP=0x11;               //将输入接内部地
 for(i=0;i<0x03FF;i++)     //零点偏移校准
  {
   ADCOF=i;				   //设置ADCOF的值
   result=ADC_software_conversion();	 //读回ADC的值
   if(result==0x01)
    {									 //校验到的结果为1时,往回调整一点,就是0了
	 ADCOF=i-3;
	 break;
	}
  }
 ADCCP=0x12;   //将输入连接到内部参考电压
 for(i=0;i<0x03FF;i++)		  //增益校准
  {
   ADCGN=i;	   //设置ADCGN的值
   result=ADC_software_conversion();
   if(result==4094)
    {								  //校验结果为4094
	  ADCGN=i+6;					  //再将ADCGN加的一点
	  result=ADC_software_conversion();
	  if(result==4095)
	   {					 //如果读回的值为4095,则说明往增大的方向调整一点就是满量程了
	    ADCGN=i+4;
		break;
	   }
	  else
	   {			       //否则,应该按相反的方向调整一点
	    ADCGN=i-4;
       }
	}
  }
}
//////////////////////////////////////////////////////////////////////////////////

////////////////////////////ADC初始化/////////////////////////////////////////////
void ADC_init(void)
{
 ADCCON=0x0023;	   //ADC时钟1MHz,打开ADC电源,单端模式,并选择软件转换模式
 ADCCP=0x00;	   //通道0
 ADCCN=0x00;	   //通道0
 REFCON=0x01;      //使用内部2.5V参考电压
 ADC_calibration();	 //ADC校准
 ADCCP=0x00;	  //选择通道0
}
//////////////////////////////////////////////////////////////////////////////////


//////////////////////////选择通道ch,启动转换,并将ADC结果返回///////////////////
uint16 read_ADC(uint8 ch)
{
 ADCCP=ch & 0x1F;	   //设置通道
 return ADC_software_conversion();
}
//////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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