【Dome -- ADC】
//======================================//
// ADC设置
//案例为:
//通过给定的参考电压(VDD),对待测电压(PA4)进行测量
//并设置ADC的时钟来控制ADC数据转换的快慢(建议ADC时钟设置为500KHz)
//测量的结果从ADC数据寄存器中读取,即ADCRH和ADCRL
//注意:
//得到的结果为寄存器中的数据,并非电压值
//电压值计算:参考电压(VDD)/0xFFF=待测电压(PA4)/寄存器读取数据(ADCRH和ADCRL)
//======================================//
#include "extern.h"
void ADC_init(void)
{
//注:选择的通道需设置为输入,无上拉电阻,停用数字输入使能;
PAC.4 = 0;
PAPH.4 = 0;
PADIER = 0b1110_1001;
$ ADCC Enable,PA4; //启用ADC功能,通道选择(AD转换的输入信号)
//启用:Enable;停用:Disable
//通道选择:PB0, PB1, PB2, PB3, PB4, PB5, PB6, PB7, PA3, PA4, PA0, GND, ADC
$ ADCM /2; //时钟源选择(系统时钟/X)
//X有/1, /2, /4, /8, /16, /32, /64, /128
//注:时钟源选择建议选用500K(/2)
$ ADCRGC VDD; //选择ADC输入信号的参考电压,通道F选择器,通道F的Band-gap参考电压选择(注:通道F是GPCC选择ADC模式时才有用)
//选择参考电压有:VDD, 2V, 3V, 4V, PB1, BG,通道F选择器:ADC_BG(Band-gap参考电压), ADC_VDD/4(0.25*VDD)
//通道F的Band-gap参考电压选择:BG_1V2, BG_2V, BG_3V, BG_4V(注:仿真器固定只有1.2V)
.delay 400; //延时400us
//注:根据ADC参考高电压及时钟源选择,参考datasheet延迟
}
void ADC_data(void)
{
//开始ADC转换
AD_START = 1; //开始ADC转换
while(!AD_DONE) //等待ADC转换结果
NULL;
//当AD_DONE高电位时读取ADC结果
word data;
data$0 = ADCRL; //将ADC的值赋给data
data$1 = ADCRH;
data = data >> 4; //12 bit ADC
}
void FPPA0 (void)
{
.ADJUST_IC SYSCLK=IHRC/16, IHRC=16MHz, VDD=3.3V;
while (1)
{
nop;
}
}
void Interrupt (void)
{
pushaf;
if (Intrq.T16)
{ // T16 Trig
// User can add code
Intrq.T16 = 0;
//...
}
popaf;
}