先来看看总的程序配置流程:
第一步:选择通道,设置对齐方式
根据以上寄存器配置如下:
CHS3 = (4 >> 3)&0x01;
CHS2 = (4 >> 2)&0x01;
CHS1 = (4 >> 1)&0x01;
CHS0 = (4 >> 0)&0x01; //通道选择
ADLR =1;//对齐方式
第二步:对应通道配置为输入模式
据以上寄存器配置如下:
ANS4 = 1; //模拟输入根
第三步:失能失调校准
根据以上寄存器配置如下: ADCCALIEN = 0;
第四步:配置AD工作电流大小
因为第三步是失能校准,所以这一步可以不用配置
第五步:选择参考电压和采样时钟,打开A/D转换
根据以上寄存器配置如下:
VCFG1 = 1; VCFG0 = 1; //参考电压选择 VREOE = 0;//禁止输出参考电压 VREEN = 1;//使能参考电压 ADCS2 = 0; ADCS1 = 0; ADCS0 = 0; //时钟位选择 ADEN = 1; //使能AD
第六步:中断配置
这里不用中断,所以配置如下:
ADIE = 0; //失能中断
第七到第八步:A/D转换启动
根据以上寄存器配置如下:
START = 1;
第九步:查询是否完成
根据以上寄存器配置如下:
while(START); //START为0的时候转换完成
第十步:读取数据
根据以上寄存器配置如下:
ValueH = ADCDATAH; ValueL = ADCDATAL;//根据对齐方式
以下程序是实现当AD采样值大于2000时P05输出高,采样值低于2000时,P05输出低:
#include<KF8V111.h>
void PORT_Init(void) //I/O口配置
{
TR05 = 0; //P05配置为为输出模式
P0LR5 = 0; //P05初始化输出为0 }
void ADC_Init(void)
{
CHS3 = (4 >> 3)&0x01;
CHS2 = (4 >> 2)&0x01;
CHS1 = (4 >> 1)&0x01;
CHS0 = (4 >> 0)&0x01; //通道选择
ADLR =1;//对齐方式
ANS4 = 1; //模拟输入
ADCCALIEN = 0;
VCFG1 = 1;
VCFG0 = 1; //参考电压选择
VREOE = 0;//禁止输出参考电压
VREEN = 1;//使能参考电压
ADCS2 = 0;
ADCS1 = 0;
ADCS0 = 0; //时钟位选择
ADEN = 1; //使能
ADIE = 0; //失能中断 }
void main()
{
unsigned int ValueH,ValueL,Value;
PORT_Init();
ADC_Init();
while(1)
{
START = 1; //开始转换 while(START); //START为0的时候转换完成 ValueH = ADCDATAH; ValueL = ADCDATAL; //根据对齐方式 Value = (ValueH << 8); Value += ValueL;
if(Value>2000) {
P0LR5 = 1;
} else {
P0LR5 = 0;
}
} }
|