宗素蘭,張翠俠
宿州學院1.煤礦機械與電子工程研究中心;2.機械與電子工程學院,宿州,234000
單片機處理的是數(shù)字量,但在自然界,如溫度、壓力、速度和流量等都是模擬量[1-3]。這些非電的物理量需要經(jīng)過傳感器轉(zhuǎn)變成模擬電信號[1],然后再進一步轉(zhuǎn)化為數(shù)字量才能由單片機處理。將模擬量轉(zhuǎn)換成數(shù)字量的過程稱為數(shù)模轉(zhuǎn)換,即A/D轉(zhuǎn)換[1,4]。ADC0808是一種逐次比較型8路模擬輸入,8位數(shù)字量并行輸出的A/D轉(zhuǎn)換器[5],與實際使用的ADC0809相比,除了精度上有差別外,其余完全一樣[6]。
A/D轉(zhuǎn)換系統(tǒng)原理框圖如圖1所示。
圖1 A/D轉(zhuǎn)換系統(tǒng)原理圖
A/D轉(zhuǎn)換系統(tǒng)由AT89C51單片機、A/D轉(zhuǎn)換器件和顯示器等組成。A/D轉(zhuǎn)換器件把外界傳來的模擬量轉(zhuǎn)換成數(shù)字量并傳送給AT89C51單片機,單片機才能進行數(shù)據(jù)處理[5,7]。AT89C51單片機把A/D轉(zhuǎn)換器傳來的信號經(jīng)顯示器件顯示出來。
ADC0808的模數(shù)轉(zhuǎn)換在編程時可以通過查詢和中斷兩種方式實現(xiàn)。
查詢方式主要通過查詢ADC0808芯片的EOC引腳信號是不是1來實現(xiàn)。該引腳信號為1時,表明模數(shù)轉(zhuǎn)換結(jié)束,可以讀取模數(shù)轉(zhuǎn)換的結(jié)果,并把模數(shù)轉(zhuǎn)換的結(jié)果送至設計時選好的顯示器件顯示出來。本次仿真研究選擇的顯示器件是發(fā)光二極管和數(shù)碼管,顯示結(jié)果非常形象直觀。
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV DPTR,#00FFH;00FFH是ADC0808的端口地址
S1:
MOVX @DPTR,A;啟動AD轉(zhuǎn)換
MOV P3,#0FFH;P3口設為輸入端口
L1:
JB P3.2,$;P3.2即EOC反相后是1嗎,是1繼續(xù)等。
MOVX A,@DPTR;讀取轉(zhuǎn)換結(jié)果
MOV P1,A;把轉(zhuǎn)換結(jié)果送P1口
SJMP S1
END
中斷方式主要是利用ADC0808芯片的EOC引腳信號是不是1來實現(xiàn)。該引腳信號為1時,表明模數(shù)轉(zhuǎn)換結(jié)束。AT89C51單片機中斷的觸發(fā)方式有兩種:下降沿和低電平。在編程時設置中斷的觸發(fā)方式為低電平,而模數(shù)轉(zhuǎn)換結(jié)束時EOC的引腳信號為1,所以要經(jīng)過反相后再送至單片機的P3.2引腳,P3.2即是外部中斷0中斷請求信號入口。從圖2可以看出EOC經(jīng)反相后連接單片機P3.2引腳。
ORG 0000H
LJMP MAIN
ORG 0003H;外部中斷0入口地址
LJMP INTAD
ORG 0100H
MAIN:
SETB EX0;開外部中斷0中斷
CLR IT0;設置外部中斷0的中斷觸發(fā)方式為低電平觸發(fā)
SETB EA;開總中斷
MOV DPTR,#00FFH;00FFH是ADC0808的端口地址
MOVX @DPTR,A; 啟動AD轉(zhuǎn)換
SJMP $;死循環(huán),等待中斷
INTAD:
MOVX A,@DPTR;讀取轉(zhuǎn)換結(jié)果
MOV P1,A;結(jié)果送P1口顯示
MOVX @DPTR,A;再次啟動AD轉(zhuǎn)換
RETI;中斷返回
END
打開Proteus軟件,進入“Schematic Capture”模式[8-9]。因為ADC0808片內(nèi)無時鐘信號,需要外接時鐘電路。時鐘信號的形成:點擊左側(cè)菜單欄的“Generator Mode”,選取DCLOCK項。畫出圖形后,雙擊,選取或輸入ADC0808的時鐘頻率。ADC0809模數(shù)轉(zhuǎn)換器的工作時鐘具有寬廣的適用頻率范圍,最高可達3 MHz[10]。仿真時選擇500 kHz。仿真圖中的其他元件按照參考文獻[5]的操作步驟,根據(jù)下圖2中的元件名稱選取即可。選出所有元件并連接好,可得出A/D轉(zhuǎn)換的仿真電路原理圖,如圖2所示。
查詢和中斷兩個程序中ADC0808的端口、地址和EOC信號都以圖2為基礎。如果連接方式不同,則程序也要改變。ADC0808的6號引腳是啟動信號輸入端,7號引腳EOC是轉(zhuǎn)換結(jié)束標志,高電平表示轉(zhuǎn)換結(jié)束,OE是輸出允許端,高電平有效[11]。采用圖中的連接方式,當單片機執(zhí)行寫指令時,啟動AD轉(zhuǎn)換,當執(zhí)行讀指令時,OE有效,AD轉(zhuǎn)換的數(shù)字量傳給單片機。
圖2 系統(tǒng)仿真原理圖
運用Keil軟件,分別加載上文中的匯編語言源程序,生成后綴為“HEX”的文件[9]。雙擊原理圖中的單片機,把生成的“HEX”文件加載進去,可得仿真結(jié)果[9](圖3~6)。仿真時模擬量取值范圍為0%~100%,或者說0~1。
圖3是滑動變阻器全部接入時即模擬量最小時所對應的數(shù)字信息。此時通道0輸入的模擬量值最小,為0%,相應的數(shù)字量也應該最小,為00H。從圖3可以看出對應的發(fā)光二極管全滅,表示送過來的數(shù)字信號為二進制信號00000000B,此時數(shù)碼管顯示00,表示對應的十六進制為00H,即模擬信號為0時,對應的數(shù)字信號也為0,與理論完全一致。從圖4可以看出,模擬信號輸入量值為25%,發(fā)光二極管顯示的信號為01000000B,數(shù)碼管顯示40,表示對應的十六進制為40H;理論分析可知,當模擬信號為25%時,對應的數(shù)字量應為最大數(shù)字信號只有FFH的四分之一,即40H,理論和仿真顯示一致。圖5表示當滑動變阻器接入50%時,此時模擬信號處于中間值0.5,對應數(shù)字量信號應為00H~FFH的中間值,即7FH。從圖5可以看出,理論和仿真結(jié)果一致。圖6表示模擬輸入量值最大時,對應的數(shù)字也應該最大,為FFH。從圖6可以看出,發(fā)光二極管全亮,表示數(shù)字信號為11111111B,數(shù)碼管顯示FF,表示對應的十六進制為FFH,理論和仿真結(jié)果完全一致。
圖3 模擬輸入量值最小時對應狀態(tài) 圖4 模擬輸入量值為25%時對應狀態(tài)
圖5 模擬輸入量值為50%時對應狀態(tài) 圖6 模擬輸入量值最大時對應狀態(tài)
通過仿真演示,可看出轉(zhuǎn)換芯片和單片機之間的連接,再結(jié)合相應的程序可以清楚展示在單片機系統(tǒng)中如何實現(xiàn)A/D轉(zhuǎn)換。這是實體實驗很難做到的,即使一個實驗系統(tǒng)只有A/D轉(zhuǎn)換一個實驗,復雜的連線也會讓人眼花繚亂。因此,仿真雖然不能完全代替實體實驗,但是在單片機系統(tǒng)研究中采用仿真來實現(xiàn)A/D轉(zhuǎn)換,可以達到甚至比實體實驗更好的效果。