基于89C51單片機(jī)的遠(yuǎn)程數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)
系統(tǒng)上電即執(zhí)行初始化程序。當(dāng)操作員按下采樣鍵時(shí)執(zhí)行數(shù)據(jù)采樣模塊。從00~07通道間隔每秒采集每個(gè)通道的5個(gè)值,調(diào)用濾波子程序得到準(zhǔn)確值,再通過(guò)數(shù)據(jù)轉(zhuǎn)換子程序分別送到6116數(shù)據(jù)區(qū)及8155RAM區(qū),通過(guò)字形顯示子程序顯示各通道檢測(cè)的數(shù)據(jù)。每采集完一個(gè)周期后,89C51單片機(jī)通過(guò) MAX232接口PC機(jī)查詢有無(wú)通信命令,有則響應(yīng),無(wú)則繼續(xù)采集數(shù)據(jù)。該程序一直按框圖流程循環(huán)執(zhí)行,直至意外掉電或強(qiáng)迫復(fù)位后,才能終止數(shù)據(jù)采集。
2.3 故障診斷模塊
數(shù)據(jù)采集過(guò)程中,若出現(xiàn)故障會(huì)直接影響采樣結(jié)果,所得到的錯(cuò)誤數(shù)據(jù)不允許存檔,并應(yīng)該記錄故障原因及持續(xù)時(shí)間。故障診斷模塊主要是89C51外圍芯片 MAX691的電源監(jiān)控以及掉電保護(hù)電路檢測(cè)到硬件故障后向單片機(jī)發(fā)出中斷請(qǐng)求INT0所執(zhí)行的外部中斷服務(wù)子程序。該程序主要功能是在累加數(shù)據(jù)保存完畢后,置位89C51內(nèi)部的特殊功能寄存器PCON中的PD,使RAM進(jìn)入掉電模式,保護(hù)數(shù)據(jù)不變,同時(shí)顯示故障類型和發(fā)生的時(shí)間。若為軟件死循環(huán)引起的故障,則MAX691的“看門狗”電路自動(dòng)使程序跳出陷阱,強(qiáng)迫系統(tǒng)復(fù)位。
2.4 數(shù)據(jù)通信模塊
分單片機(jī)通信程序和PC機(jī)通信程序。
2.4.1 單片機(jī)通信程序
流程圖如圖4所示?!?P align=center>
2.4.2 Win98下PC機(jī)與89C51通信程序
通訊程序編寫(xiě)中首先在項(xiàng)目頭文件中嵌入MSComm控件的頭文件MSComm.h及實(shí)現(xiàn)文件MSComm.cpp,其次,為了用該控件控制一個(gè)串口的通訊操作,還必須在相應(yīng)程序中插入該控件。為此,設(shè)計(jì)在某對(duì)話框中插入MSComm控件,其ID為IDC_M(jìn)SComm1,并利用ClassWizard 為其添加變量CCMSComm m_Com1,通訊程序中對(duì)串口的所有操作都可以通過(guò)m_Com1來(lái)實(shí)現(xiàn)。
89C51通過(guò)中斷方式采集和傳遞數(shù)據(jù)。當(dāng)其數(shù)據(jù)緩沖區(qū)滿時(shí),向CPU發(fā)出中斷申請(qǐng),若CPU響應(yīng)并經(jīng)與PC機(jī)握手后便可發(fā)送數(shù)據(jù)。因此PC機(jī)采用查詢的通訊方式。設(shè)計(jì)中將PC機(jī)串口每接收一幀數(shù)據(jù)設(shè)置成串口要響應(yīng)的事件EV_RXFLAG事件,通過(guò)此事件激活消息處理函數(shù)OnComm(),在OnComm()中加入處理代碼,判斷是否是所需的數(shù)據(jù),再作出相應(yīng)的顯示、存盤(pán)等處理。
下面簡(jiǎn)要給出用事件驅(qū)動(dòng)方式接收89C51單片機(jī)發(fā)送數(shù)據(jù)的程序源代碼。通訊時(shí)PC機(jī)串口與89C51串口參數(shù)的設(shè)置必須一致,否則兩者無(wú)法進(jìn)行通訊。設(shè)置PC機(jī)串口參數(shù)的初始化程序如下:
If(!m_Com1.getportOpen())
m_Com1.SetPortOpen(TRUE);//打開(kāi)串口
m_Com1.SetSettings("9600,n,11,1");
//串口參數(shù)設(shè)置
m_Com1.InputMode(1);
//建立1024字節(jié)輸入隊(duì)列
SetCommEvent(m_Com1,EV_RXFLAG);
//設(shè)置串口要響應(yīng)的事件EV_RXFLAG
m_Com1.SetRThreshold(200);
//每接收200幀激活OnComm()事件 ………
3 結(jié)束語(yǔ)
本文通過(guò)PC機(jī)與89C51單片機(jī)組成一簡(jiǎn)單的多機(jī)系統(tǒng),通過(guò)串行通信實(shí)現(xiàn)了遠(yuǎn)程數(shù)據(jù)采集系統(tǒng)的基本功能。在硬件連接上,為提高傳輸距離,采用了RS- 232C/RS-422A轉(zhuǎn)換電路,以差分傳輸、差分接受的形式解決了這一問(wèn)題。在軟件編制上,采用流行的VC++6.0下的Active X控件,通過(guò)對(duì)控件相關(guān)屬性及代碼的編寫(xiě),實(shí)現(xiàn)了Windows 98環(huán)境下PC機(jī)與89C51單片機(jī)的遠(yuǎn)程通信。該方法也可以用于類似的工業(yè)場(chǎng)合中。
參 考 文 獻(xiàn)
1 何立民.單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì).北京:航空航天大學(xué)出版社,1998
2 趙仕?。甐C++6.0編程與實(shí)例解析.北京:科學(xué)出版社,2000
評(píng)論