基于51單片機(jī)的模擬串口設(shè)計
收端是不會判斷所謂某個字節(jié)的起始位的,接收機(jī)如果是在接收的狀態(tài),那么只要它的接收引腳檢測到有低電平(這個低電平不是檢測一次,而是檢測3次,判斷有2次均是低電平則最終判斷為低電平,即起始位),那么接收端就開始以設(shè)定的波特率接收數(shù)據(jù),判斷數(shù)據(jù)時也是判斷3次2次有效,也就是說,只要檢測到低電平它就接收。假如發(fā)送端已經(jīng)在發(fā)送過程中,再接上接收端,那么接收的數(shù)據(jù)一定是錯的,你可以試試,隨便將接收狀態(tài)下的RXD用導(dǎo)線接地一下,接收機(jī)肯定收到數(shù)據(jù)。那么是不是不可避免這種情況的發(fā)生呢?是可以的避免的,但是發(fā)送端的時間需要有個數(shù)據(jù)的時間間隔,否則永遠(yuǎn)出不來這個循環(huán)錯誤:
1,確保接收端就緒先于發(fā)送端,那么第一個字節(jié)的起始位必定被檢測到; 2,發(fā)送第9位,接收到數(shù)據(jù)后,判斷數(shù)據(jù)和第9位是對應(yīng),若對應(yīng)則再接收之后的數(shù)據(jù);3, 添加必要地起始字節(jié)如0xaa,當(dāng)接收端接收到第一個數(shù)據(jù),并且為0xaa時,才進(jìn)入接收真正的有效數(shù)據(jù),一個起始字節(jié)不夠就兩個;總之在接收時就作條件判斷,直至同步為止。
所以如何在自己的筆記本電腦上模擬串口數(shù)據(jù)就成了當(dāng)務(wù)之急。托Google的福,找到了兩個小工具:VSPD和串口調(diào)試助手。下面簡單介紹一下如何結(jié)合這兩個小工具進(jìn)行串口程序調(diào)試。1、安裝好VSPD后,首先選擇你要虛擬的端口號,點(diǎn)擊“添加端口”。一般現(xiàn)在的筆記本電腦都沒有串口,所以可以選COM1和COM2。
2、虛擬好端口后,左側(cè)能看到新虛擬出的COM1和COM2,此時兩個端口應(yīng)該都沒有被占用,處于停用狀態(tài)。
3、打開串口調(diào)試助手,設(shè)置COM1的波特率、奇偶校驗位、數(shù)據(jù)位、停止位等參數(shù),同時確保COM2是未占用狀態(tài)。我們這樣設(shè)置,是為了讓COM1負(fù)責(zé)發(fā)送數(shù)據(jù),COM2負(fù)責(zé)接收數(shù)據(jù)。如果COM2也被占用,那么你的程序就無法使用這個端口了。
4、在圖中方框位置填入你要模擬的數(shù)據(jù),然后點(diǎn)擊“自動發(fā)送”,這時你應(yīng)該看到進(jìn)度條不斷前進(jìn),而VSPD的COM1的Sent數(shù)據(jù)不斷增長,說明串口調(diào)試助手正不斷通過COM1發(fā)送數(shù)據(jù)。
5、打開你要調(diào)試的程序,在你的程序中設(shè)置好波特率等各種參數(shù),即可看到模擬結(jié)果了。此時可以觀察到VSPD中的COM2被Java占用了,而且Received數(shù)據(jù)不斷增長。