新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于89C51單片機的遠程數據采集系統設計

        基于89C51單片機的遠程數據采集系統設計

        作者: 時間:2012-02-04 來源:網絡 收藏

          系統上電即執行初始化程序。當操作員按下采樣鍵時執行數據采樣模塊。從00~07通道間隔每秒采集每個通道的5個值,調用濾波子程序得到準確值,再通過數據轉換子程序分別送到6116數據區及8155RAM區,通過字形顯示子程序顯示各通道檢測的數據。每采集完一個周期后,89C51通過 MAX232接口PC機查詢有無通信命令,有則響應,無則繼續采集數據。該程序一直按框圖流程循環執行,直至意外掉電或強迫復位后,才能終止。

        2.3 故障診斷模塊

          過程中,若出現故障會直接影響采樣結果,所得到的錯誤數據不允許存檔,并應該記錄故障原因及持續時間。故障診斷模塊主要是89C51外圍芯片 MAX691的電源監控以及掉電保護電路檢測到硬件故障后向發出中斷請求INT0所執行的外部中斷服務子程序。該程序主要功能是在累加數據保存完畢后,置位89C51內部的特殊功能寄存器PCON中的PD,使RAM進入掉電模式,保護數據不變,同時顯示故障類型和發生的時間。若為軟件死循環引起的故障,則MAX691的“看門狗”電路自動使程序跳出陷阱,強迫系統復位。

        2.4 數據通信模塊

          分通信程序和PC機通信程序。

        2.4.1 單片機通信程序

          流程圖如圖4所示。 

           

          

        2.4.2 Win98下PC機與89C51通信程序

          通訊程序編寫中首先在項目頭文件中嵌入的頭文件MSComm.h及實現文件MSComm.cpp,其次,為了用該控件控制一個串口的通訊操作,還必須在相應程序中插入該控件。為此,設計在某對話框中插入,其ID為IDC_MSComm1,并利用ClassWizard 為其添加變量CCMSComm m_Com1,通訊程序中對串口的所有操作都可以通過m_Com1來實現。

          89C51通過中斷方式采集和傳遞數據。當其數據緩沖區滿時,向CPU發出中斷申請,若CPU響應并經與PC機握手后便可發送數據。因此PC機采用查詢的通訊方式。設計中將PC機串口每接收一幀數據設置成串口要響應的事件EV_RXFLAG事件,通過此事件激活消息處理函數OnComm(),在OnComm()中加入處理代碼,判斷是否是所需的數據,再作出相應的顯示、存盤等處理。

          下面簡要給出用事件驅動方式接收89C51單片機發送數據的程序源代碼。通訊時PC機串口與89C51串口參數的設置必須一致,否則兩者無法進行通訊。設置PC機串口參數的初始化程序如下:
        If(!m_Com1.getportOpen())

        m_Com1.SetPortOpen(TRUE);//打開串口 
          m_Com1.SetSettings("9600,n,11,1");
        //串口參數設置 
          m_Com1.InputMode(1);
        //建立1024字節輸入隊列 
          SetCommEvent(m_Com1,EV_RXFLAG);
        //設置串口要響應的事件EV_RXFLAG 
          m_Com1.SetRThreshold(200);
        //每接收200幀激活OnComm()事件 ………

        3 結束語

          本文通過PC機與89C51單片機組成一簡單的多機系統,通過串行通信實現了遠程系統的基本功能。在硬件連接上,為提高傳輸距離,采用了RS- 232C/RS-422A轉換電路,以差分傳輸、差分接受的形式解決了這一問題。在軟件編制上,采用流行的VC++6.0下的Active X控件,通過對控件相關屬性及代碼的編寫,實現了Windows 98環境下PC機與89C51單片機的遠程通信。該方法也可以用于類似的工業場合中。

        參 考 文 獻

        1 何立民.單片機應用系統設計.北京:航空航天大學出版社,1998
        2 趙仕健.VC++6.0編程與實例解析.北京:科學出版社,2000


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 蒙城县| 台山市| 怀集县| 三原县| 池州市| 衡东县| 叙永县| 红原县| 安岳县| 诏安县| 密云县| 西贡区| 泸溪县| 宝应县| 丹巴县| 永新县| 治多县| 全椒县| 黄大仙区| 桂阳县| 泾川县| 安阳县| 昆明市| 阿拉善盟| 孝感市| 天全县| 木里| 珲春市| 西充县| 棋牌| 丰镇市| 永春县| 沈丘县| 伊川县| 孟津县| 乌拉特前旗| 宣威市| 深圳市| 巴彦县| 互助| 綦江县|