//-AD模块时钟输入分频值-
#define ADCS_DIV2 (0<<4)
#define ADCS_DIV8 (1<<4)
#define ADCS_DIV32 (2<<4)
#define ADCS_RC (3<<4)
#define ADCS_DIV4 (4<<4)
#define ADCS_DIV16 (5<<4)
#define ADCS_DIV64 (6<<4)
//--AD通道选择------
#define ADC_Chanel0 (0x00<<2)
#define ADC_Chanel1 (0x01<<2)
#define ADC_Chanel2 (0x02<<2)
#define ADC_Chanel3 (0x03<<2)
#define ADC_Chanel4 (0x04<<2)
#define ADC_Chanel5 (0x05<<2)
#define ADC_Chanel6 (0x06<<2)
#define ADC_Chanel7 (0x07<<2)
#define ADC_Chanel8 (0x08<<2)
#define ADC_Chanel9 (0x09<<2)
#define ADC_Chanel10 (0x0A<<2)
#define ADC_Chanel11 (0x0B<<2)
//*************************************
// 函数名称:PicAd_Init
// 函数功能:ad初始化
// 入口参数:AD模块时钟输入分频值
// 出口参数:无
//
//***************************************
void PicAd_Init(uint8 Prsc)
{
ADCON0 = 0X31 ;//启动AD电路 不接任何通道
ADCON1 = Prsc ;//转换结果左对齐
}
//*************************************
// 函数名称:AdcSwitch
// 函数功能:转换某一通道的AD值
// 入口参数:AD通道选择
// 出口参数:无
//***************************************
void AdcSwitch(uint8 Chanal)
{
ADCON0 = (ADCON0 & 0xc3) | Chanal ;
asm("nop");asm("nop");asm("nop");asm("nop");
asm("nop");asm("nop");asm("nop");asm("nop");
GO_nDONE = 1 ; //启动转换
while((ADCON0 & 0x02) != 0) ;
}
//------实例应用-------
void main(void)
{
//ADC 初始化设置
PicAd_Init(ADCS_DIV32) ;//AD模块时钟输入频率 OK
while(1)
{
while(!F_10MS);
F_10MS = 0 ;
AdcSwitch(ADC_Chanel4) ;//AN4 通道转换
g_u8Tmp1 = ADRESH ; //读取转换结果
}
}