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