新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 巧設pic877a單片機的AD轉(zhuǎn)換模塊

巧設pic877a單片機的AD轉(zhuǎn)換模塊

作者: 時間:2016-12-03 來源:網(wǎng)絡 收藏
//由于AD 采樣的值不斷地變化,我們用C語言的關(guān)鍵詞volatile來定義AD采樣過程的臨時變量。

volatile unsigned int ad0_res,ad1_res,ad2_res=0;//存放AD初始化值

本文引用地址:http://m.butianyuan.cn/article/201612/325227.htm

//下面對其進行初始化,為了具有統(tǒng)一性,我將RA、RE口均進行初始化。

/**********************************************************
*AD結(jié)果為10位精度,從0-1023、
*在使用時必設定ADCON1=0X80;存貯形式為((ADRESH<<8)+(ADRESL)).
*AD通道的選擇是從0開始的如:0->RA01->RA1 ....6->RE2.7->RE3
***********************************************************/

void
ad_init (void)
{
INTCON = 0X00;
ADIF = 0X00;
ADCON1 = 0x80;
ADCON0 = 0X81; //十位結(jié)果必須高為8位
TRISA = 0X0FF;//默認為AD輸入

TRISE= 0X0FF;//默認為AD輸入
PORTA = 0X00;
ADON = 1;
}

//這是一個延時函數(shù)

void
delay(unsigned int x)
{
unsigned int a, b;
a = (2*x/8);
for(a; a>0; a--);
for(b=5; b>0; b--);
}

//下面這個函數(shù)就是具體采樣AD的結(jié)果值,它一個很好的妙用

unsigned int //返回一個整型值
read_ADresult(unsigned char channel)//通道轉(zhuǎn)換
{
channel &= 0x07;// 讀出當前通道的值
ADCON0 &= 0x85;// 清所有通道
ADCON0 |= (channel<<3);//10 xxx 001 將當前通道對應的值賦予ADCON0
delay(30);
ADGO = 1;
while(ADGO) continue;
return(ADRESH << 8)+(ADRESL);
}



評論


技術(shù)專區(qū)

關(guān)閉