www.pudn.com > dsPIC33_CDROM.rar > AD3.c, change:2012-08-30,size:2017b


#include "P33FJ32GP204.H" 
 
//禁止时钟切换,禁止引脚多次配置,振荡引脚,主振荡器为XT 
_FOSC(FCKSM_CSDCMD & IOL1WAY_ON & OSCIOFNC_OFF & POSCMD_XT) 
//使用用户设定的振荡器启动,初始振荡器为带PLL的主(XT,HS或EC)振荡器 
_FOSCSEL(IESO_OFF & FNOSC_PRIPLL); 
_FICD(JTAGEN_OFF & ICS_PGD2); 
#define P1 _LATC4 
unsigned int AD[2]; 
 
void __attribute__((__interrupt__, auto_psv)) _ADC1Interrupt(void); 
 
int main(void) 
{	//外接4MHz晶振,通过PLL得到总振荡频率80MHz,Fcy=40MHz,Tcy=25ns 
	CLKDIVbits.PLLPRE=0;	// N1=2,此输出为4/2=2MHz,符合0.8MHz~8.0MHz的要求  
	PLLFBDbits.PLLDIV=78; 	// M=80,此输出为2×80≈160MHz,符合100MHz~200MHz的要求 
	CLKDIVbits.PLLPOST=0;	// N2=2,此输出为160/2=80MHz,符合12.5MHz~80MHz的要求 
	while(OSCCONbits.COSC != 0b011);	//等待时钟稳定 
	RCONbits.SWDTEN=0;	//禁止WDT 
//AD转换设置 
	TRISB=0xFFFF; 
	TRISC=0xFFEF; 
  //AD1PCFGL 
  	AD1PCFGL=0xE000;	//AN0-AN12全为模拟脚	 
  //AD1CON1	 
	_AD12B=1;		//12位AD 
	_FORM=0b00;		//AD结果为整数 
	_SSRC=0b010;	//定时器3比较匹配,结束采样立即转换 
	_ASAM=1;		//转换结束即开始采样 
  //AD1CON2 
  	_VCFG=0;		//AD参考电压为电源电压 
  	_CSCNA=0;		//使能扫描 
  	_SMPI=1;		//2次采样后中断 
  	_BUFM=0;		// 
  	_ALTS=1;		//用A、B开关 
  //AD1CON3 
   	_ADRC=0;		//系统时钟作为ADC时钟 
   	_ADCS=4;		//TAD=5×TCY=125ns>117.6ns 
  //AD1CHS0 
  	_CH0NA=0;		//采样多路开关A的CH0的负输入GND 
  	_CH0SA=6;		//采样多路开关A的CH0的正输入为AN6 
  	_CH0NB=0;		//采样多路开关B的CH0的负输入GND 
  	_CH0SB=8;		//采样多路开关B的CH0的正输入为AN8  	 
  //TMR3设置 
  	T3CON=0x0000;	//1:1分频 
  	PR3=39999;		//延时1ms 
  	TMR3=0; 
  	_T3IF=0; 
  	_AD1IF=0; 
  	_AD1IE=1; 
  	_AD1IP=6; 
  	 
  	_IPL=4;		//CPU中断优先级为4 
	_IPL3=0;		//CPU中断优先级≤7 
	_NSTDIS=1;		//禁止嵌套中断 
	_ALTIVT=0;		//使用标准中断向量 
  	T3CONbits.TON=1;	//启动定时器 
  	AD1CON1bits.ADON=1;//启动ADC模块 
	P1=1; 
	_SAMP=1;		//开始采样	 
	while(1);		 
	return(0); 
} 
 
void __attribute__((__interrupt__, auto_psv)) _ADC1Interrupt(void) 
{	P1=~P1; 
	_AD1IF=0; 
	AD[0]=ADC1BUF0; 
	AD[1]=ADC1BUF1; 
}