0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于P89C668單片機(jī)和SJA1000控制器實(shí)現(xiàn)節(jié)點(diǎn)接口電路的設(shè)計(jì)

電子設(shè)計(jì) ? 來(lái)源:機(jī)電設(shè)備 ? 作者:梁毓明,張振利, ? 2021-05-25 10:00 ? 次閱讀

CAN(Controller Area Network)總線,又稱控制器局域網(wǎng),屬于現(xiàn)場(chǎng)總線的范疇,是一種有效支持分布式控制或?qū)崟r(shí)控制的串行通信網(wǎng)絡(luò)。與其它幾種現(xiàn)場(chǎng)總線相比,CAN 總線是最容易實(shí)現(xiàn)、價(jià)格也最為低廉。由于其性能好,可靠性高、設(shè)計(jì)靈活,現(xiàn)已廣泛應(yīng)用于工業(yè)現(xiàn)場(chǎng)控制、智能大廈、小區(qū)防范、交通工具、醫(yī)療儀器、環(huán)境監(jiān)控等眾多領(lǐng)域。

CAN總線規(guī)范已被國(guó)際標(biāo)準(zhǔn)化組織(ISO)定為國(guó)際標(biāo)準(zhǔn),CAN協(xié)議也是建立在國(guó)際標(biāo)準(zhǔn)化組織的開放系統(tǒng)互連參考模型(OSI)基礎(chǔ)上的.CAN總線主要工作在數(shù)據(jù)鏈路層和物理層,用戶可在其基礎(chǔ)上開發(fā)適合系統(tǒng)實(shí)際需要的應(yīng)用層通信協(xié)議,由于CAN總線的可靠性高,使應(yīng)用層通信協(xié)議得以大大簡(jiǎn)化。目前市場(chǎng)上有多種不同型號(hào)的CAN控制器,它們實(shí)現(xiàn)CAN協(xié)議部分電路的結(jié)構(gòu)和功能大多相同,只是與單片機(jī)接口部分的結(jié)構(gòu)和方式有一些差異。

為了提高硬件電路的效率,簡(jiǎn)化電路設(shè)計(jì)上的復(fù)雜性,保證電路的電氣兼容性,本文采用PHILIPS公司生產(chǎn)的P89C668單片機(jī)和CAN控制器SJA1000設(shè)計(jì)了CAN接口節(jié)點(diǎn)電路,并介紹了相關(guān)的軟件設(shè)計(jì)。

1 CAN總線節(jié)點(diǎn)接口硬件電路設(shè)計(jì)

CAN節(jié)點(diǎn)接口硬件電路原理如圖1所示。采用PHILIPS公司生產(chǎn)的P89C668單片機(jī)、CAN控制器SJA1000和CAN總線收發(fā)器PCA82C250設(shè)計(jì)接口電路來(lái)實(shí)現(xiàn)CAN總線通信。

基于P89C668單片機(jī)和SJA1000控制器實(shí)現(xiàn)節(jié)點(diǎn)接口電路的設(shè)計(jì)

圖1 CAN總線接點(diǎn)接口硬件電路原理

P89C668單片機(jī)內(nèi)帶64kB Flash存儲(chǔ)器,該存儲(chǔ)器既可并行編程,在系統(tǒng)編程ISP中也可串行編程,在實(shí)際的成型產(chǎn)品中可通過(guò)ISP升級(jí)用戶程序。 在Boot ROM程序中,可通過(guò)一個(gè)默認(rèn)的串行下載器(UART)對(duì)Flash存儲(chǔ)器作ISP編程,而在Flash代碼區(qū)中并不需要調(diào)用下載器的代碼,用戶程序可通過(guò)調(diào)用在Boot ROM中的標(biāo)準(zhǔn)子程序?qū)lash存儲(chǔ)器擦除和再編程(即IAP)。

P89C688在6個(gè)時(shí)鐘周期內(nèi)執(zhí)行一條指令,一個(gè)OTP位讓用戶可選擇傳統(tǒng)的12個(gè)時(shí)鐘周期.P89C688用先進(jìn)CMOS工藝制造,是80C51單片機(jī)家族的衍生品,其指令集和80C51相同。該單片機(jī)有四個(gè)8位I/O口,三個(gè)16位定時(shí)器/事件計(jì)數(shù)器,多中斷源,四個(gè)優(yōu)先級(jí),可嵌套中斷結(jié)構(gòu),一個(gè)增強(qiáng)型UART和片內(nèi)振蕩器以及時(shí)序電路.P89C668新增特性使其成為一個(gè)功能強(qiáng)大的單片機(jī),可為某些應(yīng)用提供PWM、高速的I/O和加/減計(jì)數(shù)。

SJA1000 是PHILIPS 公司生產(chǎn)的獨(dú)立CAN 通信控制器,它既支持CAN2.0A,又支持CAN2.0B,與PCA82C200 CAN 控制器兼容(BasicCAN),并可替代PCA82C200;增加了一種新的工作模式PeliCAN,使其支持具有很多新特性的CAN2.0B 協(xié)議;集成了CAN 協(xié)議的物理層和數(shù)據(jù)鏈路層功能,可完成對(duì)通信數(shù)據(jù)的成幀處理;具有多主結(jié)構(gòu)、總線訪問(wèn)優(yōu)先權(quán)、硬件濾波等特點(diǎn)。

PC82C250為CAN總線收發(fā)器,是CAN 控制器和物理總線的接口,提供對(duì)總線的驅(qū)動(dòng)發(fā)送能力、對(duì)CAN控制器的差動(dòng)發(fā)送能力和對(duì)CAN控制器的差動(dòng)接收能力。它具有很強(qiáng)的抗瞬間干擾和保護(hù)總線的能力,以及三種不同的工作方式即高速、斜率控制和待機(jī),如表1所示??偩€上的某一個(gè)節(jié)點(diǎn)掉電不會(huì)影響總線,在40米內(nèi)應(yīng)用的速度可達(dá)1M baud,最多可掛110個(gè)節(jié)點(diǎn)。

從圖1 可看出,該硬件電路主要由單片機(jī)P89C668、CAN 獨(dú)立控制器SJA1000 和CAN 收發(fā)器PCA82C250 組成。

單片機(jī)P89C668 負(fù)責(zé)對(duì)SJA1000 進(jìn)行初始化,通過(guò)控制SJA1000實(shí)現(xiàn)數(shù)據(jù)的發(fā)送與接收等通信任務(wù)。

SJA1000 的AD0“AD7連接到P89C668 的P0口;

CS連接到P89C668的P1.1,P1.1 為0 時(shí)選中SJA1000,可控制SJA1000;

SJA1000 的RD/E、WR、ALE/AS 分別連接到P89C668 的RD(P3.7)、WR(P3.6)、P1.0;

SJA1000的(INT)連接到P89C668 的P3.2(INT0),這樣,P89C668 可以通過(guò)中斷方式訪問(wèn)SJA1000;

SJA1000的模式選擇引腳MODE 接高電平時(shí)選擇Intel 模式;

為了保證時(shí)鐘同步,SJA1000 的CLKOUT 引腳使能,向P89C668 提供時(shí)鐘源。

2 CAN 總線節(jié)點(diǎn)接口軟件設(shè)計(jì)

實(shí)現(xiàn)CAN 總線通信,要對(duì)CAN 總線節(jié)點(diǎn)接口設(shè)計(jì)相應(yīng)的總線通信程序;在總線通信之前,必須進(jìn)行SJA1000 控制器初始化。在上電或復(fù)位后,單片機(jī)通過(guò)運(yùn)行其自身復(fù)位程序初始化SJA1000.CAN總線通信程序大致由SJA1000 初始化、發(fā)送和接收三部分組成。以下分別對(duì)他們進(jìn)行簡(jiǎn)單的描述。

2.1 SJA1000 初始化

在上電后,CAN 控制器的RST 腳獲得一個(gè)復(fù)位脈沖,使之進(jìn)入復(fù)位模式。在開始對(duì)SJA1000 各個(gè)配置寄存器進(jìn)行設(shè)定之前,主控制器通過(guò)讀復(fù)位/請(qǐng)求標(biāo)識(shí)來(lái)檢測(cè)SJA1000是否進(jìn)入復(fù)位模式。為了避免微控制器的上電復(fù)位時(shí)間和SJA1000 的復(fù)位時(shí)間的偏差,微控制器要等待SJA1000 完成上電復(fù)位后才能對(duì)SJA1000 配置寄存器進(jìn)行配置,存有配置信息的寄存器只能在復(fù)位模式下才可進(jìn)行寫入.SJA1000 初始化程序在復(fù)位模式下,主控制器要配置下面的寄存器:

(1)模式寄存器(僅在PeliCAN 模式下選擇應(yīng)用操作模式)

接收過(guò)濾模式

自檢測(cè)模式

偵聽(tīng)模式

(2)時(shí)鐘分頻寄存器

使用BasicCAN 或PeliCAN 模式

CLKOUT 引腳是否可以使用

CAN 輸入比較器是否被跳過(guò)

TX1 輸出是否專門用于接收中斷輸出

(3)總線定時(shí)寄存器

定義總線的位速率

定義位周期內(nèi)的采樣點(diǎn)位采樣點(diǎn)

定義一個(gè)位周期的采樣數(shù)量

(4)接收代碼和接收掩碼寄存器

定義要接收消息的接收代碼

定義與接收代碼相關(guān)位進(jìn)行比較的接收掩碼

(5)輸出控制寄存器

定義CAN 總線輸出引腳TX0 和TX1 的配置

在將這些配置信息配置到SJA1000配置寄存器后,通過(guò)消除復(fù)位模式,請(qǐng)求使SJA1000進(jìn)入操作模式。一定要確保復(fù)位標(biāo)志真的被刪除,并且在沒(méi)有進(jìn)行CAN 總線通信前進(jìn)入操作模式,這可以通過(guò)讀該標(biāo)志來(lái)實(shí)現(xiàn)。 當(dāng)硬件復(fù)位處于掛起狀態(tài),即CAN 控制器的RST 引腳為低電平時(shí),復(fù)位模式/請(qǐng)求標(biāo)志不能被清除。

下面是SJA1000 的初始化程序。

CAN_INI: MOV DPTR, #MOD; 模式寄存器

MOV A, #01H

MOVX @DPTR, A

NOP

MOVX A, @DPTR

ANL A, #01H

JZ CAN_INI; 等待SJA1000 進(jìn)入復(fù)位模式

MOV DPTR, #BTR0; 總線定時(shí)0

MOV A, #BandRate0

MOV DPTR, #BTR1; 總線定時(shí)1

MOV A, # BandRate1

MOV DPTR, #OCR; 輸出控制寄存器

MOV A, #1AH

MOVX @DPTR, A

MOV DPTR, #CDR; 時(shí)鐘分頻器

MOV A, #0C0H

MOV DPTR, #ACR0; 接收代碼寄存器ACR0

MOV A, #ModuleAddress; 設(shè)置為模塊的地址

MOVX @DPTR, A

INC DPTR

MOV A, #0FFH

MOV @DPTR, A

INC DPTR

MOV A, #0FFH

MOVX @DPTR, A

INC DPTR

MOV A, #0FFH

MOVX @DPTR, A

MOV DPTR, #AMF0; 接收掩碼寄存器AMF0

MOV A, #0FFH; 接收代碼設(shè)置為

0X0FFFFFFFF

MOVX @DPTR, A

INC DPTR

MOV A, #0FFH

MOVX @DPTR, A

INC DPTR

MOV A, #0FFH

MOVX @DPTR, A

INC DPTR

MOV A, #0FFH

MOVX @DPTR, A

MOV DPTR, #IER ; 中斷使能寄存器IER

MOV A, #09H; 允許接收中斷和數(shù)據(jù)溢出中斷

MOV DPTR, #CMR; 命令寄存器

MOV A, #04H; 釋放接收緩沖器

MOVX @DPTR, A

LOOP: MOV DPTR, #MOD

MOV A, #08H; 設(shè)置SJA1000 工作模式為普通模式,單濾波接收

MOVX @DPTR, A

MOV DPTR, #MOD

MOV A, @DPTR

ANL A, #01H

JNZ LOOP; 等待復(fù)位標(biāo)識(shí)被清除

RET

2.2 CAN 總線發(fā)送程序

對(duì)SJA1000控制器進(jìn)行初始化建立CAN總線通信后,就可以通過(guò)CAN總線發(fā)送和接收?qǐng)?bào)文。發(fā)送程序負(fù)責(zé)節(jié)點(diǎn)的報(bào)文發(fā)送。發(fā)送報(bào)文時(shí),用戶只需將需要發(fā)送的數(shù)據(jù)按一定的格式組合成一幀的報(bào)文,并送入SJA1000發(fā)送緩存區(qū)中,然后啟動(dòng)SJA1000發(fā)送即可。發(fā)送程序分發(fā)送數(shù)據(jù)幀和遠(yuǎn)程幀兩種。通過(guò)設(shè)置RTR以決定是發(fā)送數(shù)據(jù)幀還是遠(yuǎn)程幀。

SJA1000的報(bào)文主要有中斷控制和查詢兩種發(fā)送方式。主動(dòng)發(fā)送報(bào)文建議采用查詢方式,一次發(fā)送不成功,可再次發(fā)送,這樣發(fā)送程序的處理比較簡(jiǎn)單,可采用查詢SJA1000控制部分狀態(tài)標(biāo)識(shí)符的方法。下面給出以查詢方式發(fā)送報(bào)文的發(fā)送程序。

CAN_SEND: MOV DPTR, #SR; 狀態(tài)寄存器SR

MOVX A, @DPTR;

ANL A, #04H

JZ CAN_SEND; 等待發(fā)送寄存器釋放

MOV R7, #0AH

MOV R0, #TXB_Data; 待發(fā)送數(shù)據(jù)的首地址

MOV DPTR, #TXB_Addr; 發(fā)送寄存器的基地址

LOOP1: MOV A, @R0; 將數(shù)據(jù)寫入發(fā)送寄存器

MOVX @DPTR, A

INC DPTR

INC R0

DJNZ R7, LOOP1

MOV DPTR, #CMR; 命令寄存器

MO A, #01H; 發(fā)送請(qǐng)求命令

MOVX @DPTR, A

RET

2.3 CAN總線接收程序

SJA1000 根據(jù)規(guī)則自動(dòng)接收消息,接收到的消息放入接收緩沖器,同時(shí)接收緩沖器狀態(tài)標(biāo)志位RBS 置為1,接收程序根據(jù)RBS 值來(lái)決定接收?qǐng)?bào)文與否.SJA1000 報(bào)文的接收也有兩種方式:中斷和查詢。對(duì)通信的實(shí)時(shí)性要求不高時(shí),可采用查詢方式,否則采用中斷方式。以下給出中斷接收方式程序。

CAN_INT: CLR EA; 關(guān)所有中斷

MOV DPTR, #IER; 中斷寄存器IER 使能

MOVX A, @DPTR

MOV R6, A; 保存SJA1000 中斷允

MOV A, #00H ; 重設(shè)SJA1000 中斷允許模式為不允許任何中斷

MOVX @DPTR, A

LCALL RECEIVE; 接收信息

JZ ReceivOk; 接收到的信息正確則跳轉(zhuǎn),否則進(jìn)行錯(cuò)誤處理。. 。.; 錯(cuò)誤處理

ReceivOk: MOV DPTR, #IER

MOV A, R6; 恢復(fù)SJA1000 中斷允許模式

MOVX @DPTR, A

SETB EA; 開放中斷

RETI

RECEIVE: CLR A

MOV DPTR, #SR; 狀態(tài)寄存器SR

JZ ERROR; 不是正常的消息接收中斷則跳轉(zhuǎn)

LOOP2: MOV DPTR, #RXB_Addr; 接收寄存器的基地址

MOV R1, #RXB_Data; 存放所接收數(shù)據(jù)的首地址

MOV R7, #0AH

LOOP3: MOVX A, @DPTR; 接收數(shù)據(jù)

MOV @R1, A; 保存數(shù)據(jù)

INC DPTR

INC R1

DJNZ R7, LOOP3

MOV DPTR, #CMR; 命令寄存器

MOV A, #0X04; 釋放接收緩沖器

MOVX @DPTR, A

MOV DPTR, #SR

MOVX A, @DPTR

CJNE A, #01H, LOOP2; 等待接收隊(duì)列為空

MOVD PTR, #IR; 中斷寄存器IR

MOVX A, @DPTR; 清空SJA1000 的接收中斷標(biāo)識(shí)位

CLR A; 返回值A(chǔ)CC=0,表示接收消息正確

LJMP END_RECEIVE

ERROR: 。. 。.; 接收消息錯(cuò)誤處理

MOVA, #01H; 返回值A(chǔ)CC=1,表示接收消息不正確

NED_RECEIVE: RET

3 結(jié)語(yǔ)

以上介紹了P89C668單片機(jī)及其與CAN控制器SJA1000之間的接口方法,并給出了SJA1000在PeliCAN模式下的SJA1000初始化程序、發(fā)送程序和接收程序??稍诖嘶A(chǔ)上實(shí)現(xiàn)更復(fù)雜的CAN總線通信處理,如報(bào)警處理、錯(cuò)誤處理等。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6026

    文章

    44456

    瀏覽量

    631026
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16037

    瀏覽量

    176693
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8366

    瀏覽量

    150548
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于SJA1000的完整CAN節(jié)點(diǎn)設(shè)計(jì)

    獨(dú)立的 CAN 控制器 SJA1000 有兩種不同的操作模式:(1)BasicCAN 模式(PCA82C200 兼容);(2) PeliCAN 模式。
    的頭像 發(fā)表于 06-18 17:16 ?8748次閱讀
    基于<b class='flag-5'>SJA1000</b>的完整CAN<b class='flag-5'>節(jié)點(diǎn)</b>設(shè)計(jì)

    CAN控制器SJA1000及其應(yīng)用

    ;單片機(jī)SJA1000簡(jiǎn)介SJA1000是PHILIPS公司早期CAN控制器PCA82C200的替代品,功能更強(qiáng),具有如下特點(diǎn)
    發(fā)表于 10-03 14:15

    CAN控制器SJA1000片選基址怎么確定?

    初學(xué)CAN總線,在學(xué)習(xí)SJA1000時(shí)不知道怎樣確定其片選基址,書上說(shuō)將SJA1000當(dāng)做外部存儲(chǔ)來(lái)對(duì)待,其基址根據(jù)具體的硬件電路來(lái)確定,用的是STC
    發(fā)表于 07-03 20:53

    采用P89C668單片機(jī)實(shí)現(xiàn)CAN總線接口設(shè)計(jì)

    節(jié)點(diǎn)接口硬件電路設(shè)計(jì) CAN節(jié)點(diǎn)接口硬件電路原理如圖1所示.采用PHILIPS公司生產(chǎn)的
    發(fā)表于 05-06 09:18

    C8051F020型單片機(jī)SJA1000控制器接口電路

    圖為C8051F020型單片機(jī)SJA1000控制器的硬件連接電路原理。SJA1000占用了0
    發(fā)表于 06-14 05:00

    基于多P89C668單片機(jī)的組合邏輯電路自動(dòng)測(cè)試診斷系統(tǒng)設(shè)計(jì)

    摘要:詳細(xì)介紹了基于多P89C668單片機(jī)的組合邏輯電路自動(dòng)測(cè)試診斷系統(tǒng)的設(shè)計(jì),包括硬件結(jié)構(gòu)設(shè)計(jì)和軟件設(shè)計(jì)。該自動(dòng)測(cè)試診斷系統(tǒng)采用USB接口實(shí)現(xiàn)計(jì)算機(jī)與診斷平臺(tái)的通信,其移動(dòng)式結(jié)構(gòu)便于
    發(fā)表于 07-01 07:28

    SJA1000 在CAN 總線系統(tǒng)節(jié)點(diǎn)的應(yīng)用

    介紹CAN 總線控制器SJA1000; 給出其在CAN 總線系統(tǒng)節(jié)點(diǎn)中的應(yīng)用方法、節(jié)點(diǎn)電路原理圖及初始化程序; 針對(duì)應(yīng)用
    發(fā)表于 05-13 16:43 ?62次下載

    SJA1000控制器在多電機(jī)綜合保護(hù)中的應(yīng)用

    介紹了基于獨(dú)立CAN總線控制器SJA1000的井下多電機(jī)綜合保護(hù)的設(shè)計(jì)過(guò)程。圍繞綜合保護(hù)核心控制器AT
    發(fā)表于 12-08 16:43 ?45次下載

    SHARC DSP與SJA1000的CAN總線接口設(shè)計(jì)

    SHARC DSP與SJA1000的CAN總線接口設(shè)計(jì) 本文討論了DSP與CAN控制器SJA1000的總線接口的差別,提出了
    發(fā)表于 09-27 16:10 ?1395次閱讀
    SHARC DSP與<b class='flag-5'>SJA1000</b>的CAN總線<b class='flag-5'>接口</b>設(shè)計(jì)

    SJA1000 獨(dú)立的CAN 控制器應(yīng)用指南

    SJA1000 獨(dú)立的CAN 控制器應(yīng)用指南。
    發(fā)表于 05-06 11:29 ?31次下載

    基于P89C668單片機(jī)的智能定硫儀系統(tǒng)設(shè)計(jì)栗紅生

    基于P89C668單片機(jī)的智能定硫儀系統(tǒng)設(shè)計(jì)_栗紅生
    發(fā)表于 03-17 08:00 ?0次下載

    DSP與CAN控制器SJA1000的總線接口的差別

    SJA1000簡(jiǎn)介 SJA1000是一種獨(dú)立的CAN控制器,用于移動(dòng)目標(biāo)和一般工業(yè)環(huán)境中的控制器局域網(wǎng)絡(luò)(CAN)。它是Philips公司早期CAN
    發(fā)表于 10-30 15:00 ?5次下載

    基于FPGA的VHDL語(yǔ)言設(shè)計(jì)控制器SJA1000的IP軟核設(shè)計(jì)

    分析了CAN控制器SJA1000的特點(diǎn)及CAN協(xié)議通信格式。設(shè)計(jì)了控制器SJA1000的IP軟核,能為應(yīng)用提供一個(gè)性能優(yōu)良的、易于移植的控制器
    發(fā)表于 04-12 10:55 ?3035次閱讀
    基于FPGA的VHDL語(yǔ)言設(shè)計(jì)<b class='flag-5'>控制器</b><b class='flag-5'>SJA1000</b>的IP軟核設(shè)計(jì)

    基于SJA1000的CAN節(jié)點(diǎn)設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于SJA1000的CAN節(jié)點(diǎn)設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-13 11:40 ?6次下載
    基于<b class='flag-5'>SJA1000</b>的CAN<b class='flag-5'>節(jié)點(diǎn)</b>設(shè)計(jì)

    SJA1000獨(dú)立CAN控制器英文資料

    電子發(fā)燒友網(wǎng)站提供《SJA1000獨(dú)立CAN控制器英文資料.pdf》資料免費(fèi)下載
    發(fā)表于 10-13 10:53 ?1次下載
    <b class='flag-5'>SJA1000</b>獨(dú)立CAN<b class='flag-5'>控制器</b>英文資料