PIC單片機(jī)C語言程序設(shè)計(jì)(14)
對于A/D 轉(zhuǎn)換程序的初始化一般要經(jīng)過圖62 的幾個步驟。
A/D 轉(zhuǎn)換初始化函數(shù)代碼如下:
void adcsh()
{
TRISA=0X07;// 設(shè)定I/O 口為輸入
ADCON1=0X8a;
//RA0~RA5 設(shè)為模擬口,RA3 接參考電壓。
ADCON0=0X81;
// 通道0,選擇系統(tǒng)時鐘focs/32.
ADRESH=0;
ADRESL=0; // 清空轉(zhuǎn)換結(jié)果寄存器
GIE=1; // 打開總中斷
PEIE=1; // 打開第一外圍中斷屏蔽
ADIE=1; // 打開A/D 中斷
ADIF=0; // 清除A/D 中斷標(biāo)志位。
}
以上流程圖和代碼是采用中斷服務(wù)程序來讀取A/D 轉(zhuǎn)換數(shù)值的,雖然通過查詢標(biāo)志位方式也可以達(dá)到同樣的效果,但是在實(shí)際應(yīng)用中,中斷服務(wù)方式因方便、可靠、節(jié)省芯片運(yùn)行時間而成為常用的編程結(jié)構(gòu)。對于中斷服務(wù)程序,越簡單越好,因PIC 單片機(jī)特殊的堆棧結(jié)構(gòu),不宜在中斷服務(wù)程序內(nèi)作數(shù)據(jù)運(yùn)算和太多調(diào)用函數(shù)的操作,原則是取出值后立即退出中斷,以保證其它的任務(wù)能及時被響應(yīng)。圖63 是中斷服務(wù)流程圖。
圖63
AD 中斷C 語言的基本寫法:
void interrupt AD(void)
// 必須用interrupt 關(guān)鍵詞,編譯器才會判定是中斷服務(wù)程序
{
unsigned int ad_1=0;
if(ADIF==1)
// 判斷A/D 轉(zhuǎn)換中斷標(biāo)志位是否為1 ;
{
ADIF=0;// 清零中斷標(biāo)志位
ad_1=(ADRESH0X03)*256+ ADRESL;
// 讀取A/D 轉(zhuǎn)換結(jié)果,并將低字 節(jié)和高字節(jié)進(jìn)行整合。
}
?。?P> 從以上的代碼看出,C 語言比匯編要簡單得多,進(jìn)入中斷后,標(biāo)志位清零是必須的,返回指令可以不寫,這是最基本的中斷服務(wù)程序。
以下提供在實(shí)際應(yīng)用中的代碼:
AD 初始化函數(shù):
void adcsh()
{
OPTION=OPTION|0x80;// 關(guān)閉弱上拉
TRISC=0X00;
TRISB=0X03;
PORTC=0X00;
ADCON1=0X8a;
// 轉(zhuǎn)換結(jié)果右對齊,RA0~RA5 設(shè)為模擬口,
評論