一、實驗目的
了解STC單片機ADC的結構;
掌握STC單片機ADC的使用。
二、實驗原理
STC15F2K60S2單片機內含8路10位高速AD轉換器,速度可達30萬次/秒。單片機P1口既可作為普通I/O口,也可作為AD轉換器模擬電壓輸入口。AD轉換器相關的寄存器如表1所示。
表1 ADC轉換相關寄存器
P1ASF | P17ASF | P16ASF | P15ASF | P14ASF | P13ASF | P12ASF | P11ASF | P10ASF |
ADC_CONTR | ADC_POWER | SPEED1 | SPEED0 | ADC_FLAG | ADC_START | CHS2 | CHS1 | CHS0 |
ADC_RES |
|
|
|
|
|
|
|
|
ADC_RESL |
|
|
|
|
|
|
|
|
CLK_DIV PCON2 | MCKO_S1 | MCKO_S0 | ADRJ | Tx_Rx | Tx2_Rx2 | CLKS2 | CLKS1 | CLKS0 |
IE | EA | ELVD | EADC | ES | ET1 | EX1 | ET0 | EX0 |
IP | PPCA | PLVD | PADC | PS | PT1 | PX1 | PT0 | PX0 |
①P1口控制寄存器P1ASF
P1ASF某一位為“1”,P1口對應的引腳設為模擬功能。某一位為“0”,對應的引腳設為普通I/O。
②ADC控制寄存器ADC_CONTR
ADC_POWER=1,打開AD轉換器電源(關閉電源可降低功耗,ADC初次上電需適當延時,再啟動AD轉換)。
SPEED1、SPEED0選擇AD轉換速度。
SPEED1 | SPEED0 | AD轉換時間 |
1 | 1 | 90個時鐘周期 |
1 | 0 | 180個時鐘周期 |
0 | 1 | 360個時鐘周期 |
0 | 0 | 540個時鐘周期 |
ADC_FLAG:AD轉換結束標志,需由軟件清0。
ADC_START:AD轉換啟動控制。
CHS2、CHS1、CHS0:選擇模擬輸入通道P1.0~P1.7。
轉換結果存放在ADC_RES和ADC_RESL寄存器中,當CLK_DIV.5/ADRJ=0時,ADC_RES為結果的高8位,ADC_RESL為結果的低2位(如表2所示)。當CLK_DIV.5/ADRJ=1時,ADC_RES為結果的高2位,ADC_RESL為結果的低8位(如表3所示)。
ADC_RES | RES9 | RES8 | RES7 | RES6 | RES5 | RES4 | RES3 | RES2 |
ADC_RESL | - | - | - | - | - | - | RES1 | RES0 |
ADC_RES |
|
|
|
|
|
| RES9 | RES8 |
ADC_RESL | RES7 | RES6 | RES5 | RES4 | RES3 | RES2 | RES1 | RES0 |
STC15F2K60S2的AD轉換器以Vcc為參考電壓,當ADRJ=0時,10位轉換結果與輸入模擬電壓的關系由式(1)計算:
…………...……………………(1)
如果只取高8位,則由式(2)計算:
……………………………………...…………………(2)
當ADRJ=1時,10位轉換結果與輸入模擬電壓的關系由式(3)計算:
…………………………………(3)
如果單片機Vcc電壓不穩,會引起AD轉換誤差,在實際應用中,可用一路AD采樣外部的基準電壓(如用TL431基準電源),另一路AD采樣被測電壓,按式(4)計算:
………………………………..…………………..(4)
三、實驗環境
Windows XP;
Keil μ Vision 4;
STC-ISP-6.28。
四、實驗內容
1.實驗連線
分別用兩根8芯杜邦線將單片機P2口與J61、單片機P0口與J62連接起來,P0口用于數碼管的位選擇,P2口輸出數碼管的顯示碼。用跳線帽短接JP8、JP9,模擬輸入經過RC濾波(如圖1所示)。用杜邦線連接連接J35和P1.3,單片機通道3采樣模擬輸入電壓。

圖1 ADC模擬輸入濾波電路
2.程序設計
Keil匯編或C語言頭文件REG51.H不包含STC單片機ADC寄存器定義,而編程時需要用到ADC_CONTR、ADC_RES等特殊功能寄存器,STC-ISP軟件提供各種STC單片機的寄存器定義頭文件。在STC-ISP軟件界面,選擇頭文件選項卡,選擇好單片機系列,該系列的寄存定義出現在文本框中,可以復制頭文件內容,也可以保存頭文件(如圖8-2所示)。本實驗可以將頭文件命名為STC15F2K.H,保存到\Keil\C51\INC文件夾中,以后編程時直接用該頭文件替換REG51.H。
AD轉換可以用中斷的方式,也可以用查詢的方式。每次轉換結束,將ADC_RES寄存器和ADC_RESL寄存器內容存入整型變量result。當ADRJ=0時:
int result;
result=(ADC_RES<<2)|(ADC_RESL&3);
vin=result*Vcc/1024; //Vcc單位為毫伏

圖9-2 STC15F2K系列頭文件
3.程序設計
程序經編譯生成HEX文件,再利用STC-ISP軟件將代碼下載到單片機中,調節多圈電位器W3,觀察數碼管顯示值的變化。用數字萬用表核對J35的輸入電壓與數碼管顯示的電壓是否一致。
五、思考題
1. ADC通道2對2.45V基準電壓(J41)采樣,通道3對模擬輸入電壓采樣,根據(4)式計算并顯示被測電壓。
2.如何實現多路電壓檢測并輪流顯示?
以上圖文的Word格式文檔下載(內容和本網頁上的一模一樣,方便保存):
實驗 AD轉換.docx
(104.09 KB, 下載次數: 228)
| 歡迎光臨 (http://www.denmoz.com/bbs/) | Powered by Discuz! X3.1 |