void ADC_Init(void)
{
CMPCON1 |= BIT3; // 打开内部1.2V
ADCON0 = tkc_dis| // 禁用TKC
adc_en| // 使能ADC
tsc_dis| // 禁用TSC
wait_tkrd_dis| // 禁用等待软件读 TKC 数据
freq_sel_div8| // 8分频
scan_mode_dis; // 关闭扫描模式
ADCON1 = accum_sel_8| // 累计8次转换数据
avg_en| // 使能求平均操作
trig_sel_after_adc| // ADC数据转换完成后触发中断
func_flag_adc; // 工作在ADC功能模式
ADCON2 = tkc_lpmod_dis| // 禁用电容传感器低功耗
ses_gap_0_32k_clk| // 0 个‘clk_32k’时钟周期
sta_gap_2tk_clk; // 2 个‘tk_clk’时钟周期
ADSTA = inject_dis| // 注入操作被禁止
iref_adj_6uA| // 参考电流校准6uA
cont_mod_dis| // 禁用ADC连续转换模式
adc_vref_vdd; // ADC 参考电压选择VDD
ADCSOF = asub_dis|
ch_sw_port|
tkc_ofst_0pF;
IE1 |= BIT5;
}
void ADC_GetVal(void)
{
//union16_t adc_val;
ADCON0 |= adc_en; //Disable ADC
ADCON1 |= adc_start;
//while(ADCON1&adc_start);
AdcFlag = 0;
while(!AdcFlag);
//adc_val.u8d[0] = ADDATH;
//adc_val.u8d[1] = ADDATL;
//return adc_val.u16d;
}
void ADC_Channel_Sel(uint16_t channel)
{
union16_t ch;
ch.u16d = channel;
ADCHS1 = ch.u8d[0]; // 高8通道选择
P2ASW = ch.u8d[0]; // 高8通道模拟开关
ADCHS0 = ch.u8d[1]; // 低8通道选择
P1ASW = ch.u8d[1]; // 低8通道模拟开关
}
|