|
|
#include "intrins.h"
/*Declare SFR associated with the ADC */
sfr ADC_CONTR = 0xBC; //ADC控制寄存器
sfr ADC_RES = 0xBD; //AD結(jié)果寄存器
sfr ADC_LOW2 = 0xBE; //AD結(jié)果寄存器 ADC low 2-bit result register
sfr P1ASF = 0x9D; //P1模擬功能設(shè)置寄存器
/*Define ADC operation const for ADC_CONTR*/
#define ADC_POWER 0x80 //ADC電源控制位
#define ADC_FLAG 0x10 //AD轉(zhuǎn)換結(jié)束標(biāo)志位
#define ADC_START 0x08 //AD轉(zhuǎn)換開始控制位
#define ADC_SPEEDLL 0x00 //420時鐘周期轉(zhuǎn)換一次
#define ADC_SPEEDL 0x20 //280時鐘周期轉(zhuǎn)換一次
#define ADC_SPEEDH 0x40 //140時鐘周期轉(zhuǎn)換一次
#define ADC_SPEEDHH 0x60 //70時鐘周期轉(zhuǎn)換一次void Delay(uint n);//延時
void InitADC();//ADC寄存
uchar GetADCResult(uchar ch);//ADC數(shù)據(jù)轉(zhuǎn)換
void Delay1(uint n)//延時
{
uint x;
while (n--)
{
x = 5000;
while (x--);
}
}
void InitADC()//ADC寄存器初始化
{
P1ASF = 0x80; //打開P17 ADC通道
ADC_RES = 0; //Clear previous result
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
Delay1(2); //ADC power-on and delay
}
uchar GetADCResult(uchar ch)//ADC數(shù)據(jù)轉(zhuǎn)換
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;//相應(yīng)置位:電源+420時鐘周期轉(zhuǎn)換一次+通道+轉(zhuǎn)換開始
_nop_(); //適當(dāng)延時
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//等待轉(zhuǎn)換結(jié)束
ADC_CONTR &= ~ADC_FLAG; //清除ADC
return ADC_RES; //返回ADC數(shù)據(jù)
}
|
|