PIC單片機(jī)C語言程序設(shè)計(jì)(14)
在電子技術(shù)中,傳感器是一種很重要的器件,傳感器的種類也有多種,如溫度傳感器、光敏傳感器、壓力傳感器……,其特點(diǎn)是能把非電量,如溫度、光度、壓力等轉(zhuǎn)換成相關(guān)的電量(電流或電壓)。這些電量都是模擬量,可用Pic 單片機(jī)的A/D 轉(zhuǎn)換,將上述的模擬量轉(zhuǎn)換成數(shù)字量,再將數(shù)字量進(jìn)行各種處理,如LED、LCD 顯示。
Pic16F87X 系列單片機(jī), 具有A/D 轉(zhuǎn)換的功能。Pic16F876/873 芯片為28 引腳, 有5 個(gè)模擬輸入端的10 位A/D 轉(zhuǎn)換(5 通道);Pic16F877 為40 引腳,有8 個(gè)模擬輸入端的10位A/D 轉(zhuǎn)換(8 通道)。Pic16F876/873 芯片的模擬輸入端為AN0~AN3,其引腳是② ~ ⑤腳和⑦腳AN4,幾乎占用了Pic16F876/873 所有的A 口。由于Pic 單片機(jī)的端口具有復(fù)用功能,所以上述的模擬輸入口不會(huì)影響I/O 端口的通用特性。
上述芯片的A/D 轉(zhuǎn)換,都已模塊化,具有10 位(二進(jìn)制的)分辨率,所以完全可以滿足大多數(shù)測量精度的要求,此外,還可利用Pic 單片機(jī)睡眠狀態(tài)下進(jìn)行A/D 轉(zhuǎn)換(利用內(nèi)部自帶的RC 振蕩作時(shí)鐘),因在睡眠模式下,部分?jǐn)?shù)字電路的開關(guān)噪聲已停止,所以可獲得更高的A/D 轉(zhuǎn)換精度。
Pic 單片機(jī)的A/D 轉(zhuǎn)換功能的操作,遠(yuǎn)比本連載1~13 中介紹的各種功能的C 程序要復(fù)雜些,學(xué)會(huì)編寫A/D 轉(zhuǎn)換的C 程序,也是進(jìn)一步學(xué)習(xí)Pic 單片機(jī)C 程序設(shè)計(jì)的重要內(nèi)容之一。因?yàn)樵诰庉婣/D 轉(zhuǎn)換的C 程序時(shí),會(huì)用到芯片內(nèi)部多個(gè)專用寄存器(控制模塊),學(xué)會(huì)相關(guān)模塊的使用方法,可為編輯其它復(fù)雜功能的C 程序建立良好的思維方法。
1.Pic16F87X 的 A/D 轉(zhuǎn)換必備知識(shí)
?、?A/D 轉(zhuǎn)換控制寄存器ADCON1
ADCON1 是8 位的可讀寫的寄存器,如圖59 所示,其功能是A/D 轉(zhuǎn)換時(shí),選擇芯片引腳輸入信號(hào)的類型(模擬量A 或數(shù)字量D),以及A/D 轉(zhuǎn)換結(jié)果存放的格式(見下文)。
圖59
ADCON1 的第6、5、4 位,在A/D 轉(zhuǎn)換中未派上用場,讀作“0”。 ADCON1 的第3、2、1、0 位(Bit3、Bit2、Bit1 和Bit0), 是管理Pic16F87X 引腳功能(A 或D)的選擇(可參看相關(guān)書藉的A/D 轉(zhuǎn)換引腳功能選擇表,因該表占用版面多,這里略去),例如在下文C 程序中,設(shè)ADCON1=0x8a 時(shí), 選擇Pic16F873A 的AN0(RA0)、AN1(RA1)RA4(AN4)、RA5(AN5)為模擬量輸入、(AN6、AN7 為數(shù)字量輸入),AN3、AN2 參考電壓設(shè)置端(十、一)。
⑵ A/D 轉(zhuǎn)換結(jié)果寄存器ADRESH、ADRESL。因Pic16F87X 的A/D 轉(zhuǎn)換值是10 位的二進(jìn)制數(shù)(代碼),而A/D 轉(zhuǎn)換的結(jié)果是存放在指定的結(jié)果寄存器中,因結(jié)果寄存器是8 位的,所以A/D 轉(zhuǎn)換結(jié)果的10 位數(shù), 利用ADRESH存放A/D 的高字節(jié);利用ADRESL 存放A/D的低字節(jié)。存放方法是利用前述的ADCON1( 圖59) 的第7 位(bit)ADFM 進(jìn)行選擇, 當(dāng)令A(yù)DFM=1 時(shí),A/D 轉(zhuǎn)換結(jié)果的低8 位存放在ADREL 中;高兩位存放在ADRESH 中;當(dāng)令A(yù)DFM=0 時(shí),A/D 轉(zhuǎn)換結(jié)果的低兩位存放在ADRESL 中,余下的高8 位存放在ADRESH 中,這由C 語言設(shè)計(jì)者自由選擇。若對A/D 轉(zhuǎn)換代碼的分辨率要求不高(如實(shí)驗(yàn)程序),可取A/D轉(zhuǎn)換的高8 位而舍去低2 位,以使C 程序簡化。
⑶ A/D 轉(zhuǎn)換控制寄存器ADCON0
ADCON0 的功能是用于控制A/D 轉(zhuǎn)換的操作,其相關(guān)位的功能如圖60 所示。
圖60
圖中ADCONO 的第0 位(Bit0),ADON是A/D 轉(zhuǎn)換允許位(俗稱打開A/D 轉(zhuǎn)換),當(dāng)令A(yù)DON=1 時(shí),打開的A/D 轉(zhuǎn)換;AD0N=0 時(shí),關(guān)閉A/D 轉(zhuǎn)換。ADCON0 的第1 位, 未使用讀作0。
ADCON0 的第2 位也是重要的功能位:在ADON=1 時(shí),若令=1,啟動(dòng)A/D 轉(zhuǎn)換;若令=0,A/D 轉(zhuǎn)換完成。
ADCONO 的5~3 位(Bit5、Bit4 和Bit3)CHS2、CHS1、CHS0 是A/D 轉(zhuǎn)換模擬通道的選擇,對Pic16F873A 芯片,有下述關(guān)系:
ADCONO 的第7、6 位即ADCS1和ADCS0,是A/D 轉(zhuǎn)換時(shí)鐘選擇位,有以下關(guān)系:
此外,在A/D 轉(zhuǎn)換時(shí),還會(huì)用到外圍接口中斷標(biāo)志寄存器PIR1 的標(biāo)志位ADIF(Bit6)和外圍接口中斷使能寄存器PIE1 的使能位ADIE。
當(dāng)令A(yù)DIF=1 時(shí), 代表A/D 轉(zhuǎn)換已完成;ADIF=0 時(shí),A/D 轉(zhuǎn)換未完成。
當(dāng)令A(yù)DIE=1 時(shí), 打開A/D 轉(zhuǎn)換中斷;ADIE=0 時(shí),關(guān)閉A/D 轉(zhuǎn)換中斷。
評(píng)論