基于AT89C51型單片機(jī)的CAN總線智能節(jié)點(diǎn)設(shè)計(jì)
4 軟件設(shè)計(jì)
本文引用地址:http://butianyuan.cn/article/85600.htm4.1 網(wǎng)絡(luò)通信規(guī)則
CAN總線為多主工作方式,網(wǎng)絡(luò)上任一節(jié)點(diǎn)均可在任意時刻主動向網(wǎng)絡(luò)上其他節(jié)點(diǎn)發(fā)送信息而不分主從,通信方式靈活。為禁止總線沖突,CAN總線采用非破壞性總線仲裁技術(shù),根據(jù)需要將各個節(jié)點(diǎn)設(shè)定為不同的優(yōu)先級,并以標(biāo)識符ID標(biāo)定,其值越小,優(yōu)先級越高。總線的節(jié)點(diǎn)之間可以進(jìn)行實(shí)時相互通信,當(dāng)1個節(jié)點(diǎn)需要接收另1個節(jié)點(diǎn)的數(shù)據(jù)時,只需把其代碼寄存器的內(nèi)容設(shè)置成和另1節(jié)點(diǎn)的標(biāo)識符一致即可。如果對于標(biāo)識符和其代碼寄存器的內(nèi)容設(shè)置不一致,則節(jié)點(diǎn)所發(fā)的數(shù)據(jù)不予理會。
4.2 SJAl000的工作模式設(shè)置
SJAl000有二種工作模式:復(fù)位模式和工作模式。在復(fù)位模式下可對接收代碼、接收屏蔽、總線時序寄存器O和1及輸出控制寄存器進(jìn)行設(shè)置。一般在CAN初始化時完成對以上寄存器的設(shè)置,當(dāng)CAN進(jìn)入工作模式后,它們的值就不再變化。在工作模式下可進(jìn)行數(shù)據(jù)的發(fā)送和接收。特別要注意的是:當(dāng)硬件復(fù)位或控制器掉線時會自動進(jìn)入復(fù)位模式,這樣就不能進(jìn)行正常的CAN通信,這就要求對復(fù)位位進(jìn)行監(jiān)控。當(dāng)發(fā)生硬件復(fù)位或控制器掉線而進(jìn)入復(fù)位模式時,要求把復(fù)位位置為0并進(jìn)入工作模式,這樣CAN就能進(jìn)行正常發(fā)送和接收。
4.3 基于C語言的軟件編程
系統(tǒng)軟件的設(shè)計(jì)思想是系統(tǒng)上電后首先對AT89C51和SJAl000進(jìn)行初始化,以確定工作主頻、波特率、輸出特性等。其中任一智能節(jié)點(diǎn)可以利用查詢方式通過SJAl000從CAN總線上獲取所需的數(shù)據(jù)并把該數(shù)據(jù)傳送到PC上顯示,同時可以向總線上發(fā)送數(shù)據(jù)以供其他智能節(jié)點(diǎn)接收顯示。以下是具體實(shí)現(xiàn)程序。
以上就是進(jìn)行試驗(yàn)的程序,其中reg51.h是為AT89C52主控制器專門編寫的庫函數(shù),它在Keil軟件中是現(xiàn)成的,只要用#include語句包括進(jìn)來即可;intrins.h是為以后調(diào)用空函數(shù)_nop_()作準(zhǔn)備,它里面包括了類似于匯編語言的NOP語句;CAN_TOUWENJIAN.h是頭文件,用于對相關(guān)寄存器的定義。Tx_DATA_CAN()函數(shù)用于向總線發(fā)送數(shù)據(jù),REC_DATA_CAN()函數(shù)用于從總線接收數(shù)據(jù),SERIAL()用于PC與智能節(jié)點(diǎn)間的相互通信。限于篇幅,發(fā)送子程序和接收子程序沒有具體給出。
5 結(jié)束語
在CAN總線的開發(fā)試驗(yàn)過程中,筆者掌握了CAN總線智能節(jié)點(diǎn)的設(shè)計(jì),并在實(shí)踐中進(jìn)行了應(yīng)用。通過應(yīng)用證明,CAN總線具有以下優(yōu)點(diǎn):組網(wǎng)自由,擴(kuò)展性強(qiáng);自動錯誤界定,簡化了通信的操作;可根據(jù)數(shù)據(jù)內(nèi)容確定優(yōu)先權(quán),解決通信的實(shí)時性問題。此外,CAN網(wǎng)絡(luò)已在眾多工業(yè)控制系統(tǒng)中應(yīng)用,尤其在傳輸速率較高而且對實(shí)時性及可靠性要求高的場合,CAN總線將有廣闊的應(yīng)用前景。本文來源于《某型控制系統(tǒng)信號信息傳輸改進(jìn)研究》課題組,組長是劉永鴻教授,副組長是張文宏副教授,主要參與者有黃晨副教授、趙勇講師、李金剛研究生。
評論