基于單片機的智能小區監控系統的設計
為了保證PC機與多臺單片機之間能夠準確、可靠的通信,確定一個(gè)明確而合理的通訊協(xié)議是關(guān)鍵。包括對數據格式、通訊方式、傳送速度、傳送步驟、檢糾錯方式以及控制字符定義等問(wèn)題做出統一規定。
為區分不同的分機,必須為每一個(gè)分機分配一個(gè)唯一的地址,此地址唯一區別各單片機。數據格式采用數據包的形式,一次傳輸一組數據,數據包格式如下所示:
起始標志位:1個(gè)字節 數據長(cháng)度:1個(gè)字節
分機地址:1個(gè)字節 數據內容:n個(gè)字節
和檢驗:2個(gè)字節 命令/數據:1個(gè)字節
結束標志位:1個(gè)字節
主機向單個(gè)單片機傳數據時(shí),首先,上位機順次發(fā)送起始標志位,目的地址位,數據,生成檢驗位,結束標志位,上位機發(fā)送后每個(gè)下位機都產(chǎn)生中斷把上位機數據包都接收下來(lái),當接收到結束標志字符時(shí),表示接受到一幀完整的數據包,然后對數據解包,把接收到的目的地和本機地址進(jìn)行比較,如果不是則馬上跳出中斷服務(wù)程序,相同的話(huà)則表示要和本下位機進(jìn)行通訊。主機發(fā)完信息后便等待該分機的接收應答。當接收數據包完成后,接受方也生成相應的檢驗和,如果接受方生成的檢驗和與接收到的檢驗和一致,則表明這次通訊成功,下位機根據接收到的內容給上位機發(fā)送相應的反饋信息。如果不一致,則表明此次通訊失敗,下位機給上位機發(fā)送失敗信息,要求上位機重新發(fā)送。
由于系統采用上位機巡查下位機的工作方式,單片機在通信過(guò)程中處于被動(dòng)地位,只能其被輪詢(xún)到的時(shí)候才能給上位機發(fā)送數據,否則即使信息要上報主機時(shí),也必須處于等待。上位機從第一分機依次查詢(xún)下位機,給巡查到的下位機發(fā)送查詢(xún)命令,詢(xún)問(wèn)該單片機是否有信息要上報給上位機。被輪詢(xún)的單片機如果沒(méi)有信息要上報給上位機的話(huà)就給上位機發(fā)送無(wú)上報要求的指令,上位機接受到此指令后便輪詢(xún)下一地址的分機;若分機有數據需上報便回發(fā)一個(gè)有上報要求給主機,主機收到后便等待分機上報數據,有上報數據的分機組織好數據后上報給主機,然后等待主機的接收應答。主機收到分機上報的數據后進(jìn)行檢查,若正確接收發(fā)正確接收應答,否則發(fā)錯誤接收應答。當接收錯誤后,主機等待分機再次上報數據,分機收到接收錯誤應答后再次發(fā)送數據。
信號傳輸中接受與發(fā)送都采用中斷方式,多機通信從機中斷服務(wù)程序如圖3所示。
5.PC機通信程序設計
上位機的軟件是基于VC++6.0實(shí)現的,其中的重點(diǎn)和難點(diǎn)是進(jìn)行實(shí)時(shí)的串行通訊。應用VC++編寫(xiě)串行通信程序,通??蓺w納為如下四種方法:一是利用Windows API通信函數;二是使用Microsoft提供的Microsoft Communications Control控件(簡(jiǎn)稱(chēng)MSComm);三是利用第三方編寫(xiě)的通信類(lèi)(如MuMega Technologies公司提供的Cserial類(lèi));四是在VC++中用端口操作指令直接對串行端口編程,實(shí)現串行通信。本系統中采用的是MSComm控件,它是通過(guò)串行端口發(fā)送和接收數據,為應用程序提供串行通信功能,使用非常方便。
評論