4. 數(shù)采系統(tǒng)中AD7711與單片機AT89S8252的硬件接口電路
用AT89S8252單片機的串口和P1口實現(xiàn)與AD7711接口的具體電路如圖2所示。該電路中通信串口工作在方式0,即該串口用作同步移位寄存器,由RXD(P3.0)端實現(xiàn)數(shù)據(jù)的輸入、輸出,串口移位時鐘由TXD(P3.1)端輸出。通信的波特率恒定為FOSC/12,其中FOSC為單片機晶振,F(xiàn)OSC為 l0MHz。由于AD7711的數(shù)據(jù)串行輸出格式與8252單片機的串行格式相反,所以本設(shè)計中在單片機的時鐘輸出端與AD7711的串口時鐘端之間接一反相器,且軟件設(shè)計時數(shù)據(jù)位順序要倒相。
圖2中P1口的三條口線分別與AD7711的RFS/、TFS/、DRDY/相連,A0與單片機的外部擴展存儲器PSD311的PA7口線相連,其中P1.3為輸入口,用于讀取DRDY/的狀態(tài),其余為輸出口用于控制AD7711的讀/寫過程。將AD7711的MODE接地,使器件工作在外部時鐘方式,主時鐘由10MHz的石英晶體產(chǎn)生。
5. 用AD7711與單片機AT89S8252實現(xiàn)數(shù)據(jù)采集的軟件設(shè)計
5.1 數(shù)采系統(tǒng)中的A/D轉(zhuǎn)換分為兩步:
第一步,向AD7711芯片寫控制字;第二步,讀取AD7711的模數(shù)轉(zhuǎn)換結(jié)果。
5.1.1 發(fā)送數(shù)據(jù)時,即向AD7711寫控制字,首先設(shè)置PA7即A0為低電平表明讀寫控制寄存器,軟件清除TI標(biāo)志位準(zhǔn)備發(fā)送第一個控制字,設(shè)置P1.1即TFS/為低電平,發(fā)送控制字的前8位數(shù)據(jù)至緩沖區(qū),TFS/下降沿使內(nèi)部產(chǎn)生的SCLK時鐘輸出,時鐘信號的上升沿使串行數(shù)據(jù)上載入AD7711芯片。通過判斷TI標(biāo)志位等待串行口數(shù)據(jù)發(fā)送結(jié)束,設(shè)置P1.1為高使AD7711停止接收數(shù)據(jù)。軟件清除TI標(biāo)志位準(zhǔn)備發(fā)送第二個控制字,同前面所述連續(xù)發(fā)送三個控制字(24位數(shù)據(jù))至AD7711的控制寄存器。控制字發(fā)送完成后設(shè)置PA7為高電平,結(jié)束對控制寄存器的讀寫操作。
5.1.2 接收數(shù)據(jù)時,首先判斷DRDY/的引腳電平,若為低電平,則表明已有有效的轉(zhuǎn)換數(shù)據(jù)在AD7711芯片的數(shù)據(jù)輸出寄存器中,這樣單片機置位REN=1,此時,接收數(shù)據(jù)開始,當(dāng)接收到8位數(shù)據(jù)時,中斷標(biāo)志位RI置位,一次串行接收結(jié)束,單片機自動停止發(fā)送移位脈沖,該8位數(shù)據(jù)從串行口緩沖器讀入內(nèi)存,并使用軟件清除RI標(biāo)志,單片機又開始發(fā)送移位脈沖,直到又收到8位數(shù)據(jù),則另一次串行接收結(jié)束。這樣,這次接收的8位數(shù)據(jù)與剛才接收的低8位數(shù)據(jù)組合成為16位數(shù)據(jù),即一次A/D轉(zhuǎn)換的結(jié)果。
5.2 我們所設(shè)計的數(shù)采系統(tǒng)中軟件編程過程中涉及到對多路轉(zhuǎn)換開關(guān)ADG609的通道選擇和因其所作的延時程序處理。部分程序清單如下(以RTD采集為例):
void write_7711_con(unsigned char sel_cal_mode,unsigned char conword1)
{
unsigned char data con_para_rtd[3]; //storage control word (write to 7711)
con_para_rtd[0] = arrange_byte(sel_cal_mode); //設(shè)置AD7711校驗?zāi)J?br> con_para_rtd[1] = arrange_byte(conword1); //設(shè)置增益等參數(shù)
con_para_rtd[2] = arrange_byte(con_word2); // arrange_byte()使各數(shù)據(jù)位順序倒相
SCON = 0x02; //串口波特率 =fosc/12
*psdpa_data = *psdpa_data & 0x7f; //設(shè)置 pa.7(a0) 為低,讀寫控制寄存器
TI = 0; //清除單片機串口發(fā)送標(biāo)志,準(zhǔn)備發(fā)送第一個控制字
P11 = 0; //設(shè)置 TFS(p1.1)為低,可以向AD7711發(fā)送串行數(shù)據(jù),下降沿有效





