并行模數(shù)轉(zhuǎn)換實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?br>熟悉A/D 轉(zhuǎn)換的工作原理,學(xué)習(xí)使用并行模數(shù)轉(zhuǎn)換芯片ADC0809 進(jìn)行電壓信號(hào)
的采集和數(shù)據(jù)處理。
二、實(shí)驗(yàn)設(shè)備及器件
IBM PC 機(jī) 一臺(tái)
DP-51PROC 單片機(jī)綜合仿真實(shí)驗(yàn)儀 一臺(tái)
數(shù)字萬用表 一臺(tái)
ADC0809 PACK 模塊(選配件) 一套
三、實(shí)驗(yàn)內(nèi)容
通過片外總線方式訪問并行模擬數(shù)字轉(zhuǎn)換器芯片ADC0809,掌握模擬電壓的通用
采集方法。
四、實(shí)驗(yàn)要求
理解掌握ADC0809 的A/D 轉(zhuǎn)換原理和并行A/D 轉(zhuǎn)換器接口的編程方法,學(xué)會(huì)使
用ADC0809 并行模數(shù)轉(zhuǎn)換器實(shí)現(xiàn)電壓信號(hào)采集的方案設(shè)計(jì)。
五、實(shí)驗(yàn)步驟
1. 將ADC0809 PACK 模塊(選配件)插入PARK2 區(qū);
2. 將D2 區(qū)1K 電位器和10K 電位器的左端金屬孔通過導(dǎo)線連接到該區(qū)的
GND 金屬孔,而右端金屬孔通過導(dǎo)線連接到該區(qū)的VCC 金屬孔;
3. 將D2 區(qū)1K 電位器的中間金屬孔連接到A7 區(qū)的P2_IO2 金屬孔,而D2
區(qū)10K 電位器的中間金屬孔連接到A7 區(qū)的P2_IO1 金屬孔;
4. 將A7 區(qū)的P2_IO3~P2_IO5 分別連接到A2 區(qū)的A2~A0;
5. 將A7 區(qū)的P2_CS 連接到A2 區(qū)的A15;
6. 運(yùn)行編寫好的軟件程序,每次跑到斷點(diǎn)就會(huì)停止,此時(shí)觀察轉(zhuǎn)換的結(jié)果和
用數(shù)字萬用表測(cè)量的結(jié)果相比較是否正確(所需觀察的存儲(chǔ)單元或者變量
在程序中依照注釋執(zhí)行);
7. 改變1K 電位器和/或10K 電位器的旋鈕位置,用數(shù)字萬用表測(cè)量中間金
屬孔的電壓,再次運(yùn)行程序至斷點(diǎn)處, 觀察轉(zhuǎn)換的結(jié)果是否正確。
六、實(shí)驗(yàn)預(yù)習(xí)要求
認(rèn)真預(yù)習(xí)本節(jié)實(shí)驗(yàn)內(nèi)容,按照實(shí)驗(yàn)的要求提前做好實(shí)驗(yàn)準(zhǔn)備工作,認(rèn)真閱讀
ADC0809的數(shù)據(jù)手冊(cè)。
七、 實(shí)驗(yàn)參考程序
1. 匯編語言程序:
;使用該程序前請(qǐng)先按照實(shí)驗(yàn)指導(dǎo)手冊(cè)連接好連線,
;運(yùn)行程序至斷點(diǎn),觀察30H 單元和31H 單元轉(zhuǎn)換的十六進(jìn)制
;數(shù)據(jù)換算成實(shí)際電壓值是否與萬用表的測(cè)量結(jié)果相等?
;扭動(dòng)電位器,改變IN0 或/和IN1 模擬輸入電壓,再次運(yùn)行程序至
;斷點(diǎn),觀察30H 或/和31H 單元的數(shù)值是否隨之改變,改變的是否正確?
ORG 8000H
LJMP MAIN
ORG 8100H
MAIN: MOV SP,#70H
MOV R1,#30H ;置數(shù)據(jù)區(qū)首地址,用于存放A/D 轉(zhuǎn)換結(jié)果
MOV DPTR,#7FF8H ;P2.7=0,且指向通道0
MOV R7,#02H ;置通道數(shù)
LOOP: MOVX @DPTR,A ;啟動(dòng)A/D 轉(zhuǎn)換
MOV R6,#20H ;軟件延時(shí),等待轉(zhuǎn)換結(jié)束
DELAY: NOP
NOP
NOP
DJNZ R6,DELAY
MOVX A,@DPTR ;讀取轉(zhuǎn)換結(jié)果
MOV @R1,A ;轉(zhuǎn)存
INC DPTR ;指向下一個(gè)通道
INC R1 ;修改數(shù)據(jù)區(qū)指針
DJNZ R7,LOOP ;IN0、IN1 兩個(gè)通道全采樣完了嗎?
LJMP MAIN
END
2. C51 程序:
//使用該程序前請(qǐng)先按照實(shí)驗(yàn)指導(dǎo)手冊(cè)連接好連線,
//運(yùn)行程序至斷點(diǎn),觀察result0 和result1 的轉(zhuǎn)換結(jié)果
//浮點(diǎn)數(shù)值是否與數(shù)字萬用表的測(cè)量結(jié)果相等?
//扭動(dòng)電位器,改變IN0 或/和IN1 模擬輸入電壓,再次運(yùn)行程序至斷點(diǎn),
//觀察result0 或/和result1 的轉(zhuǎn)換結(jié)果浮點(diǎn)數(shù)值是否隨之改變,改變的是否正確?
#include
#include
#include
#define PIN0 XBYTE[0x7ff8]
#define PIN1 XBYTE[0x7ff9]
typedef unsigned char byte;
typedef unsigned int word;
void main(void)
{
float result0,result1; //兩個(gè)通道A/D 轉(zhuǎn)換結(jié)果的存儲(chǔ)變量
float result0_reg,result1_reg; //浮點(diǎn)數(shù)據(jù)輸出存儲(chǔ)
byte i,j;
while(1)
{
for(i=0;i<2;i++) //對(duì)IN0、IN1 兩個(gè)通道進(jìn)行采樣
{
if(!i)
PIN0=0xff; //啟動(dòng)通道0 的A/D 轉(zhuǎn)換
else
PIN1=0xff; //啟動(dòng)通道1 的A/D 轉(zhuǎn)換
for(j=0;j<0x50;j++); //延時(shí),等待轉(zhuǎn)換的完成
if(!i)
result0_reg=PIN0; //讀取通道0 的轉(zhuǎn)換結(jié)果
else
result1_reg=PIN1; //讀取通道1 的轉(zhuǎn)換結(jié)果
}
result0=result0_reg*5/256;
result1=result1_reg*5/256;
}
}
八、實(shí)驗(yàn)思考
1. 本實(shí)驗(yàn)采用了延時(shí)等待的方式等待ADC0809 轉(zhuǎn)換結(jié)束,請(qǐng)用戶改用中斷方式
做一次這個(gè)實(shí)驗(yàn),并說出這個(gè)實(shí)驗(yàn)采用中斷方式與延時(shí)等待方式相比有哪些優(yōu)
點(diǎn);
2. 請(qǐng)將D5 區(qū)上的ZLG7290 芯片和數(shù)碼管與本實(shí)驗(yàn)相結(jié)合,設(shè)計(jì)出一個(gè)數(shù)字電
壓表,并與商品化的數(shù)字電壓表測(cè)量值比較。
評(píng)論
查看更多