void ADC_Init(void)
{
P5M0 = 0x00;
P5M1 = 0x20; //P5.5設為ADC5輸入
P_SW2 |= 0x80; //使能訪問XFR,沒有沖突不用關閉
ADCTIM = 0x3f; //設置ADC內部時序
P_SW2 &= 0x7f;
ADCCFG = 0x2f; //設置ADC時鐘為系統時鐘FOSC/2/16,ADC_RES/ADC_RESL轉換結果右對齊
ADC_CONTR = 0x85; //使能ADC模塊,并選擇ADC5通道
//ADC_CONTR |= 0x40; //啟動AD轉換
//EADC = 1; //使能ADC中斷
}
int ADC_Read(void)
{
int res;
ADC_CONTR |= 0x40; //啟動AD轉換
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20)); //查詢ADC完成標志
ADC_CONTR &= ~0x20; //清完成標志
res = (ADC_RES << 8) | ADC_RESL; //讀取ADC結果
ADC_RES=ADC_RESL=0;
return res;
}
float ADC_Result(void)
{
int i=0,res=0,tmp=0;
float result=0.0;
for(i=0;i<8;i++)
{
tmp=ADC_Read(); //查詢方式
res+=tmp;
}
res>>=3; //取平均值
result=5.0*res/1024+BiasVol; //10位ADC
return result;
}
接下來在main()函數初始化,調用即可。 |