自己写的,比较简单,不知道是否合你意
- #include "ADC.h"
- void FVR_Init(void)
- {
- FVRCON B7H; //使能固定参考电压
- FVRCON B5H; //温度指示器使能
- FVRCON B4H; //温度指示器范围选择位
- FVRCON &=(0xFF<<2); //清零ADC参考电压
- FVRCON |=FVR_4096; //配置ADC参考电压
- while(!(FVRCON & 1<<6)); //等待参考电压稳定
- }
- void ADC_Init(void)
- {
- FVR_Init(); //内部参考电压初始化
-
- TRISC B7H; //禁止端口输出驱动器
- TRISC B6H;
-
- ANSELC B7H; //禁止数字输入缓冲器
- ANSELC B6H;
- ADREF=VREF_VDD; //参考电压选择
-
- ADCON0 B7H; //使能ADC
- ADCON0 B4H; //由FRC专用振荡器提供时钟
- ADCON0 B2H; //结果右对齐,即12位结果
- }
- void ADC_Start(unsigned char in)
- {
- ADPCH=in;
- ADCON0 B0H; //启动转换
- }
- unsigned short ADC_Read(void)
- {
- unsigned short adc_data;
- while(ADCON0&1); //等待转换完成,不用清零标志位
- adc_data=ADRESH;
- adc_data<<=8;
- adc_data=adc_data+ADRESL;
- return adc_data;
- }
|