實驗目的
1、掌握A/D轉換器0809的工作原理及其與8031的連接方法。
2、掌握A/D轉換的程序設計。
實驗板中,A/D接口采用0809芯片,其接口連接如圖6-1示。8路模擬輸入,由A、B、C三腳選擇。輸入Vin=0~5V時,相應輸出00H~FFH。
為了啟動A/D轉換,應在STAR引腳加正脈沖,通常可用寫入指令MOVX @DPTR,A來獲得。A/D轉換結束后,EOC腳發出高電平,通知CPU從數據口D7~D0讀取轉換結果。線路中,0809 EOC接至8031的INT1,所以即可通過查詢,也可利用中斷響應來判斷A/D轉換是否完成。
本實驗僅采集一路(IN1)的模擬輸入0~5V,假設A/D轉換的結果存放于CPU內RAM 50H。下面分別列出查詢法或中斷法的轉換程序。
ORG? 0600H |
查詢法 | |
?? AD1: |
MOV ?DPTR, #5001H |
|
MOVX ?@DPTR, A |
;啟動0809通道1 | |
MOV ?R2, #20H |
;延時 | |
? ?DL: |
DJNZ ?R2, DL |
|
WEND: |
JB ?P3.3 ,WEND |
;等待A/D完成 |
MOVX ?A, @DPTR |
;讀A/D結果 | |
MOV ?50H, A |
;存50H | |
RET |
||
ORG ?0620H |
中斷法,主程序。 | |
MAIN: |
MOV ?SP #60H |
;設置堆棧指針 |
SETB ?EA |
;開CPU中斷 | |
SETB? EX1 |
;允許INT1中斷 | |
SETB ?IT1 |
;INT1邊沿觸發 | |
?? |
MOV ?DPTR, #5001H |
|
MOVX ?@DPTR, A |
;啟動0809通道1 | |
SJMP ?$ |
;等待中斷或其它 | |
ORG ?0013H |
||
LJMP ?AD2 |
;中斷入口 | |
ORG? 0640H |
||
? ?AD2: |
PUSH ?PSW |
; A/D中斷服務子程序 |
PUSH ?A |
;入棧保護 | |
PUSH ?DPL |
||
PUSH ?DPH |
||
MOV ?DPTR, #5001H |
||
MOVX ?A, @DPTR |
;讀A/D轉換結果 | |
MOV ?50H, A |
;結果存50H | |
MOV ?DPTR, #5001H |
||
MOVX ?@DPTR ,A |
;再次啟動通道1 | |
POP ?DPH |
;恢復現場 | |
POP ?DPL |
||
POP ?A |
||
POP ?PSW |
||
RETI |
實驗步驟:
1、 輸入程序。
2、采用設置斷點和連續執行方式,運行程序。檢查模擬輸入電壓和A/D轉換結果之間是否互相對應。
思考題:
1、中斷法A/D采樣程序,中斷子程序中為什么要再次啟動A/D?
2、仿真調試中,如何確認中斷已經響應?
3、如果采集8路輸入,程序如何改寫?
(二)A/D演示實驗
實驗內容:
實驗板的最左二位數碼管顯示0809通道1的A/D轉換結果(16進制數字量),它經標度變換后得到的模擬輸入電壓值(10進制)顯示在最右三位,兩者之間以“一”號分開。
設A/D轉換結果為數字量N,則對應的模擬輸入大小為 。可見,只要將乘積5×N的小數點右移8位,就能實現標度變換了。
參考程序:
ORG ?0000H |
||
LJMP ?MAIN |
||
ORG |
||
? MAIN: |
MOV ?SP, #60H |
;設置堆棧 |
MOV ?DPTR, #0B000H |
;8155命令字 | |
MOV ?A, #03H |
||
MOVX ?@DPTR, A |
;A、B口輸出,C口輸入 | |
MOV ?R0, #2AH |
;顯示初始化 | |
MOV ?A, #11H |
;全部亮“一” | |
?? ML0: |
MOV ?@R0, A |
|
INC ?R0 |
||
CJNE ?R0, #30H, ML0 |
||
?? DIS: |
LCALL ?DISP |
;調用顯示 |
LCALL ?AD1 |
;調用A/D | |
MOV ?A, 50H |
;采樣值高8位送顯示緩沖2A | |
ANL ?A, #0F0H |
||
SWAP ?A |
||
MOV ?2AH, A |
||
MOV ?A, 50H |
;低8位送顯示緩沖2B | |
ANL ?A, #0FH |
||
MOV ?2BH, A |
||
MOV ?A, 50H |
;標度度換:5×N×2-8 | |
MOV ?B, #05H |
||
MUL ?AB |
;結果:整數存B,小數存A | |
PUSH ?A |
;暫存 | |
MOV ?A, B |
;整數加亮小數點后送顯示2DH | |
ADD ?A, #14H |
;14H為顯示字形碼中加亮小數點的偏移量 | |
MOV ?2DH, A |
||
POP ?R3 |
;小數部分變換為BCD碼后,存入顯示緩沖2EH、2FH | |
MOV ?R0, #2E |
;調用二進制小數→十進制 | |
LCALL ?PBTD |
||
SJMP ?DIS |
||
END |
實驗步驟:
1、輸入程序。
2、單步執行,觀察程序執行過程。
3、連續運行。改變模擬輸入的大小,觀察顯示結果。
思考題:
擬將實驗板作為溫度變送器的測量值數字顯示。溫度變送器量程0~300℃、輸出0~5V,接至0809的通道1,試編寫程序。
評論
查看更多