新聞中心

EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > 一種基于狀態(tài)機(jī)的串口通信協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)

一種基于狀態(tài)機(jī)的串口通信協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)

作者: 時(shí)間:2012-05-18 來源:網(wǎng)絡(luò) 收藏

3

下位機(jī)采用ATMEL公司的AVR系列單片機(jī)ATmega168作為其核心控制單元;上位機(jī)軟件采用Delphi 7.0編寫,Delphi 7.0是Borland公司開發(fā)的Windows平臺(tái)的面向?qū)ο蟮目焖賾?yīng)用程序開發(fā)工具。本上位機(jī)程序采用Delphi開發(fā),主要考慮到Delphi易于多線程編程。另外,Delphi開發(fā)程序的簡單、高效,也是上位機(jī)軟件選擇其作為開發(fā)工具的重要原因。

包括發(fā)送與接收兩部分。在本系統(tǒng)中,下位機(jī)負(fù)責(zé)發(fā)送數(shù)據(jù),上位機(jī)負(fù)責(zé)接收數(shù)據(jù),而另一種情況:下位機(jī)接收、上位機(jī)發(fā)送,其處理方法與前面一種相似。因此,這里僅介紹下位機(jī)發(fā)送數(shù)據(jù)、上位機(jī)負(fù)責(zé)接收數(shù)據(jù)的。

下位機(jī)發(fā)送程序由于不考慮機(jī),實(shí)現(xiàn)較為簡單,其示例代碼如下:

j.jpg

c.JPG

上位機(jī)軟件中,當(dāng)接收到數(shù)據(jù)時(shí),控件會(huì)觸發(fā)一個(gè)事件,在事件處理代碼中應(yīng)及時(shí)將收到的數(shù)據(jù)存入接收沖區(qū),同時(shí)不應(yīng)該把串口協(xié)議接收部分的代碼放置在此事件中,否則后面到來的數(shù)據(jù)可能因?yàn)榍懊嫦鹊降臄?shù)據(jù)沒有及時(shí)處理完畢而被沖掉,導(dǎo)致數(shù)據(jù)丟失。因此,在上位機(jī)軟件運(yùn)行時(shí),應(yīng)該啟動(dòng)一個(gè)Windows線程,用于不斷檢測(cè)接收緩沖區(qū)是否為空,不為空時(shí)則對(duì)緩沖中的數(shù)據(jù)進(jìn)行處理,創(chuàng)建一個(gè)名為TBufferThread的線程類:

e.JPG

f.JPG

數(shù)字通信相關(guān)文章:數(shù)字通信原理


通信相關(guān)文章:通信原理




評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉