新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PIC單片機C語言程序設(shè)計(14)

PIC單片機C語言程序設(shè)計(14)

作者: 時間:2013-02-05 來源:網(wǎng)絡(luò) 收藏
  十五、Pic單片機的A/D轉(zhuǎn)換

  在電子技術(shù)中,傳感器是一種很重要的器件,傳感器的種類也有多種,如溫度傳感器、光敏傳感器、壓力傳感器……,其特點是能把非電量,如溫度、光度、壓力等轉(zhuǎn)換成相關(guān)的電量(電流或電壓)。這些電量都是模擬量,可用Pic 單片機的A/D 轉(zhuǎn)換,將上述的模擬量轉(zhuǎn)換成數(shù)字量,再將數(shù)字量進行各種處理,如LED、LCD 顯示。

  Pic16F87X 系列單片機, 具有A/D 轉(zhuǎn)換的功能。Pic16F876/873 芯片為28 引腳, 有5 個模擬輸入端的10 位A/D 轉(zhuǎn)換(5 通道);Pic16F877 為40 引腳,有8 個模擬輸入端的10位A/D 轉(zhuǎn)換(8 通道)。Pic16F876/873 芯片的模擬輸入端為AN0~AN3,其引腳是② ~ ⑤腳和⑦腳AN4,幾乎占用了Pic16F876/873 所有的A 口。由于Pic 單片機的端口具有復用功能,所以上述的模擬輸入口不會影響I/O 端口的通用特性。

  上述芯片的A/D 轉(zhuǎn)換,都已模塊化,具有10 位(二進制的)分辨率,所以完全可以滿足大多數(shù)測量精度的要求,此外,還可利用Pic 單片機睡眠狀態(tài)下進行A/D 轉(zhuǎn)換(利用內(nèi)部自帶的RC 振蕩作時鐘),因在睡眠模式下,部分數(shù)字電路的開關(guān)噪聲已停止,所以可獲得更高的A/D 轉(zhuǎn)換精度。

  Pic 單片機的A/D 轉(zhuǎn)換功能的操作,遠比本連載1~13 中介紹的各種功能的C 程序要復雜些,學會編寫A/D 轉(zhuǎn)換的C 程序,也是進一步學習Pic 單片機C 的重要內(nèi)容之一。因為在編輯A/D 轉(zhuǎn)換的C 程序時,會用到芯片內(nèi)部多個專用寄存器(控制模塊),學會相關(guān)模塊的使用方法,可為編輯其它復雜功能的C 程序建立良好的思維方法。

  1.Pic16F87X 的 A/D 轉(zhuǎn)換必備知識

  ⑴ A/D 轉(zhuǎn)換控制寄存器ADCON1

  ADCON1 是8 位的可讀寫的寄存器,如圖59 所示,其功能是A/D 轉(zhuǎn)換時,選擇芯片引腳輸入信號的類型(模擬量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 時, 選擇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 位的二進制數(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 進行選擇, 當令ADFM=1 時,A/D 轉(zhuǎn)換結(jié)果的低8 位存放在ADREL 中;高兩位存放在ADRESH 中;當令ADFM=0 時,A/D 轉(zhuǎn)換結(jié)果的低兩位存放在ADRESL 中,余下的高8 位存放在ADRESH 中,這由C 語言設(shè)計者自由選擇。若對A/D 轉(zhuǎ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)換),當令ADON=1 時,打開的A/D 轉(zhuǎn)換;AD0N=0 時,關(guān)閉A/D 轉(zhuǎn)換。ADCON0 的第1 位, 未使用讀作0。

  ADCON0 的第2 位也是重要的功能位:在ADON=1 時,若令=1,啟動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)換時鐘選擇位,有以下關(guān)系:

  此外,在A/D 轉(zhuǎn)換時,還會用到外圍接口中斷標志寄存器PIR1 的標志位ADIF(Bit6)和外圍接口中斷使能寄存器PIE1 的使能位ADIE。

  當令ADIF=1 時, 代表A/D 轉(zhuǎn)換已完成;ADIF=0 時,A/D 轉(zhuǎn)換未完成。

  當令ADIE=1 時, 打開A/D 轉(zhuǎn)換中斷;ADIE=0 時,關(guān)閉A/D 轉(zhuǎn)換中斷。


上一頁 1 2 3 4 下一頁

評論


相關(guān)推薦

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

關(guān)閉