SBUF = con_para_rtd[0]; //寫串口緩沖區(qū)數(shù)據(jù)至AD7711發(fā)送第一個(gè)控制字
while (!TI); //等待串行口發(fā)送完成
P11 = 1; //設(shè)置 TFS(p1.1)為高,AD7711停止接收串行數(shù)據(jù)
TI = 0; //清除單片機(jī)串口發(fā)送標(biāo)志,準(zhǔn)備發(fā)送第二個(gè)控制字
P11 = 0; //下降沿有效
SBUF = con_para_rtd[1]; //發(fā)送第二個(gè)控制字
while (!TI); //等待串行口發(fā)送完成
P11 = 1; //設(shè)置 TFS(p1.1)為高,AD7711停止接收串行數(shù)據(jù)
TI = 0; //清除單片機(jī)串口發(fā)送標(biāo)志,準(zhǔn)備發(fā)送第三個(gè)控制字
P11 = 0; //下降沿有效
SBUF =con_para_rtd[2]; //發(fā)送第三個(gè)控制字
while (!TI); //等待串行口發(fā)送完成
P11 = 1; //設(shè)置 TFS(p1.1)為高,AD7711停止接收串行數(shù)據(jù)
*psdpa_data = *psdpa_data | 0x82; //設(shè)置 pa.7(a0) 為高,讀寫控制寄存器結(jié)束,可以讀寫數(shù)據(jù)
}
void rtd (void)
{
unsigned char xdata rtd_temp_result[8]; //storage resistance come form rtd_data_result
*psdpa_data = *psdpa_data & 0xfe; //設(shè)AINEN2為低使ain adg609為不能
*psdpa_data = *psdpa_data & 0xfd; //設(shè)AINEN1為低使rtd adg609為不能
select_rtd_ch(channel_switch[0]); //選擇rtd通道
delay(13000); //延時(shí) 200ms
write_7711_con(con_word01,con_word1); //初始化7711,通道1,自校準(zhǔn),開激勵(lì)
電流濾波器的第一凹陷頻率為40Hz
WMCON = WMCON | WDTRST; //看門狗定時(shí)器復(fù)位
delay(16500); //延時(shí) 250ms
WMCON = WMCON | WDTRST;
while(P13);
for (main_k=0;main_k< rtd_count;main_k++) //讀取四路RTD模數(shù)轉(zhuǎn)換結(jié)果
{
select_rtd_ch(channel_switch[main_k]); //選擇rtd通道
WMCON = WMCON | WDTRST;
write_7711_con(con_word0,con_i_on); //開激勵(lì)電流
WMCON = WMCON | WDTRST;
delay(16500);
WMCON = WMCON | WDTRST;
SCON = 0x01; //使接收并設(shè)置接收中斷
P12 = 1; //設(shè)RFS為高,不能讀
P11 = 1; //設(shè)TFS為高,不能寫
WMCON = WMCON | WDTRST;
delay(12000); //延時(shí) 170ms
WMCON = WMCON | WDTRST;
*psdpa_data = *psdpa_data | 0x80; //設(shè)A0為高讀7711數(shù)據(jù)寄存器
while (P13); //若DRDY/為低則向下運(yùn)行否則循環(huán)
RI = 0; //清除接收標(biāo)志,串口開始接收
REN = 1; //設(shè)置接收使能
P12 = 0; //設(shè)RFS為低
while (!RI); //循環(huán)至8位接收完成
rtd_temp_result[2*main_k] = SBUF; //將緩沖器中數(shù)據(jù)送至指定地址
P12 = 1; //通知AD7711停止發(fā)送數(shù)據(jù)
RI = 0; //清接收標(biāo)志,串口開始接收
P12 = 0; //設(shè)RFS為低
while (!RI); //循環(huán)至8位接收完成 rtd_temp_result[2*main_k+1] = SBUF; //將緩沖器中數(shù)據(jù)送至指定地址
P12 = 1; //設(shè)RFS為高停止讀操作
rtd_temp_result[2*main_k+1] = arrange_byte(rtd_temp_result[2*main_k+1]);
rtd_temp_result[2*main_k] = arrange_byte(rtd_temp_result[2*main_k]);
rtd_data_result[main_k] = *(int *)(rtd_temp_result+2*main_k);//合并兩個(gè)字節(jié)為一個(gè)字
WMCON = WMCON | WDTRST;
}
}
6. 注意事項(xiàng)
6.1 模擬信號(hào)輸入端的無(wú)源濾波電路C1、C2和C3是對(duì)長(zhǎng)線模擬信號(hào)傳輸干擾采取的抑制措施。
6.2 軟件延時(shí)是對(duì)多路轉(zhuǎn)換開關(guān)通道切換時(shí)產(chǎn)生的干擾脈沖的抑制措施。
6.3 復(fù)位看門狗為單片機(jī)AT89S8252片內(nèi)可編程看門狗。
6.4 AD7711與單片機(jī)AT89S8252的時(shí)鐘信號(hào)相反。
6.5 給AD7711的控制寄存器寫入控制字時(shí),字長(zhǎng)必須是24位,否則不能被上載入控制寄存器。





