九齐单片机NY8B062D之ADC 使用

NY8B062D提供 11+1 通道 12 位ADC模数转换器。 可将模拟信号转换为 12 位数字。

参考电压:外部PA0输入或者内部VDD,4V,3V,2V提供,根据采样电压的范围选取;
模拟输入通道:外部输入通道PA0~PA4 PB0~PB5 ,内部可选择1/4 VDD

ADC操作顺序

依序设定:
①-ADC时钟(ADCLK),
②-ADC采样时间,
③- ADC位数,
④-ADC参考电压(寄存器ADVREFH),
⑤-选择模拟输入通道并将寄存器PACON相应位设置为 1,
⑥-再将GCHS位(寄存器ADMD[4]) 与ADEN位(寄存器ADMD[7])
设置为 1。
⑦-在ADEN设置为 1 后必须等待 256us(ADC电路启动时间),
⑧-再将START位(寄存器ADMD[6]) 写 1 来启动ADC模数转换。
⑨- ADC转换尚未完成时, 读取EOC位(寄存器ADMD[5]) 会得到 0。当ADC模数转换完成后会自动将EOC位设置为 1

代码如下:

//----- Initial ADC----- 
ADMD  = C_ADC_En | C_ADC_CH_Dis | C_ADC_PA0 ;	//ADC使能,关闭所有输入通道,选择PA0作为模拟输入通道
ADVREFH = C_Vrefh_VDD; 			//选择参考电压为VDD
ADR   = C_Ckl_Div8; 			//选择ADC时钟 = Fcpu/8
ADCR  = C_Sample_1clk | C_12BIT;	//选择ADC采样时间和ADC位数
PACON = C_PA0_AIN0; 			//选择PA0仅作为ADC模拟输入引脚
ADMDbits.GCHS = 1;			//将GCHS位设置为1
delay(50); 				//等待 256us(ADC电路启动时间)
//-----------------------
while(1)
{
    R_AIN0_DATA=R_AIN0_DATA_LB = 0x00;            
    F_AIN0_Convert(8);     // 进行8次ADC转换
    R_AIN0_DATA <<= 4;     // 将高八位数据左移4位
    R_AIN0_DATA_LB &= 0xF0;    // Only get Bit7~4
    R_AIN0_DATA += R_AIN0_DATA_LB;  // R_AIN0_DATA + R_AIN0_DATA_LB
    R_AIN0_DATA >>=3;     // R_AIN0_DATA 右移三位,相当于除以8
}
/----- Sub-Routine ----- 
void F_AIN0_Convert(char count)
{
   char i;
   ADMD  = 0x90 | C_ADC_PA0;    // 选择PA0作为模拟输入口
   for(i=1;i<=count;i++)
   {         
    ADMDbits.START = 1;     // 开始ADC转换
    F_wait_eoc();           // 等待ADC转换完成
    R_AIN0_DATA_LB += ( 0x0F & ADR); 	//ADC低四位数据
    R_AIN0_DATA    += ADD; 		//ADC高八位数据
   }
}
//-----------------------
void F_wait_eoc(void)
{
   while(ADMDbits.EOC==0)
   ;
}

你可能感兴趣的:(九齐单片机学习记录,单片机,单片机)