同樣,從節(jié)點也要求準(zhǔn)確的波特率和計時,對時鐘要求較高。建議采用22.1184MHz晶振。 在查詢方式的硬件電路中,為了能及時感受到主節(jié)點報文頭的起始階段,可以將串口接收數(shù)據(jù)端,RXD端與單片機的一個外部中斷觸發(fā)端口(INTl或INT0)相連。這樣,當(dāng)主節(jié)點發(fā)送過來的間隔場的下降沿到來時,就可以實時地觸發(fā)從節(jié)點進入對報文頭的接收查詢程序段。在報文頭的接收查詢過程中,從節(jié)點自總線電平下降沿到來之際,就對總線顯性電平(低電平)持續(xù)的時間進行累積計算,直到發(fā)現(xiàn)總線恢復(fù)為隱性電平(高電平)為止。如果此段持續(xù)時間大于11個主節(jié)點工作位時時間,那么從節(jié)點就斷定是一次幀通信的開始。接著從節(jié)點對同步字節(jié)場的接收作好準(zhǔn)備,在同步字節(jié)場開始位的第一個下降沿起,連續(xù)對同步字節(jié)場的后4個下降沿進行計時累加,最后將得到的計時時間除以8,得到主節(jié)點發(fā)送數(shù)據(jù)的位時時間,即主節(jié)點下一步將要進行數(shù)據(jù)通信的波特率。從節(jié)點以此作為串口波特率設(shè)定值,通過串口與主節(jié)點交換數(shù)據(jù)。隨后的串口發(fā)送或接收數(shù)據(jù)可采用串口查詢或中斷的方式進行。
間隔場和同步字節(jié)場的計時方法有兩種:一種方法是采用軟件模擬一個位時時間,在各階段通過計算調(diào)用位時程序次數(shù)間接計算出時間;另一種方法是將定時器TO設(shè)定成定時一個位時時間后中斷,在各個階段查詢定時器T0中斷次數(shù),通過計算TO中斷次數(shù)的差值,也可以間接算出各個階段的持續(xù)時間長度。
查詢方式硬件電路簡單,系統(tǒng)中斷的種類和次數(shù)少,程序運行比較穩(wěn)定;但不足之處是系統(tǒng)大部分時間都花費在對幀報文頭的等待查詢上,系統(tǒng)資源利用率低。
中斷方式則是對查詢方式的不足之處改進和提高,其硬件原理如圖5所示。

中斷方式的優(yōu)點是,對主程序運行的影響比較小,系統(tǒng)的資源利用率高。不足之處是增加了單片機的外圍電路,硬件稍顯復(fù)雜。
3.2基于單片機普通端口位LIN協(xié)議的實現(xiàn)
對于沒有通用串口的單片機來講,必須采用端口位位操作的方法來實現(xiàn)LIN協(xié)議。這類單片機的硬件資源一般很有限,有的只有一個定時器,還不具備外部中斷能力,如Microchip的PIC18F200系列。這種單片機的突出特點是價格低廉,做出的LIN節(jié)點將具有無可比擬的價格優(yōu)勢。
(1)基于普通端口位LIN主節(jié)點的實現(xiàn)
基于單片機普通端口位的1IN主節(jié)點,在報文頭和數(shù)據(jù)場的實現(xiàn)上都要采用位操作的方法來實現(xiàn)。其硬件構(gòu)成原理圖和基于單片機通用串口LIN主節(jié)點硬件原理圖完全相同,區(qū)別在于前者數(shù)據(jù)收發(fā)端RXD和TXD端可以是任意的單片機普通端口位,而后者則必須采用單片機通用串口。
報文頭間隔場的實現(xiàn)可以將定時器TO設(shè)置為定時一個位時中斷的工作方式,置LIN數(shù)據(jù)發(fā)送端TXD為顯性電平(低電位),啟動定時器T0對顯性電平持續(xù)時間進行計時,當(dāng)達到13個以上位時后置LIN發(fā)送數(shù)據(jù)端TXD為隱性電平(高電位),這樣就完成了間隔場的發(fā)送。在隨后的間隔場界定符和同步場的實現(xiàn)上,也采用同樣的方法。在數(shù)據(jù)場的接收和發(fā)送中,同樣需要定時器TO的配合來完成。發(fā)送數(shù)據(jù)時,從待發(fā)數(shù)據(jù)存儲區(qū)中依次取出一個個數(shù)據(jù),轉(zhuǎn)換成10個bit類型的位數(shù)據(jù)。定時器T0同樣是1個位時中斷1次,在中斷處理程序中改變計時變量值。發(fā)送數(shù)據(jù)程序根據(jù)計時變量的差值將lO個bit類型的位數(shù)據(jù)依次按照持續(xù)1個位時時間從數(shù)據(jù)發(fā)送端TXD端發(fā)出;接收數(shù)據(jù)時,則需要先用定時器T0計時半個位時時間,以檢測1個字節(jié)的開始位,然后恢復(fù)定時器TO的一個位時計時中斷設(shè)定。這樣,在隨后的數(shù)據(jù)位檢測中就能保證在數(shù)據(jù)位的中間時刻檢測該數(shù)據(jù)位,從而保證數(shù)據(jù)位接收的正確性。在10個bit類型的位數(shù)據(jù)接收完畢后,還要將其轉(zhuǎn)換為一個byte類型的數(shù)據(jù),存入相應(yīng)的數(shù)據(jù)緩沖區(qū)。
(2)基于普通端口位LIN從節(jié)點的實現(xiàn)
基于單片機普通端口位LIN從節(jié)點硬件電路和基于單片機通用串口查詢方式的從節(jié)點硬件電路基本相同,區(qū)別同樣也是沒有用到單片機的通用串口。
由于沒有外部中斷的功能,因此對主節(jié)點發(fā)送過來的報文頭的接收只能靠從節(jié)點主動地等待查詢?紤]到從節(jié)點程序不可能一直在查詢等待與主節(jié)點同步,因此從節(jié)點應(yīng)該不定時地去查詢等待主節(jié)點的報文頭。開始階段設(shè)置定時器為不定長時間中斷方式,時間到后從節(jié)點去查詢等待主節(jié)點發(fā)送的報文幀。當(dāng)檢測到同步信息后,設(shè)置定時器為標(biāo)準(zhǔn)位時時間中斷方式,對從節(jié)點接收或發(fā)送數(shù)據(jù)過程進行位時界定。從節(jié)點按照上述提到的位操作方法接收PID場,并轉(zhuǎn)換為byte類型的數(shù)據(jù),判斷下一步數(shù)據(jù)場的發(fā)送或接收方向,接著按照位操作的方法實現(xiàn)數(shù)據(jù)的發(fā)送或接收。定時器的兩種工作方式在查詢等待和報文通信過程中輪流轉(zhuǎn)換,在報文通信過程結(jié)束后,重新設(shè)置定時器為不定長時間中斷方式,等待下一次的報文通信過程,以此類推。
從節(jié)點由于采用不定期查詢等待方法與主節(jié)點的同步,因此通信成功率不高;但對于數(shù)據(jù)通信速率和實時性要求不是很高的場合,還可以滿足要求。如果單片機有外部中斷能力,則可以改從節(jié)點不定期查詢?yōu)閺墓?jié)點用外部中斷查詢主節(jié)點發(fā)送來的報文,這樣通信的成功率就可以大大提高。
結(jié) 語
相對于增強型單片機,普通單片機的功能顯得簡單多了,資源也很有限,但它有一個價格低廉的優(yōu)勢。而LIN總





