8051單片機擴展ADC0809的兩種典型方法如圖5-53所示,其差別是確定ADC轉換通道的方式不同。
(1)單片機地址總線低8位確定轉換通道
在圖5-53a中,單片機ALE引腳信號進行二分頻后,作為ADC0809的CLK時鐘信號。單片機P0口經過鎖存器74HC373后的地址總線低8位的A2、A1和A0分別與ADC0809的地址線C、B和A相連,用于確定被轉換的通道編號。
圖5-53 8051單片機擴展ADC0809的電路原理圖
a)單片機地址總線低8位確定轉換通道b)單片機數據總線確定轉換通道
啟動ADC0809轉換的指令是“MOVX@DPTR,A”或“MOVX@Ri,A”。例如,對于圖5-53a,啟動通道6轉換的指令可以是:
其中,MOVX指令執(zhí)行時,地址7FFEH的低8位(A7~A0)和高8位(A15~A8)分別出現在地址總線P0和P2上。由MOVX指令寫總線時序(如圖5-13所示)可知,單片機ALE的下降沿信號將驅動74HC373鎖存P0傳送的低8位地址(A7~A0,
其值為0FEH=11111110B),其中A2、A1和A0分別與ADC0809的C、B和A引腳連接,確定了被選中的通道編號是110B=6。另外,由于P2.7為低電平,單片機的WR被或非門取反,使得START和ALE引腳產生如圖5-54所示的波形,從而啟動ADC0809
轉換。
圖5-54 8051單片機啟動ADC0809轉換的引腳波形圖
特別需要指出的是:
1)對于圖5-53a所示的擴展連接方式向,在ADC0809的啟動指令“MOVX@DPTR,A”中,累加器A的值對A-D轉換本身沒有任何影響,其值可以是任意的。
2)指令“MOVX@DPTR,A”中,與ADC0809通道選擇無關的地址位可以是任意值,但推薦將其設置為1,如圖5-53a中的單片引腳P2.6~P2.0和P0.7~P0.3。
轉換結束后,讀取轉換結果的指令是“MOVX A,@DPTR”或“MOVX A,@Ri”。例如,對于圖5-53a,讀取通道6轉換結果的指令可以是
由“MOVX A,@DPTR”指令時序(見圖5-12)可知,該指令執(zhí)行時地址7FFEH的高8位和低8位分別出現在P2口和P0口;單片機引腳ALE下降沿信號使74HC373鎖存P0上的低8位地址;而P2.7為低電平,使單片機引腳RD的低電平被或非門取反,變成高電平,使ADC0809的OE引腳有效,允許ADC0809由其D7~D0引腳輸出8位A-D轉換結果;而ADC0809的D7~D0引腳與單片機的P0口相連,在單片機引腳RD為低電平時,P0作為數據線恰好可以將轉換結果送入單片機的累加器A。另外,讀取轉換結果時,僅需要ADC0809的OE引腳高電平有效,地址引腳A、B和C沒有任何作用,所以與地址引腳A、B和C對應的地址位可以是任意值,即在“MOVX A,@DPTR”指令中,DPTR的最低3位可以是任意值。
由上述分析可知,指令時序在單片機擴展外部I/O接口時具有重要作用,恰當地利用時序可以使單片機有效地完成對I/O接口的訪問。
(2)單片機數據總線確定轉換通道
在圖5-53b中,沒有使用地址鎖存器鎖存地址總線的低8位地址。在這種連接方式下,啟動通道6轉換的指令可以是
其中,“MOVX@DPTR,A”指令中累加器A的值決定了ADC0809被轉換的通道編號。具體分析如下:
結合圖5-13所示的“MOVX@DPTR,A”指令時序圖和圖5-54所示的ADC0809啟動轉換引腳波形圖可知,ADC0809在其ALE引腳上升沿時鎖存器地址引腳A、B和C上的地址信息,用以確定被轉換的通道編號。而ADC0809的ALE引腳上升沿信號源于
單片機WR引腳的下降沿。在WR的下降沿時刻,單片機P0是數據線,并且傳送的,該數據來自于“MOVX@DPTR,A”中的累加器A。即,對于圖5-53c所示的擴展方式,ADC0809在其ALE引腳上升沿時鎖存的地址信號來自于單片機的數據總線,因此“MOVX@DPTR,A”送上數據總線的數據(即累加器A中的數)決定了ADC0809轉換的通道編號。
由以上分析可知,被“MOVX@DPTR,A”指令送入地址總線的7FFFH的最高位決定了P2.7的狀態(tài)為0,使得單片機WR引腳的信號被取反后通過“或非”門,從而啟動轉ADC0809的A-D轉換;而該指令送上數據總線的0FEH的最低3位110B對應于ADC0809的C、B和A引腳,在ADC0809的ALE上升沿時刻(單片機WR的下降沿時刻)被鎖存以確定A/D轉換通道編號。
讀取通道6轉換結果的指令如下: