第11章 DA、AD轉(zhuǎn)換的接口_第1頁
第11章 DA、AD轉(zhuǎn)換的接口_第2頁
第11章 DA、AD轉(zhuǎn)換的接口_第3頁
第11章 DA、AD轉(zhuǎn)換的接口_第4頁
第11章 DA、AD轉(zhuǎn)換的接口_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第第1111章章 AT89S51AT89S51單片機與單片機與D/AD/A、 A/D A/D 轉(zhuǎn)換器的接口轉(zhuǎn)換器的接口1內(nèi)容概要內(nèi)容概要在單片機測控系統(tǒng)中,被測量的溫度、壓力、流量、速在單片機測控系統(tǒng)中,被測量的溫度、壓力、流量、速度等非電物理量,須經(jīng)傳感器先轉(zhuǎn)換成連續(xù)變化的模擬電度等非電物理量,須經(jīng)傳感器先轉(zhuǎn)換成連續(xù)變化的模擬電信號(電壓或電流),模擬電信號必須轉(zhuǎn)換成數(shù)字量后才信號(電壓或電流),模擬電信號必須轉(zhuǎn)換成數(shù)字量后才能在單片機中進行處理。實現(xiàn)模擬量轉(zhuǎn)換成數(shù)字量的器件能在單片機中進行處理。實現(xiàn)模擬量轉(zhuǎn)換成數(shù)字量的器件稱為稱為A/D轉(zhuǎn)換器(轉(zhuǎn)換器(ADC)。單片機處理完畢的數(shù)字量,有)

2、。單片機處理完畢的數(shù)字量,有時需要轉(zhuǎn)換為模擬信號輸出。數(shù)字量轉(zhuǎn)換成模擬量的器件時需要轉(zhuǎn)換為模擬信號輸出。數(shù)字量轉(zhuǎn)換成模擬量的器件稱為稱為D/A轉(zhuǎn)換器(轉(zhuǎn)換器(DAC)。)。211.1 AT89S51單片機與單片機與DAC的接口的接口單片機只能輸出數(shù)字量,但對于控制而言,常需要輸出模單片機只能輸出數(shù)字量,但對于控制而言,常需要輸出模擬量,例如直流電動機的轉(zhuǎn)速控制,這就要求單片機系統(tǒng)應(yīng)擬量,例如直流電動機的轉(zhuǎn)速控制,這就要求單片機系統(tǒng)應(yīng)能夠輸出模擬量,本節(jié)介紹單片機系統(tǒng)如何輸出模擬量。能夠輸出模擬量,本節(jié)介紹單片機系統(tǒng)如何輸出模擬量。目前集成化的目前集成化的DAC芯片較多,設(shè)計者只需合理選用芯片,

3、芯片較多,設(shè)計者只需合理選用芯片,了解它們的功能、引腳外特性以及與單片機的接口設(shè)計即可。了解它們的功能、引腳外特性以及與單片機的接口設(shè)計即可。由于現(xiàn)在部分的單片機芯片中集成了由于現(xiàn)在部分的單片機芯片中集成了D/A轉(zhuǎn)換器,位數(shù)一般在轉(zhuǎn)換器,位數(shù)一般在10位左右,且轉(zhuǎn)換速度也很快,所以單片的位左右,且轉(zhuǎn)換速度也很快,所以單片的DAC開始向高的開始向高的位數(shù)和高轉(zhuǎn)換速度上轉(zhuǎn)變,而低端的位數(shù)和高轉(zhuǎn)換速度上轉(zhuǎn)變,而低端的8位位D/A轉(zhuǎn)換器,面臨被轉(zhuǎn)換器,面臨被淘汰的危險,但在實驗室或某些工業(yè)控制方面,低端淘汰的危險,但在實驗室或某些工業(yè)控制方面,低端8位位DAC的優(yōu)異的性價比還是具有相當大的應(yīng)用空間。的

4、優(yōu)異的性價比還是具有相當大的應(yīng)用空間。 311.1.1 D/A11.1.1 D/A轉(zhuǎn)換器簡介轉(zhuǎn)換器簡介1 1概述概述購買和使用購買和使用D/AD/A轉(zhuǎn)換器時,要注意轉(zhuǎn)換器時,要注意D/AD/A轉(zhuǎn)換器選擇轉(zhuǎn)換器選擇的幾個問的幾個問題。題。(1 1)D/AD/A轉(zhuǎn)換器的輸出形式轉(zhuǎn)換器的輸出形式兩種輸出形式兩種輸出形式, ,一種是一種是電壓輸出電壓輸出, ,另一種是另一種是電流輸出電流輸出。對電。對電流輸出的流輸出的D/AD/A轉(zhuǎn)換器,如需要模擬電壓輸出,可在其輸出端轉(zhuǎn)換器,如需要模擬電壓輸出,可在其輸出端加一個由運算放大器構(gòu)成的加一個由運算放大器構(gòu)成的I-VI-V轉(zhuǎn)換轉(zhuǎn)換電路,將電流輸出轉(zhuǎn)換電路,

5、將電流輸出轉(zhuǎn)換為電壓輸出。為電壓輸出。4(2 2)D/AD/A轉(zhuǎn)換器與單片機的接口形式轉(zhuǎn)換器與單片機的接口形式 單片機與單片機與D/AD/A轉(zhuǎn)換器的連接,早期多采用轉(zhuǎn)換器的連接,早期多采用8 8位數(shù)字量并行位數(shù)字量并行傳輸?shù)牟⑿薪涌冢F(xiàn)在傳輸?shù)牟⑿薪涌?,現(xiàn)在除并行接口外除并行接口外,帶有,帶有串行口的串行口的D/AD/A轉(zhuǎn)轉(zhuǎn)換器品種也不斷增多換器品種也不斷增多。除了通用的。除了通用的UARTUART串行口串行口外,目前較為外,目前較為流行的還有流行的還有I I2 2C C串行口串行口和和SPISPI串行口串行口等。所以在選擇單片等。所以在選擇單片D/AD/A轉(zhuǎn)換器時,要轉(zhuǎn)換器時,要考慮單片機與

6、考慮單片機與D/AD/A轉(zhuǎn)換器的轉(zhuǎn)換器的接口形式接口形式。52 2主要技術(shù)指標主要技術(shù)指標(1 1)分辨率)分辨率指單片機指單片機輸入給輸入給D/AD/A轉(zhuǎn)換器的轉(zhuǎn)換器的單位數(shù)字量的變化單位數(shù)字量的變化,所引起,所引起的的模擬量輸出的變化模擬量輸出的變化,通常,通常定義為定義為輸出滿刻度值與輸出滿刻度值與2 2n n之比。之比。習慣上用輸入數(shù)字量的二進制位數(shù)表示習慣上用輸入數(shù)字量的二進制位數(shù)表示。位數(shù)越多,分辨率越高,即位數(shù)越多,分辨率越高,即D/AD/A轉(zhuǎn)換器對輸入量變化的敏轉(zhuǎn)換器對輸入量變化的敏感程度越高。感程度越高。6例如例如: :8 8位的位的D/AD/A轉(zhuǎn)換器,若滿量程輸出為轉(zhuǎn)換器,

7、若滿量程輸出為10V10V,則分辨率為則分辨率為10V/210V/2n n,分辨率為,分辨率為10V/256=39.1mV10V/256=39.1mV ,即輸入的二進制數(shù)最低,即輸入的二進制數(shù)最低位的變化可引起輸出的模擬電壓變化位的變化可引起輸出的模擬電壓變化39.1mV39.1mV。1LSB=0.391%1LSB=0.391%滿量程滿量程同理:同理:1010位位D/AD/A轉(zhuǎn)換轉(zhuǎn)換1 LSB = 9.77mV = 0.1%1 LSB = 9.77mV = 0.1%滿量程滿量程1212位位D/AD/A轉(zhuǎn)換轉(zhuǎn)換1 LSB = 2.44mV = 0.024%1 LSB = 2.44mV = 0.0

8、24%滿量程滿量程使用時,應(yīng)使用時,應(yīng)根據(jù)對根據(jù)對D/AD/A轉(zhuǎn)換器分辨率轉(zhuǎn)換器分辨率的需要來的需要來選定選定D/AD/A的的位位數(shù)數(shù)。7(2 2)建立時間)建立時間描述描述D/AD/A轉(zhuǎn)換器轉(zhuǎn)換器轉(zhuǎn)換快慢轉(zhuǎn)換快慢的一個參數(shù),用于的一個參數(shù),用于表明轉(zhuǎn)換時間表明轉(zhuǎn)換時間或轉(zhuǎn)換速度或轉(zhuǎn)換速度。其值為從輸入數(shù)字量到輸出達到終值誤差。其值為從輸入數(shù)字量到輸出達到終值誤差 (1/2)LSB(1/2)LSB時所需的時間。時所需的時間。電流輸出電流輸出的轉(zhuǎn)換時間的轉(zhuǎn)換時間較短較短,而,而電壓輸出電壓輸出的轉(zhuǎn)換器,由于要的轉(zhuǎn)換器,由于要加上完成加上完成I-VI-V轉(zhuǎn)換的運算放大器的延遲時間,因此轉(zhuǎn)換的運算放

9、大器的延遲時間,因此轉(zhuǎn)換時間轉(zhuǎn)換時間要長一些要長一些??焖???焖貲/AD/A轉(zhuǎn)換器的轉(zhuǎn)換時間可控制在轉(zhuǎn)換器的轉(zhuǎn)換時間可控制在1 1 s s以下。以下。8 (3 3)轉(zhuǎn)換精度)轉(zhuǎn)換精度 理想情況下,轉(zhuǎn)換精度與分辨率基本一致,位數(shù)越多精理想情況下,轉(zhuǎn)換精度與分辨率基本一致,位數(shù)越多精度越高。度越高。 但由于電源電壓、基準電壓、電阻、制造工藝等各種因但由于電源電壓、基準電壓、電阻、制造工藝等各種因素存在著誤差。嚴格講,素存在著誤差。嚴格講,轉(zhuǎn)換精度與分辨率并不完全一致轉(zhuǎn)換精度與分辨率并不完全一致。只要位數(shù)相同,分辨率則相同,但相同位數(shù)的不同轉(zhuǎn)換器轉(zhuǎn)只要位數(shù)相同,分辨率則相同,但相同位數(shù)的不同轉(zhuǎn)換器轉(zhuǎn)

10、換精度會有所不同。換精度會有所不同。 例如,例如,某種型號的某種型號的8 8位位DACDAC精度為精度為 0.19%0.19%,而另一種型號,而另一種型號的的8 8位位DACDAC精度為精度為 0.05%0.05%。911.1.2 AT89S5111.1.2 AT89S51與與8 8位位D/AD/A轉(zhuǎn)換器轉(zhuǎn)換器08320832的接口設(shè)計的接口設(shè)計1 1DAC0832DAC0832芯片介紹芯片介紹(1 1)DAC0832DAC0832的特性的特性美國國家半導(dǎo)體公司的美國國家半導(dǎo)體公司的DAC0832DAC0832芯片是具有兩個輸入數(shù)據(jù)寄芯片是具有兩個輸入數(shù)據(jù)寄存器的存器的8 8位位DACDAC,

11、它能直接與,它能直接與AT89S51AT89S51單片機連接,主要特性如單片機連接,主要特性如下。下。 分辨率為分辨率為8 8位。位。 電流輸出,建立時間為電流輸出,建立時間為1 1 s s。 可雙緩沖輸入、單緩沖輸入或直接數(shù)字輸入??呻p緩沖輸入、單緩沖輸入或直接數(shù)字輸入。 單一電源供電(單一電源供電(+5V+5V+15V+15V),低功耗,),低功耗,20mW20mW。10(2 2)DAC0832DAC0832的引腳及邏輯結(jié)構(gòu)的引腳及邏輯結(jié)構(gòu)11 圖圖11-1 DAC0832的引腳圖DI0DI0DI7DI7:8 8位數(shù)字信位數(shù)字信號輸入端,號輸入端,與單片機的與單片機的數(shù)據(jù)總線數(shù)據(jù)總線P0P

12、0口相連口相連,用,用于接收單片機送來的待于接收單片機送來的待轉(zhuǎn)換為模擬量的數(shù)字量,轉(zhuǎn)換為模擬量的數(shù)字量,DI7DI7為最高位。為最高位。引腳功能:引腳功能:CSCS* * :片選端,當片選端,當 為低電平時,本芯片被為低電平時,本芯片被選中。選中。ILEILE:數(shù)據(jù)鎖存允許數(shù)據(jù)鎖存允許控制端,高電平有效??刂贫?,高電平有效。WR1WR1* *:第一級輸入寄第一級輸入寄存器寫選通控制,低電存器寫選通控制,低電平有效。當平有效。當 CSCS* *=0=0,ILE=1ILE=1, WR1WR1* *=0=0時,待時,待轉(zhuǎn)換的數(shù)據(jù)信號被鎖存轉(zhuǎn)換的數(shù)據(jù)信號被鎖存到第一級到第一級8 8位輸入寄存位輸入寄

13、存器中。器中。XFERXFER* *:數(shù)據(jù)傳送控制,低電平有效。WR2WR2* *:DAC寄存器寫選通控制端,低電平有效。當 XFERXFER* *=0,WR2WR2* *=0時,輸入寄存器中待轉(zhuǎn)換的數(shù)據(jù)傳入8位DAC寄存器中。I IOUT1OUT1:D/A轉(zhuǎn)換器電流輸出1端I IOUT2OUT2:D/A轉(zhuǎn)換器電流輸出2端,IOUT2+ IOUT1 = 常數(shù)。R Rfbfb:外部反饋信號外部反饋信號輸入端,內(nèi)部已有反輸入端,內(nèi)部已有反饋電阻饋電阻R Rfbfb,根據(jù)需要,根據(jù)需要也可外接反饋電阻。也可外接反饋電阻。V VCCCC:電源輸入端,電源輸入端,在在+5V+5V+15V+15V范圍內(nèi)。

14、范圍內(nèi)。DGNDDGND:數(shù)字信號地。AGNDAGND:模擬信號地,最好與基準電壓共地。 圖圖11-2 DAC0832的邏輯結(jié)構(gòu)12DAC0832內(nèi)部電路如圖圖11-2所示。“8 8位輸入寄存器位輸入寄存器”用于存放單片機送來的數(shù)字量,使輸入數(shù)字量得到緩沖和鎖存,由 LE1*加以控制;“8 8位位DACDAC寄存器寄存器”用于存放待轉(zhuǎn)換的數(shù)字量,由LE2* 控制; “8 8位位D/AD/A轉(zhuǎn)換電路轉(zhuǎn)換電路”受“8位DAC寄存器”輸出的數(shù)字量控制,能輸出和數(shù)字量成正比的模擬電流。因此,需外接I-VI-V轉(zhuǎn)換轉(zhuǎn)換的運算放大器電路,才能得到模擬輸出電壓模擬輸出電壓。132 2AT89S51AT89S

15、51單片機與單片機與DAC0832DAC0832的接口電路設(shè)計的接口電路設(shè)計設(shè)計接口電路時,常用設(shè)計接口電路時,常用單緩沖方式單緩沖方式或或雙緩沖方式雙緩沖方式的單極性的單極性輸出。輸出。(1 1)單緩沖方式)單緩沖方式指指DAC0832DAC0832內(nèi)部的內(nèi)部的兩個數(shù)據(jù)緩沖器兩個數(shù)據(jù)緩沖器有一個有一個處于處于直通直通方式方式,另一個另一個處于受處于受AT89S51AT89S51單片機控制的單片機控制的鎖存方式鎖存方式。在實際應(yīng)用。在實際應(yīng)用中,如果只有一路模擬量輸出,或雖是多路模擬量輸出但并中,如果只有一路模擬量輸出,或雖是多路模擬量輸出但并不要求多路輸出同步的情況下,可采用單緩沖方式。不要

16、求多路輸出同步的情況下,可采用單緩沖方式。14單緩沖方式單緩沖方式的接口電路如的接口電路如圖圖11-311-3。圖圖11-311-3 單緩沖方式下單片機與DAC0832的接口電路15圖圖11-311-3中,由于中,由于DAC0832DAC0832是是8 8位(位( =256=256)的)的D/AD/A轉(zhuǎn)換器,轉(zhuǎn)換器,由基爾霍夫定律列出德方程組可解得由基爾霍夫定律列出德方程組可解得08320832輸出電壓輸出電壓vovo與輸入與輸入數(shù)字量數(shù)字量B B的關(guān)系為的關(guān)系為 顯然,顯然,輸出的模擬電壓輸出的模擬電壓v vo o和輸入的數(shù)字量和輸入的數(shù)字量B B以及基準電壓以及基準電壓V VREFREF成

17、正比成正比,且,且B B為為0 0時,時,v vo o也為也為0 0,輸入數(shù)字量為,輸入數(shù)字量為255255時,時,v vo o為為最大的絕對值輸出,且不會大于最大的絕對值輸出,且不會大于V VREFREF。16REFo256VvB 82【例例11-111-1】根據(jù)根據(jù)圖圖1111-3-3路,編寫路,編寫產(chǎn)生產(chǎn)生如圖如圖11-411-4圖圖11-611-6所示所示的的各種波形程序。各種波形程序。(1 1)編寫產(chǎn)生鋸齒波的程序)編寫產(chǎn)生鋸齒波的程序輸入給輸入給D/AD/A轉(zhuǎn)換器的數(shù)字量從轉(zhuǎn)換器的數(shù)字量從0 0開始,逐次加開始,逐次加1 1,轉(zhuǎn)換器輸出,轉(zhuǎn)換器輸出的模擬量與輸入的數(shù)字量成正比。當輸

18、入數(shù)字量為的模擬量與輸入的數(shù)字量成正比。當輸入數(shù)字量為FFHFFH時,再時,再加加1 1則溢出清則溢出清“0”0”,模擬輸出又為,模擬輸出又為0 0,然后再重復(fù)上述過程,然后再重復(fù)上述過程,如此循環(huán),輸出的波形就是鋸齒波,如圖如此循環(huán),輸出的波形就是鋸齒波,如圖11-411-4所示。實際上,所示。實際上,每一個上升斜邊要分成每一個上升斜邊要分成256256個小臺階,改變延時,則可以改變個小臺階,改變延時,則可以改變鋸齒波的頻率。鋸齒波的頻率。17圖11-4 DAC0832產(chǎn)生的鋸齒波輸出產(chǎn)生鋸齒波的參產(chǎn)生鋸齒波的參考程序如下:考程序如下:#include #include #define DA

19、C0832 XBYTE0 x7fff#define DAC0832 XBYTE0 x7fff/ /* * 0832 0832端口端口地址地址* */ /#define uchar unsigned char#define uchar unsigned char / /* *定義定義ucharuchar代表單字節(jié)無符號數(shù)代表單字節(jié)無符號數(shù)* */ /#define uint unsigned int#define uint unsigned int / /* *定義定義uintuint無符號字無符號字* */ /void stair(void )void stair(void );uchar i

20、uchar i; while(1) while(1)for(i=0for(i=0;i255i255;i+)i+);/ /* *鋸齒波輸出值,最大為鋸齒波輸出值,最大為255255* */ / DAC0832=i; DAC0832=i; / /* *DACDAC轉(zhuǎn)換輸出轉(zhuǎn)換輸出* */ / 19(2)編寫產(chǎn)生圖)編寫產(chǎn)生圖11-5的的三角波三角波程序程序。20圖圖11-5 DAC0832產(chǎn)生的三角波輸出產(chǎn)生三角波的產(chǎn)生三角波的程序如下:程序如下:#include #define DAC0832 XBYTE0 x7fff/* 0832端口地址*/#define uchar unsigned cha

21、r /*定義uchar代表單字節(jié)無符號數(shù)*/void triangle ( ) ;uchar i;while(1) for(i=0;i0;i-); DAC0832=i; /*三角波的下降邊*/21(3 3)編寫產(chǎn)生圖)編寫產(chǎn)生圖11-611-6的矩形波程序。的矩形波程序。產(chǎn)生矩形波的產(chǎn)生矩形波的程序如下:程序如下:#include ad#include #define DAC0832 XBYTE0 x7fff#define DAC0832 XBYTE0 x7fff/ /* * 0832 0832數(shù)據(jù)端口數(shù)據(jù)端口地址地址* */ /#define #define ucharuchar unsig

22、ned char unsigned char / /* *定義定義ucharuchar代表單字節(jié)無符號數(shù)代表單字節(jié)無符號數(shù)* */ /void delay() ;void delay() ;void rectangular ( ) ;uchar i;while(1)DAC0832=0 xaf;/*產(chǎn)生矩形波的上限電平產(chǎn)生矩形波的上限電平*/delay( ) ;/矩形波上限電平的持續(xù)時間矩形波上限電平的持續(xù)時間*/22圖圖11-611-6 DAC0832 DAC0832產(chǎn)生的矩形波輸出產(chǎn)生的矩形波輸出DAC0832=0 x10;/*產(chǎn)生矩形波的下限電平*/delay( ) ; /*矩形波下限電平

23、的持續(xù)時間*/void delay( )uchar i;for(i=0;i0 xff;i+); 程序中上、下限電平的改變,可向DAC0832送不同的數(shù)字量來實現(xiàn)。矩形波高、低電平時的持續(xù)時間,由delay( )的延時程序決定。232雙緩沖方式雙緩沖方式 多路的多路的D/A轉(zhuǎn)換要求同步輸出時,須采用雙緩沖轉(zhuǎn)換要求同步輸出時,須采用雙緩沖同步方式,此時數(shù)字量的輸入鎖存和同步方式,此時數(shù)字量的輸入鎖存和D/A轉(zhuǎn)換輸出轉(zhuǎn)換輸出是分兩步完成的。是分兩步完成的。AT89S51與與DAC0832的雙緩沖的雙緩沖方式的連接如方式的連接如圖圖11-7。 25 圖圖11-7 單片機和兩片單片機和兩片DAC0832

24、的雙緩沖方式接口電路的雙緩沖方式接口電路由圖由圖11-7,電路中用,電路中用P2.5、P2.6、P2.7來進行片選,來進行片選,P2.5=0選通選通1#DAC0832的數(shù)據(jù)輸入,的數(shù)據(jù)輸入,P2.6=0選通選通2#DAC0832的數(shù)據(jù)輸入,的數(shù)據(jù)輸入,P2.7=0時實現(xiàn)兩片時實現(xiàn)兩片DAC0832同時同時進行轉(zhuǎn)換并同步輸出模擬量。所以進行轉(zhuǎn)換并同步輸出模擬量。所以1#DAC0832的數(shù)據(jù)地址的數(shù)據(jù)地址為為0 xdfff (P2.5=0),),2#DAC0832的地址為數(shù)據(jù)的地址為數(shù)據(jù)0 xbfff(P2.6=0)。兩片)。兩片DAC0832同時轉(zhuǎn)換并輸出的地址為同時轉(zhuǎn)換并輸出的地址為0 x7f

25、ff(P2.7=0)。)。 若把圖若把圖11-7中中DAC輸出的模擬電壓輸出的模擬電壓Vx和和Vy來控制來控制X-Y繪繪圖儀,則應(yīng)把圖儀,則應(yīng)把Vx和和Vy分別加到分別加到X-Y繪圖儀的繪圖儀的X通道和通道和Y通道,通道,而而X-Y繪圖儀由繪圖儀由X、Y兩個方向的步進電機驅(qū)動,其中一個電兩個方向的步進電機驅(qū)動,其中一個電機控制繪筆沿機控制繪筆沿X方向運動;另一個電機控制繪筆沿方向運動;另一個電機控制繪筆沿Y26方向運動。因此對方向運動。因此對X-Y繪圖儀的控制有一基本要求:就是兩繪圖儀的控制有一基本要求:就是兩路模擬信號要同步輸出,使繪制的曲線光滑。路模擬信號要同步輸出,使繪制的曲線光滑。 如

26、果不同如果不同 步輸出,例如先輸出步輸出,例如先輸出X通道的模擬電壓,再輸出通道的模擬電壓,再輸出Y通道的模擬電壓,則繪圖筆先向通道的模擬電壓,則繪圖筆先向X方向移動,再向方向移動,再向Y方向移方向移動,此時繪制的曲線就是階梯狀的。通過本例,也就不難理動,此時繪制的曲線就是階梯狀的。通過本例,也就不難理解為什么解為什么DAC設(shè)置雙緩沖方式的目的所在。設(shè)置雙緩沖方式的目的所在。 27 【例例11-2】編寫DAC0832雙緩沖方式的兩路模擬量同步輸出的程序,接口電路如圖11-7,程序如下:#include #include#define DAC083201Addr 0 xdfff /*1#0832

27、的數(shù)據(jù)寄存器地址*/#define DAC083202Addr 0 xbfff /*2#0832的數(shù)據(jù)寄存器地址*/#define DAC0832Addr 0 x7fff /*兩片0832同時轉(zhuǎn)換的端口地址*/#define uchar unsigned char /* uchar代表單個字節(jié)無符號數(shù)*/#define uint unsigned intsbit P25=0 xa5;/*定義P2.5位*/sbit P26=0 xa6;/*定義P2.6位*/sbit P27=0 xa7;/*定義P2.7位*/void writechip1(uchar c0832data);void writec

28、hip2(uchar c0832data);28void transdata(uchar c0832data) ;/*轉(zhuǎn)換數(shù)據(jù)*/void Delay( ) ;/*延時子程序*/ main( )xdata cdigitl1=0/*1#0832待轉(zhuǎn)換的數(shù)字量*/xdata cdigitl2=0/*2#0832待轉(zhuǎn)換的數(shù)字量*/P0=0 xff;/*端口初始化*/P1=0 xff;P2=0 xff;P3=0 xff;Delay();/*延時*/while(1) cdigitl1=0 x80;/*1#0832的地址*/29cdigitl2=0 xff;writechip1(cdigitl1); /*

29、向1#0832寫入數(shù)據(jù)*/writechip2(cdigitl2); /*向2#0832寫入數(shù)據(jù)*/transdata (0 x00); /*同時進行轉(zhuǎn)換*/while(1)void writechip1(uchar c0832data)/*向1#0832芯片寫入數(shù)據(jù)函數(shù)*/*(uchar xdata *)DAC083201Addr)=c0832data;void writechip2(uchar c0832data/*向2#0832芯片寫入數(shù)據(jù)函數(shù)*/*(uchar xdata *)DAC083202Addr)=c0832data; void TransformData(uchar c083

30、2da/*兩片0832芯片同時進行轉(zhuǎn)換的函數(shù)*/*(uchar xdata *)DAC0832Addr)=c0832data; void Delay() /*延時程序*/30uint i;for(i=0;i200;i+);程序說明:程序說明:(1)在調(diào)用函數(shù))在調(diào)用函數(shù)writechip1時只是向時只是向1#0832芯片寫入數(shù)據(jù),芯片寫入數(shù)據(jù),不會寫到不會寫到2#0832中,因為中,因為2#0832沒有被選通,對于函數(shù)沒有被選通,對于函數(shù)writechip2也是同樣道理。也是同樣道理。(2)在調(diào)用函數(shù))在調(diào)用函數(shù)TransformData( )時,函數(shù)參數(shù)可以為任時,函數(shù)參數(shù)可以為任意值,因為

31、將被轉(zhuǎn)換的數(shù)字量已經(jīng)被鎖存到意值,因為將被轉(zhuǎn)換的數(shù)字量已經(jīng)被鎖存到DAC寄存器中。寄存器中。調(diào)用函數(shù)調(diào)用函數(shù)TransformData( )只是發(fā)出啟動第二級轉(zhuǎn)換的只是發(fā)出啟動第二級轉(zhuǎn)換的控制信號,數(shù)據(jù)線上的數(shù)據(jù)不會被鎖存??刂菩盘?,數(shù)據(jù)線上的數(shù)據(jù)不會被鎖存。 (3)程序的)程序的35行對行對DAC0832的的3個端口使用了個端口使用了3個宏定義。個宏定義。例如,將例如,將0832Addr的端口地址的端口地址0 x7fff宏定義為宏定義為DAC0832Addr(第(第5行),是為了定義明確,方便使用和修改。使用該地址向行),是為了定義明確,方便使用和修改。使用該地址向DAC0832寫入時要先進

32、行類型轉(zhuǎn)換。用(寫入時要先進行類型轉(zhuǎn)換。用(uchar xdata*)把)把DAC0832Addr轉(zhuǎn)換為指向轉(zhuǎn)換為指向0 x7fff地址的指針型數(shù)據(jù),再使用指地址的指針型數(shù)據(jù),再使用指針進行間接尋址。這種使用方法是較為經(jīng)典和精簡的代碼風格,針進行間接尋址。這種使用方法是較為經(jīng)典和精簡的代碼風格,初學者可用如下拆分、等價的方式理解這句代碼。初學者可用如下拆分、等價的方式理解這句代碼。 首先,由于宏替換,首先,由于宏替換,(uchar xdata*)DAC0832Addr相當于相當于(uchar xdata*) 0 x0 x7fff,即將,即將0 x7fff強制轉(zhuǎn)換為指向外部數(shù)據(jù)強制轉(zhuǎn)換為指向外部

33、數(shù)據(jù)空間的空間的unsigned char類型的指針,指針內(nèi)容類型的指針,指針內(nèi)容0 x7fff,即指向了,即指向了DAC0832的數(shù)據(jù)轉(zhuǎn)換端口的數(shù)據(jù)轉(zhuǎn)換端口(即兩片即兩片DAC0832的的8位位DAC寄存器,寄存器,見圖見圖11-2) 然后再來看然后再來看*(uchar xdata*)DAC0832Addr),它相當于,它相當于*p,p是指向外部數(shù)據(jù)空間是指向外部數(shù)據(jù)空間0 x7fff的的unsigned char類型指針。類型指針。 最后,最后,*(uchar xdata*)DAC0832Addr)=c0832data意義顯意義顯然為:將然為:將c0832data的值寫入的值寫入DAC08

34、32的數(shù)據(jù)轉(zhuǎn)換端口。的數(shù)據(jù)轉(zhuǎn)換端口。因此,以下兩個代碼段在功能上是等價的。因此,以下兩個代碼段在功能上是等價的。代碼段代碼段1:#define DAC0832Addr 0 x7fff#define uchar unsigned char*(uchar xdata*)DAC0832Addr)=c0832data;代碼段代碼段2:unsigned char unsigned char * *p p;p=0 x7fffp=0 x7fff;* *p=c0832datap=c0832data; 顯然前者比后者有兩個優(yōu)點:首先,代碼段顯然前者比后者有兩個優(yōu)點:首先,代碼段1的意義明確,的意義明確,可讀性和

35、可移植性更強。更重要的是,代碼段可讀性和可移植性更強。更重要的是,代碼段1節(jié)省了數(shù)據(jù)存節(jié)省了數(shù)據(jù)存儲空間,因為它無需使用指針變量,而宏是不占用數(shù)據(jù)存儲儲空間,因為它無需使用指針變量,而宏是不占用數(shù)據(jù)存儲空間的,它只占用程序存儲空間??臻g的,它只占用程序存儲空間。 11.2 AT89S5111.2 AT89S51單片機與單片機與ADCADC的接口的接口11.2.1 A/D11.2.1 A/D轉(zhuǎn)換器簡介轉(zhuǎn)換器簡介1 1A/DA/D轉(zhuǎn)換器概述轉(zhuǎn)換器概述 A/DA/D轉(zhuǎn)換器的轉(zhuǎn)換器的種類很多種類很多,但目前廣泛應(yīng)用在單片機應(yīng)用系,但目前廣泛應(yīng)用在單片機應(yīng)用系統(tǒng)中的主要有統(tǒng)中的主要有逐次比較型轉(zhuǎn)換器逐次

36、比較型轉(zhuǎn)換器和和雙積分型轉(zhuǎn)換器雙積分型轉(zhuǎn)換器。 逐次比較型逐次比較型A/DA/D轉(zhuǎn)換器轉(zhuǎn)換器,在精度、速度和價格上都適中,在精度、速度和價格上都適中,是是最常用的最常用的A/DA/D轉(zhuǎn)換器轉(zhuǎn)換器。 雙積分型雙積分型A/DA/D轉(zhuǎn)換器,具有精度高、抗干擾性好、價格低轉(zhuǎn)換器,具有精度高、抗干擾性好、價格低廉等優(yōu)點,與逐次比較型廉等優(yōu)點,與逐次比較型A/DA/D轉(zhuǎn)換器相比,轉(zhuǎn)換速度較慢,轉(zhuǎn)換器相比,轉(zhuǎn)換速度較慢,近年來在單片機應(yīng)用領(lǐng)域中也得到廣泛應(yīng)用。近年來在單片機應(yīng)用領(lǐng)域中也得到廣泛應(yīng)用。 35A/DA/D轉(zhuǎn)換器轉(zhuǎn)換器按照輸出數(shù)字量的有效位數(shù)分為按照輸出數(shù)字量的有效位數(shù)分為4 4位、位、8 8位、

37、位、1010位、位、1212位、位、1414位、位、1616位并行輸出位并行輸出以及以及BCDBCD碼輸出碼輸出的的3 3位半、位半、4 4位半、位半、5 5位半位半等多種。等多種。目前,除并行輸出目前,除并行輸出A/DA/D轉(zhuǎn)換器外,隨著單片機串行擴展方轉(zhuǎn)換器外,隨著單片機串行擴展方式的日益增多,帶有式的日益增多,帶有同步同步SPISPI串行接口串行接口的的A/DA/D轉(zhuǎn)換器的使用也轉(zhuǎn)換器的使用也逐漸增多。串行輸出的逐漸增多。串行輸出的A/DA/D轉(zhuǎn)換器具有轉(zhuǎn)換器具有占用端口線少、使用占用端口線少、使用方便、接口簡單方便、接口簡單等優(yōu)點。等優(yōu)點。較為典型的串行較為典型的串行A/DA/D轉(zhuǎn)換器

38、為美國轉(zhuǎn)換器為美國TITI公司公司的的TLC549TLC549(8 8位)、位)、TLC1549TLC1549(1010位)以及位)以及TLC1543TLC1543(1010位)和位)和TLC2543TLC2543(1212位)。位)。36 A/D A/D轉(zhuǎn)換器按照轉(zhuǎn)換速度可大致分為轉(zhuǎn)換器按照轉(zhuǎn)換速度可大致分為超高速超高速(轉(zhuǎn)換時間(轉(zhuǎn)換時間1ns1ns)、)、高速高速(轉(zhuǎn)換時間(轉(zhuǎn)換時間1 1 s s)、)、中速中速(轉(zhuǎn)換時間(轉(zhuǎn)換時間1ms1ms)、)、低速低速(轉(zhuǎn)換時間(轉(zhuǎn)換時間1s1s)等幾種不同轉(zhuǎn)換速度的芯片。)等幾種不同轉(zhuǎn)換速度的芯片。為適應(yīng)系為適應(yīng)系統(tǒng)集成的需要,有些轉(zhuǎn)換器還將統(tǒng)

39、集成的需要,有些轉(zhuǎn)換器還將多路轉(zhuǎn)換開關(guān)、時鐘電路、基多路轉(zhuǎn)換開關(guān)、時鐘電路、基準電壓源、準電壓源、2/102/10進制譯碼器進制譯碼器和和轉(zhuǎn)換電路轉(zhuǎn)換電路集成在一個芯片內(nèi)集成在一個芯片內(nèi),為,為用戶提供很多方便。用戶提供很多方便。2 2A/DA/D轉(zhuǎn)換器的主要技術(shù)指標轉(zhuǎn)換器的主要技術(shù)指標(1 1)轉(zhuǎn)換時間和轉(zhuǎn)換速率)轉(zhuǎn)換時間和轉(zhuǎn)換速率A/D完成一次轉(zhuǎn)換所需的時間所需的時間。轉(zhuǎn)換時間的倒數(shù)為轉(zhuǎn)換速率。(2 2)分辨率)分辨率在A/D轉(zhuǎn)換器中,分辨率是衡量A/D轉(zhuǎn)換器能夠分辨出輸入模能夠分辨出輸入模擬量最小變化程度的技術(shù)指標擬量最小變化程度的技術(shù)指標。分辨率取決于A/DA/D轉(zhuǎn)換器的轉(zhuǎn)換器的位數(shù)位

40、數(shù),所以習慣上用輸出的二進制位數(shù)或BCD碼位數(shù)表示。例如,例如,A/D轉(zhuǎn)換器AD1674AD1674的滿量程輸入電壓為5V,可輸出12位二進制數(shù),即用212個數(shù)進行量化,其分辨率分辨率為為1LSB1LSB,即:5V/212=1.22mV,其分辨率為12位,或A/D轉(zhuǎn)換器能分辨出輸入電壓1.22mV的變化。38 量化過程引起的誤差稱為量化誤差量化誤差。是由于有限位數(shù)字量有限位數(shù)字量對模擬量進行量化對模擬量進行量化而引起的誤差。理論上規(guī)定為一個單位分辨率的-1/2 - +1/2LSB ,提高A/D位數(shù)既可以提高分辨率,又能夠減少量化誤差。(3 3)轉(zhuǎn)換精度)轉(zhuǎn)換精度 轉(zhuǎn)換精度定義為一個實際A/D轉(zhuǎn)

41、換器與一個理想A/D轉(zhuǎn)換器在量化值上的差值,可用絕對誤差或相對誤差表示。39A A、B B、C C與與ALEALE:控制8路模擬輸入通道的切換。A、B、C分別與單片機的三條地址線相連,三三位編碼對應(yīng)位編碼對應(yīng)8 8個通道地址端口個通道地址端口。C C、B B、A = 000A = 000111111分別對應(yīng)IN0IN0IN7IN7通道的地址。各路模擬輸入間切換可改變C、B、A引腳的編碼來實現(xiàn)。11.2.2 AT89S5111.2.2 AT89S51與逐次比較型與逐次比較型A/DA/D轉(zhuǎn)換器轉(zhuǎn)換器ADC0809ADC0809的接口的接口1 1ADC0809ADC0809引腳及功能引腳及功能 逐次

42、比較型8路模擬輸入、8位數(shù)字量輸出的A/D轉(zhuǎn)換器40圖圖11-9 ADC0809的引腳圖共共2828引腳,雙列直插式封裝引腳,雙列直插式封裝。引腳功能如下:n IN0 IN0IN7IN7:8路模擬信號輸入端。n D0 D0D7D7:轉(zhuǎn)換完畢的8位數(shù)字量輸出端。OEOE、STARTSTART、CLKCLK:OE為輸出允許端,START為啟動信號輸入端,CLK為時鐘信號輸入端。EOCEOC:轉(zhuǎn)換結(jié)束輸出信號。當A/D轉(zhuǎn)換開始轉(zhuǎn)換時,該引腳為低電平,當A/D轉(zhuǎn)換結(jié)束時,該引腳為高電平。 VRVR(+ +)、)、VRVR():):基準電壓輸入端。 2 2ADC0809ADC0809結(jié)構(gòu)及轉(zhuǎn)換原理結(jié)構(gòu)及

43、轉(zhuǎn)換原理 結(jié)構(gòu)如結(jié)構(gòu)如圖圖11-1911-19。采用逐次比較法完成。采用逐次比較法完成A/DA/D轉(zhuǎn)換,單一轉(zhuǎn)換,單一+5V+5V電電源供電。片內(nèi)帶有鎖存功能的源供電。片內(nèi)帶有鎖存功能的8 8選選1 1模擬開關(guān),由模擬開關(guān),由C C、B B、A A的編的編碼碼來決定來決定所選的通道所選的通道。完成一次轉(zhuǎn)換需。完成一次轉(zhuǎn)換需100100 s s左右左右(轉(zhuǎn)換時間(轉(zhuǎn)換時間與與CLKCLK腳的時鐘頻率有關(guān)),具有輸出腳的時鐘頻率有關(guān)),具有輸出TTLTTL三態(tài)鎖存緩沖器,三態(tài)鎖存緩沖器,可直接連到單片機數(shù)據(jù)總線上。通過適當?shù)耐饨与娐?,可對可直接連到單片機數(shù)據(jù)總線上。通過適當?shù)耐饨与娐?,可? 05

44、V5V的模擬信號進行轉(zhuǎn)換。的模擬信號進行轉(zhuǎn)換。4142圖圖11-10 ADC0809結(jié)構(gòu)框圖3 3AT89S51AT89S51單片機與單片機與ADC0809ADC0809的接口的接口單片機單片機如何控制如何控制ADCADC開始轉(zhuǎn)換開始轉(zhuǎn)換,如何得知轉(zhuǎn)換結(jié)束如何得知轉(zhuǎn)換結(jié)束以及以及如如何讀入轉(zhuǎn)換結(jié)果何讀入轉(zhuǎn)換結(jié)果??刂瓶刂艫DC0809ADC0809的的轉(zhuǎn)換過程轉(zhuǎn)換過程:先選擇:先選擇ADC0809ADC0809一個模擬輸入通一個模擬輸入通道,然后使單片機的道,然后使單片機的WRWR* *信號有效,產(chǎn)生一個啟動脈沖。信信號有效,產(chǎn)生一個啟動脈沖。信號給號給ADC0809ADC0809的的STAR

45、TSTART腳,對選中通道轉(zhuǎn)換。腳,對選中通道轉(zhuǎn)換。當轉(zhuǎn)換結(jié)束后,當轉(zhuǎn)換結(jié)束后,08090809發(fā)出轉(zhuǎn)換結(jié)束發(fā)出轉(zhuǎn)換結(jié)束EOCEOC(高)信號,該信號可供查詢,也可(高)信號,該信號可供查詢,也可反相后作為向中斷請求信號反相后作為向中斷請求信號;當單片機發(fā)出讀控制信號,通;當單片機發(fā)出讀控制信號,通過邏輯電路控制過邏輯電路控制OEOE端為高電平,把轉(zhuǎn)換完畢的數(shù)字量讀入到端為高電平,把轉(zhuǎn)換完畢的數(shù)字量讀入到存入到存儲器中。存入到存儲器中。 43單片機讀取轉(zhuǎn)換結(jié)果時,可采用單片機讀取轉(zhuǎn)換結(jié)果時,可采用查詢查詢和和中斷控制中斷控制兩種方式。兩種方式。 查詢方式查詢方式是在單片機把啟動信號送到是在單片

46、機把啟動信號送到ADCADC之后,執(zhí)行其之后,執(zhí)行其他程序,同時他程序,同時對對ADC0809ADC0809的的EOCEOC腳不斷進行檢測腳不斷進行檢測,以查詢,以查詢ADCADC變換是否已經(jīng)結(jié)束,如查詢到變換已經(jīng)結(jié)束,則讀入轉(zhuǎn)換完變換是否已經(jīng)結(jié)束,如查詢到變換已經(jīng)結(jié)束,則讀入轉(zhuǎn)換完畢的數(shù)據(jù)。畢的數(shù)據(jù)。 中斷控制方式中斷控制方式是在啟動信號送到是在啟動信號送到ADCADC之后,單片機執(zhí)行之后,單片機執(zhí)行其他程序。其他程序。ADC0809ADC0809轉(zhuǎn)換結(jié)束并向單片機發(fā)出中斷請求信號,轉(zhuǎn)換結(jié)束并向單片機發(fā)出中斷請求信號,單片機響應(yīng)此中斷請求,進入中斷服務(wù)程序,讀入轉(zhuǎn)換完畢單片機響應(yīng)此中斷請求,

47、進入中斷服務(wù)程序,讀入轉(zhuǎn)換完畢的數(shù)據(jù)。的數(shù)據(jù)。 中斷控制方式效率高,特適合于轉(zhuǎn)換時間較長的中斷控制方式效率高,特適合于轉(zhuǎn)換時間較長的ADCADC。44書上圖書上圖11-1111-11為為AT89S51AT89S51與與ADC0809ADC0809中斷方式的接口電路。中斷方式的接口電路。 圖11-12 ADC0809與AT89S51查詢式接口 A/D轉(zhuǎn)換器在轉(zhuǎn)換時需要基準電壓,基準電壓要單獨用高轉(zhuǎn)換器在轉(zhuǎn)換時需要基準電壓,基準電壓要單獨用高精度穩(wěn)壓電源供給,其電壓的變化要小于精度穩(wěn)壓電源供給,其電壓的變化要小于1LSB,這是保證,這是保證轉(zhuǎn)換精度的基本條件。否則當被轉(zhuǎn)換的輸入電壓不變,而基轉(zhuǎn)換精

48、度的基本條件。否則當被轉(zhuǎn)換的輸入電壓不變,而基準電壓的變化大于準電壓的變化大于1LSB,也會引起,也會引起A/D轉(zhuǎn)換器輸出的數(shù)字量轉(zhuǎn)換器輸出的數(shù)字量變化。變化。 由于由于ADC0809片內(nèi)無時鐘,可利用片內(nèi)無時鐘,可利用AT89S51提供的提供的ALE信號經(jīng)信號經(jīng)D觸發(fā)器二分頻后獲得時鐘信號,觸發(fā)器二分頻后獲得時鐘信號,ALE腳的頻率是腳的頻率是AT89S51時鐘頻率的時鐘頻率的1/6(但要注意,每當訪問外部數(shù)據(jù)存(但要注意,每當訪問外部數(shù)據(jù)存儲器時,將少一個儲器時,將少一個ALE脈沖)。脈沖)。46 由于ADC0809具有輸出三態(tài)鎖存器,其8位數(shù)據(jù)輸出引腳D0D7可直接與單片機的P0口相連。

49、地址譯碼引腳C、B、A分別與地址總線的低三位A2、A1、A0相連,以選通IN0IN7中的一個通道。 在啟動啟動A/D轉(zhuǎn)換轉(zhuǎn)換時,由單片機的寫信號WR* 和P2.7控制ADC的地址鎖存和轉(zhuǎn)換啟動,由于由于ALE和和START連在一起連在一起,因此ADC0809在鎖存通道地址的同時,啟動并進行轉(zhuǎn)換。在讀取轉(zhuǎn)換結(jié)果時,用低電平的讀信號 和P2.7引腳經(jīng)一級“或非門”后產(chǎn)生的正脈沖作為OE信號,用來打開三態(tài)輸出鎖存器。47 (1)中斷方式)中斷方式 【例例11-3】單片機與單片機與ADC0809中斷方式接口電路如中斷方式接口電路如圖圖11-11。ADC0809啟動轉(zhuǎn)換后,轉(zhuǎn)換結(jié)束引腳啟動轉(zhuǎn)換后,轉(zhuǎn)換結(jié)

50、束引腳EOC(End Of Converge)為低電平,當)為低電平,當A/D轉(zhuǎn)換結(jié)束時轉(zhuǎn)換結(jié)束時EOC腳變?yōu)楦唠娖?,腳變?yōu)楦唠娖?,?jīng)取反后作為外中斷請求信號觸發(fā)單片機中斷,在中斷服務(wù)程經(jīng)取反后作為外中斷請求信號觸發(fā)單片機中斷,在中斷服務(wù)程序中讀取序中讀取A/D轉(zhuǎn)換的結(jié)果。轉(zhuǎn)換的結(jié)果。 程序設(shè)計:對程序設(shè)計:對8路模擬輸入依次轉(zhuǎn)換,并把轉(zhuǎn)換結(jié)果依次存路模擬輸入依次轉(zhuǎn)換,并把轉(zhuǎn)換結(jié)果依次存入外部入外部RAM的的0 x20000 x2007單元。本例采用兩個指單元。本例采用兩個指 48針變量:針變量:*ADCstart和和*ADCdata,分別指向,分別指向0809的端口地的端口地址址0 x7ff

51、f和外部和外部RAM單元地址單元地址0 x20000 x2007。在。在main( )函數(shù)中通過賦值語句函數(shù)中通過賦值語句“*ADC=i;”語句啟動轉(zhuǎn)換,結(jié)束時語句啟動轉(zhuǎn)換,結(jié)束時產(chǎn)生中斷請求,在中斷函數(shù)產(chǎn)生中斷請求,在中斷函數(shù)int1()中,通過賦值語句()中,通過賦值語句“tmp=*ADCdata;”和和“*ADCdata= tmp;”讀取讀取A/D轉(zhuǎn)轉(zhuǎn)換結(jié)果值并存儲到外部換結(jié)果值并存儲到外部RAM單元中去。單元中去。 參參考程序:考程序:49#include unsigned char xdata *ADCstart;/* 定義的定義的0809啟動端口地址指針啟動端口地址指針*/unsi

52、gned char xdata *ADCdata;/* 定義存放轉(zhuǎn)換結(jié)果的外部數(shù)據(jù)緩沖區(qū)定義存放轉(zhuǎn)換結(jié)果的外部數(shù)據(jù)緩沖區(qū)指針指針*/unsigned char ivoid main( ); ADCstart=0 x7fff;ADCdata=0 x2000;i=8EA=1;EX1=1;IT1=1 ;/*外中斷允許,跳沿觸發(fā)方式外中斷允許,跳沿觸發(fā)方式*/*ADCstart=i;/*啟動啟動A/D轉(zhuǎn)換轉(zhuǎn)換*/while(1);50void int1( ) interrupt 2 /*外中斷外中斷1的中斷服務(wù)函數(shù)的中斷服務(wù)函數(shù)*/unsigned char temp; temp=*ADCstart;

53、/*讀入轉(zhuǎn)換結(jié)果到讀入轉(zhuǎn)換結(jié)果到temp中中*/*ADCdata=temp; /*轉(zhuǎn)換結(jié)果存入到外部轉(zhuǎn)換結(jié)果存入到外部RAM中中*/ADCdata+/*外部外部RAM地址指針增地址指針增1 */i-;/*ADC通道號減通道號減1 */*ADCstart=i; /*啟動下一啟動下一ADC通道通道*/ 在實際應(yīng)用中,除可采用指針變量實現(xiàn)對內(nèi)存地址的直接操在實際應(yīng)用中,除可采用指針變量實現(xiàn)對內(nèi)存地址的直接操作外,作外,C51編譯器還提供了一組關(guān)于訪問絕對地址的預(yù)定義宏編譯器還提供了一組關(guān)于訪問絕對地址的預(yù)定義宏“absacc.h”,利用它可以十分方便地實現(xiàn)對任意內(nèi)存空間直,利用它可以十分方便地實現(xiàn)對

54、任意內(nèi)存空間直接操作。采用預(yù)定義宏接操作。采用預(yù)定義宏“absacc.h”,將上面程序改寫如下:,將上面程序改寫如下: 51#include #include/*包含絕對地址操作預(yù)定義宏的頭文件包含絕對地址操作預(yù)定義宏的頭文件*/#define ADCstart 0 x7fff /*啟動轉(zhuǎn)換端口地址啟動轉(zhuǎn)換端口地址 */#define ADCdata 0 x2000 /*定義外部數(shù)據(jù)緩沖區(qū)的首地址定義外部數(shù)據(jù)緩沖區(qū)的首地址*/unsigned char ivoid main( );i=8;/*對對8個模擬輸入通道進行轉(zhuǎn)換個模擬輸入通道進行轉(zhuǎn)換*/EA=1;EX1=1;IT1=1 ;/*中斷允許

55、中斷允許*/XBYTEADCstart = i;/*啟動轉(zhuǎn)換啟動轉(zhuǎn)換*/while(i);/*等待等待8個通道轉(zhuǎn)換完畢個通道轉(zhuǎn)換完畢*/void int1( ) interrupt 2 /*外中斷外中斷1的中斷服務(wù)函數(shù)的中斷服務(wù)函數(shù)*/52 unsigned char temp;temp=XBYTEADCstart;/*讀取讀取A/D轉(zhuǎn)換結(jié)果轉(zhuǎn)換結(jié)果*/i-;/*通道號減通道號減1*/XBYTEADCdata+i=tmp;/*轉(zhuǎn)換結(jié)果存儲到數(shù)據(jù)緩沖器轉(zhuǎn)換結(jié)果存儲到數(shù)據(jù)緩沖器*/XBYTEADCstart= i; /*啟動下一個模擬通道開始轉(zhuǎn)換啟動下一個模擬通道開始轉(zhuǎn)換*/ (2 2)查詢方式)

56、查詢方式 單片機把啟動信號送到單片機把啟動信號送到ADCADC之后,執(zhí)行其他程序,同時對之后,執(zhí)行其他程序,同時對ADC0809ADC0809的的EOCEOC腳不斷進行檢測,以查詢腳不斷進行檢測,以查詢ADCADC變換是否已經(jīng)結(jié)束,變換是否已經(jīng)結(jié)束,如查詢到變換已經(jīng)結(jié)束,則讀入轉(zhuǎn)換完畢的數(shù)據(jù)。如查詢到變換已經(jīng)結(jié)束,則讀入轉(zhuǎn)換完畢的數(shù)據(jù)。 ADC0809 ADC0809與與AT89S51AT89S51的查詢方式接口如的查詢方式接口如圖圖11-1211-12。53圖圖11-12 ADC0809與與AT89S51單片機的查詢方式接口單片機的查詢方式接口讀者可對讀者可對【例例11-3】的程序進行改動,

57、編寫出查詢方式的程序。的程序進行改動,編寫出查詢方式的程序。 11.3 89S51單片機與單片機與V/F轉(zhuǎn)換器的接口轉(zhuǎn)換器的接口在某些要求數(shù)據(jù)在某些要求數(shù)據(jù)長距離傳輸長距離傳輸,精確度要求較高的場合,采用一般的A/D轉(zhuǎn)換技術(shù)有多不便,可使用使用V/F轉(zhuǎn)換器代替轉(zhuǎn)換器代替A/D器件器件。V/F轉(zhuǎn)換器是把電壓信號電壓信號轉(zhuǎn)變?yōu)檗D(zhuǎn)變?yōu)轭l率信號頻率信號的器件的器件,有良好的精度、線性和積分輸入特點,此外,它的應(yīng)用電路簡單,外圍元件性能要求不高,適應(yīng)環(huán)境能力強,轉(zhuǎn)換速度不低于一般的雙積分型A/D器件,且價格低,因此V/F轉(zhuǎn)換技術(shù)廣泛廣泛用于非快速的用于非快速的A/D轉(zhuǎn)換過程中轉(zhuǎn)換過程中。55V/F轉(zhuǎn)換器

58、與單片機接口有以下特點轉(zhuǎn)換器與單片機接口有以下特點:(1)接口簡單、占用單片機硬件資源少)接口簡單、占用單片機硬件資源少。產(chǎn)生的頻率信號可輸入單片機的一根I/O口線或作為中斷信號輸入及計數(shù)信號輸入等。(2)抗干擾性能好)抗干擾性能好。用V/F轉(zhuǎn)換器實現(xiàn)A/D轉(zhuǎn)換,就是頻率計數(shù)的過程,相當于在計數(shù)時間內(nèi)對頻率信號進行積分,因而有較強的抗干擾能力。另外可采用光電耦合器連接V/F轉(zhuǎn)換器與單片機之間的通道,實現(xiàn)光電隔離。(3)便于遠距離傳輸。)便于遠距離傳輸??赏ㄟ^調(diào)制進行無線傳輸或光傳輸。56 由于以上特點,V/F轉(zhuǎn)換器適用于一些非快速而需進行遠適用于一些非快速而需進行遠距離信號傳輸?shù)木嚯x信號傳輸?shù)腁/D轉(zhuǎn)換過程轉(zhuǎn)換過程。另外,還可以簡化電路、降低成本、提高性價比。11.3.1 用用V/F轉(zhuǎn)換器實現(xiàn)轉(zhuǎn)換器實現(xiàn)A/D轉(zhuǎn)換的原理轉(zhuǎn)換的原理 V/F轉(zhuǎn)換工作原理為:轉(zhuǎn)換工作原理為:單片機片內(nèi)計數(shù)器

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論