📄 adconvt.c
字号:
#include "ADConvt.h"
/**********************AD初始化函数**********************
*入口: 无
*出口: 无
*占用资源: ADCON0、ADCON1
********************************************************/
void AD_initial(void)
{
uint8 tmpADChn; //循环控制
ADCON0=0x81; //转换时钟Fosc/32,选择通道0,暂不启动AD,打开AD
ADCON1=0x83; //转换时钟Fosc/32,右对齐,AN0,AN1,AN2,AN4为模拟其余为数字
ADIF=0; //清0AD转换标志
ADIE=0; //禁止AD中断
Tr_AN0=1; //AD通道设为输入
Tr_AN1=1;
Tr_AN2=1;
Tr_AN3=1;
ADChnRe.ADNum=0; //AD转换数目清0
for(tmpADChn=0;tmpADChn<ConADChnNum;tmpADChn++)
{
ADChnRe.ADBuf[tmpADChn]=0; //AD缓冲区赋值
ADChnRe.ADResult[tmpADChn]=0; //AD转换结果赋值
ADChnRe.ADMin[tmpADChn]=1023; //最小值赋初始值
ADChnRe.isStartADSap[tmpADChn]=FALSE; //未开始采样
}
}
/**********************AD转换函数************************
*入口: 待转换的通道号ADChn(0,1,2,3)
*出口: AD转换结果
*占用资源: ADRESH,ADRESL,ADIF
********************************************************/
uint16 ADConvt(uint8 ADChn)
{
uint16 ADConvResult; //AD转换结果
uint16 ADWaitPluse; //AD等待脉冲
ADCON0=TableADCON0[ADChn]; //选择AD通道
delay(1);
GODONE=1; //启动AD
ADWaitPluse=0;
while(GODONE==0) //等待AD转换完成
{
ADWaitPluse++;
if(ADWaitPluse>=ConADWaitPluse)
{
return 0;
};
}
ADIF=0; //清0AD转换标志
ADConvResult=ADRESL+(ADRESH<<8);
return(ADConvResult);
}
/************************采集各通道AD值*******************
*入口:无
*出口:无
*占用资源:结构体ADChnRe
*采集各通道的AD转换结果,采样点达到规定数目ConAdNum时,计算
*均值,存入ADChnRe.ADResult[]数组中
**********************************************************/
void MainAdConv(void)
{
uint8 NowADChn; //当前AD通道
//采样各通道AD值
for(NowADChn=0;NowADChn<ConADChnNum;NowADChn++)
{
ADChnRe.ADBuf[NowADChn]+=ADConvt(NowADChn);
}
ADChnRe.ADNum++;
if(ADChnRe.ADNum==ConAdNum)
{
for(NowADChn=0;NowADChn<ConADChnNum;NowADChn++)
{
ADChnRe.ADResult[NowADChn]=ADChnRe.ADBuf[NowADChn]/ConAdNum; //计算均值
ADChnRe.ADBuf[NowADChn]=0; //AD缓冲区清0
if((ADChnRe.ADResult[NowADChn]< ADChnRe.ADMin[NowADChn])&(ADChnRe.isStartADSap[NowADChn]==TRUE))//若开始采样,并采到最小值
{
ADChnRe.ADMin[NowADChn]=ADChnRe.ADResult[NowADChn]; //AD采样最小值
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -