📄 adc.c
字号:
//**************************************************************************************************************************
#include <c8051F020.h>
#include <stdio.h>
#include "HEAD.H"
//**************************************************************************************************************************
void ADC_Init(void)
{
ADC0CN = 0xC0; // ADC0 Enable,正常跟踪模式, ,右对齐
REF0CN = 0x02; // 基准电压由外部提供(2.5V),
ADC0CF = (SYSCLK/2500000) << 3; // ADC转换时钟2.5MHz
ADC0CF &= ~0x07; // PGA增益 = 1
//EIE2 |= 0x02; // 使能ADC0中断
}
//**************************************************************************************************************************
unsigned int ADC_Average(unsigned char n) //返回采集n次ad的平均值,输入n为通道值,
{
xdata unsigned char i;
xdata unsigned long temp_sum=0;
if(n<10)
AMX0SL = n;
else
AMX0SL = 0;
AD0INT = 0; //软件置零
for(i = 0;i < 2;i++)
{
AD0BUSY = 1; //启动转换,抛弃前5个数据
while(AD0INT == 0);
AD0INT = 0;
}
for(i = 0;i < SAM_NUM; i++) //选用后20个数据
{
AD0BUSY = 1;
while(AD0INT == 0);
temp_sum += (ADC0H*256+ADC0L);
AD0INT = 0;
}
return temp_sum / SAM_NUM;
}
//**************************************************************************************************************************
void ADC_Work(void)
{
xdata unsigned char i;
xdata unsigned int ad[9];
LED3_ON;
for(i=0;i<9;i++)
{
ad[i]=ADC_Average(i);
RTUaddress4[10+i*2]=ad[i]>>8;
RTUaddress4[10+i*2+1]=ad[i];
}
LED3_OFF;
}
//**************************************************************************************************************************
// The End
//**************************************************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -