//********************************
#include "Use.h"
#include "Ver.H"
#include
#define MAX_REF (5000) //5.00v
#define MAX_UK (1) //变比系数10最大测量范围
#define U_CH (0) //电压通道
#define I_CH (1) //电流通道
#define ADC_MAX_CNT 4 //采集次数
/*-----------------------------------------------------------
//ADCON0 ADFM VCFG - - CHS1 CHS0 GO/DONE ADON 00-- 0000 58,83
ADFM: A/D 结果格式选择位
1 = 右对齐
0 = 左对齐
//ch=输入的ADC的通道 B0000_1111
--------------------------------------------------------------*/
void ADC_Init(unsigned char ch){
ANSEL =B0111_0000 | ch; //使用内部特殊RC=500K
CMCON0 =B0000_0111; //Cout在内部,V-=Cin-关闭比较器
TRISIO =B0000_1000 | ch; //必须采用或处理
if(ch & B0000_1000) TRISIO |=B0001_0000; //CH4=ENABLED
}
//-----------------------------------------------------------
//ADC采集开始 channel=0~3
unsigned int ADC(unsigned char channel){ //AD转换.
const unsigned char ADCNok[]={
B1000_0001,B1000_0101,B1000_1001,B1000_1101,
};
while(GODONE); //等待转换完成.查询方式.
ADCON0=ADCNok[channel];
GODONE=1; //开启转换过程.
while(GODONE); //等待转换完成.查询方式.
return (ADRESH<<8 |ADRESL);
}
//*******************************************************
//电压检测 得到电压的豪伏值 CH=0-3
unsigned int Get_ADC_ONE_Channel(unsigned char ch){
unsigned long u;
unsigned char i;
u=0;
for(i=0;i
//**********************************
//均值滤波
u /=ADC_MAX_CNT;
u =u*MAX_REF/1024;
// u *=MAX_UK;//得到电压值
return u;
}
//*************************************************
//启动ADC转换,得到3路ADC的电压值
void Get_ADC_Value(void){
Current_U=Get_ADC_ONE_Channel(U_CH)*MAX_UK; //得到电压值
Current_I=Get_ADC_ONE_Channel(I_CH); //电流系数1
}