📄 adc0.c
字号:
#include "c8051F020.h"
//-----------------------------------------------------------------------------
// ADC0功能模块
//-----------------------------------------------------------------------------
//
#define SAMPLERATE0 50000 // ADC0采样频率
#define SYSCLK 22118400 // 系统时钟频率Hz
#define NUM_SAMPLES 20 // ADC0采样次数
#define TRUE 1
#define FALSE 0
void ADC0_Init (void) ;
void Timer_Init (int timex,int modex,int count_H,int count_L);
void ADC0_ISR (void);
//-----------------------------------------------------------------------------
// 全局变量
//-----------------------------------------------------------------------------
xdata unsigned samples[NUM_SAMPLES][2]; // ADC0结果数组 进行指针调用
bit ADC0_DONE; // 当NUM_SAMPLES次被采集为真
unsigned * ADC0_function (void)
{
Timer_Init (3,0,SYSCLK/SAMPLERATE0,0x00); // 初始化定时器3溢出作为ADC0采样率
ADC0_Init (); // 初始化ADC
EA = 1; // 允许全部中断
while (1)
{
ADC0_DONE = FALSE;
EIE2 |= 0x02; // 允许ADC0中断
while (ADC0_DONE == FALSE); // 等待采样结果
}
return(samples);
}
/*使用定时器3溢出作为转换开始信号*/
void ADC0_Init (void)
{
ADC0CN = 0x05; // ADC0 禁止; 正常跟踪模式 定时器3溢出ADC0转换开始
// ADC0数据左对齐
REF0CN = 0x03; // 片内 VREF和 VREF 输出缓冲器
AMX0CF = 0X00;
AMX0SL = 0x00; // 选择AIN0作为ADC多路转换输入
ADC0CF = (SYSCLK/2500000) << 3; // ADC转换时钟2.5MHz
ADC0CF &= ~0x07; // PGA增益 = 1
EIE2 &= ~0x02; // 禁止ADC0中断
AD0EN = 1; // 使能ADC0
}
void ADC0_ISR (void) interrupt 15 using 3
{
unsigned temp_samples[NUM_SAMPLES][2]; // 寄存ADC0结果数组
int i;
int tempH;
int tempL;
static unsigned num_samples = 0; // ADC0采样计数器
AD0INT = 0; // 清除ADC0转换结束标志
temp_samples[num_samples][0] = ADC0H; // 读和存储ADC0值
temp_samples[num_samples][1] = ADC0L;
num_samples++; // 更新采样计数器
if (num_samples == NUM_SAMPLES)
{
EIE2 &= ~0x02; // 禁止ADC0中断
for(num_samples=0;num_samples<21;num_samples++)
{
for (i=0;i<21;i++)
{
tempH += temp_samples[i][0];
tempL += temp_samples[i][1]; //采样值做平均 放入samples数据寄存
}
samples[num_samples][0]=tempH/20;
samples[num_samples][1]=tempL/20;
}
num_samples = 0; // 复位采样计数器
ADC0_DONE = 1; // 设置DONE标志
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -