單片機和數(shù)字電臺的串行通信
(作者未知) 2010/1/3
(接上頁)7實現(xiàn)單片機與電臺之間的電源隔離,增強系統(tǒng)抗干擾性能。
單片機通過帶控制端的三態(tài)緩沖門74HC125、非門74HC14控制電臺的收發(fā)轉(zhuǎn)換,以及指令的接收和數(shù)據(jù)發(fā)送。接收時,P3.5=1,c2=1,74HC125B截止;P3.5經(jīng)74HC14反相、光電隔離,使電臺PPT腳為低電平,將其置為接收狀態(tài);同時c1=0,74HC125A導(dǎo)通,接收的指令由電臺的RXD端輸入,經(jīng)MAX232電平變換、光電隔離、74HC125A緩沖門,送入單片機RXD腳。發(fā)射時,P3.5=0,經(jīng)74HC14反相、光電隔離,使電臺PPT腳為高電平,將其置為發(fā)射狀態(tài);同時c1=1,74HC125A截止,c2=0,74HC125B導(dǎo)通,數(shù)據(jù)由單片機TXD腳輸出,經(jīng)74HC125B緩沖門、光電隔離、MAX232電平變換,通過電臺TXD端口將數(shù)據(jù)發(fā)送出去。
3 通信軟件設(shè)計
通信軟件至關(guān)重要,一旦出現(xiàn)問題,整個系統(tǒng)就會癱瘓。采取差錯控制與容錯技術(shù)是非常重要的。
*主控站發(fā)送的指令中包含一定數(shù)量的同步符55H和3字節(jié)的密碼。測量站在連續(xù)收到5個同步符后進行密碼驗證,驗證通過后正式接收指令字節(jié);如未通過,則測量站發(fā)一信號讓主控站重發(fā),三次驗證不過則停發(fā)該命令。測量站發(fā)/主控站收時,驗證方式與此相同。驗證通過后,測量站開始發(fā)送數(shù)據(jù)。
*一個指令由3字節(jié)構(gòu)成,第二字節(jié)等于第一字節(jié)加上35H,第3字節(jié)等于第二字節(jié)加上36H。如果收到的指令不符合此規(guī)則,則重發(fā)該命令,連續(xù)三次錯誤時停發(fā)。
*主控站每發(fā)一個指令,測量站都回送一個應(yīng)答信號。該應(yīng)答信號中包含原指令樣本。
下面給出單片機串行口與電臺的基本通信程序。
初始化程序:
BTL EQU 2FH ;波特率放在內(nèi)部RAM的2FH單元
MOV TMOD,#21H;T0方式1,16位計數(shù)器,T1方式2,串口用
SETB TR0 ;啟動T0
MOV BTL,#0F3H ;波特率設(shè)定為1200
MOV SCON,#0C0H;串口方式3,9位數(shù)據(jù),禁止接收
接收及驗證程序:
NUM EQU 2BH ;同步符個數(shù)值存放在內(nèi)部RAM的2BH單元
TEMP EQU 2CH
ROM-CH:DB 55H,55H,55H,55H,55H,55H,55H,55H,55H,55H
DB 55H,55H,55H,55H,55H,55H,55H,55H,55H,55H ;20字節(jié)同步符
MIM DB ’WSC’:3字節(jié)密碼“WSC”
SETB P3.5 ;置電臺收狀態(tài)
SETB REN ;允許串口接收
A1:MOV NUM,#0 ;記錄連續(xù)到同步符55H的個數(shù)
A2:JB RI,A2 ;串口有數(shù)據(jù)轉(zhuǎn)A3
A3:CLR RI ;清接收中斷標志
MOV A,SBUF ;讀串口數(shù)據(jù)
CJNE A,#55H,A1;不是同步符轉(zhuǎn)A1
INC NUM ;收到的同步符個數(shù)加1
MOV A,NUM ;取收到的同步符個數(shù)
CJNE A,#5,A2 ;未收夠連續(xù)5個55H轉(zhuǎn)A2
A4:MOV NUM,#0 ;密碼驗證,記錄收到密碼字節(jié)數(shù)
A5:MOV DPTR,#MIM;密碼字符首址
MOV A,NUM
MOVC A,@A+DPTR;查表取密碼
MOV TEMP,A ;保存密碼
JB RI,A6 ;串口收完一個字節(jié)轉(zhuǎn)A6
…
A6:CLR RI ;清接收中斷標志
MOV A,SBUF ;讀串口數(shù)據(jù)
CJNE A,TEMP,A4;與密碼不符轉(zhuǎn)A4
INC NUM ;收到的密碼個數(shù)加1
MOV A,NUM ;取已收到的密碼字節(jié)數(shù)
CJNE A,#3,A5 ;密碼未收完轉(zhuǎn)A5
發(fā)送程序:
CLR P3.5 ;置電臺發(fā)狀態(tài)
MOV B,#23
MOV DPTR,#ROM-CH
B1:CLR A
MOVC A,@A+DPTR;查表發(fā)送同步符和密碼共24字節(jié)
INC DPTR
LCALL SEND-CH ;調(diào)發(fā)送單字節(jié)子程序
DJNZ B,B1
…
CLR A
MOV DPTR,#7000H;外部RAM數(shù)據(jù)首址,發(fā)送外部RAM中的數(shù)據(jù)到電臺
B2(未完,下一頁)
|