<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用PIC18F458的CAN模塊實(shí)現(xiàn)CAN總線通訊

          用PIC18F458的CAN模塊實(shí)現(xiàn)CAN總線通訊

          作者: 時(shí)間:2016-11-21 來源:網(wǎng)絡(luò) 收藏

            CAN(Controller Area Network)即控制器區(qū)域網(wǎng),是一種主要用于各種設(shè)備監(jiān)測(cè)及控制的網(wǎng)絡(luò)。CAN 具有獨(dú)特的設(shè)計(jì)思想, 良好的功能特征和極高的可靠性,現(xiàn)場(chǎng)抗干擾能力強(qiáng)。其在國內(nèi)外工業(yè)控制領(lǐng)域已經(jīng)被廣泛應(yīng)用, 成為最有發(fā)展前途的現(xiàn)場(chǎng)總線之一。

          本文引用地址:http://www.ex-cimer.com/article/201611/319436.htm

            美國微芯公司的PIC18F458 單片機(jī)集成了CAN 通信接口,執(zhí)行Bosch 公司的CAN2.0A/B 協(xié)議。它能支持CAN1.2、CAN2.0A、CAN2.0B 協(xié)議的舊版本和CAN2.0B現(xiàn)行版本。使用PIC18F458 單片機(jī)的嵌入式系統(tǒng), 可以很方便的利用CAN 總線與外界進(jìn)行數(shù)據(jù)交換。它的優(yōu)點(diǎn)是電路接口比較簡(jiǎn)單,只需很少的外圍電路就可實(shí)現(xiàn)CAN 通信, 受硬件限制比較少;軟件編程容易實(shí)現(xiàn)所需功能, 只需對(duì)相關(guān)寄存器進(jìn)行正確設(shè)置即可。

            1 硬件接口電路

            PIC18F458 與CAN 驅(qū)動(dòng)芯片PCA82C250T 的接口電路如圖1 所示。PCA82C250T 是驅(qū)動(dòng)CAN 控制器和物理總線間的接口, 提供對(duì)總線的差動(dòng)發(fā)送和接收功能。電阻R 作為CAN 終端的匹配電阻;電感L 起濾波作用。

            

            2 CAN 控制器的操作

            2.1 初始化CAN 控制

            在使用CAN 之前, 必須對(duì)它的一些內(nèi)部寄存器進(jìn)行設(shè)置, 如CAN 控制寄存器CANCON 、波特率寄存器BRGCONx 的設(shè)置以及對(duì)郵箱進(jìn)行初始化。

            波特率寄存器BRGCONx(x=1,2, 3)決定了CAN 控制器的波特率、采樣次數(shù)、同步跳轉(zhuǎn)寬度和重同步方式,對(duì)波特率寄存器的配置步驟如下:

            設(shè)置CANCON 寄存器中的C A N 操作方式請(qǐng)求位為1xx,即REQOP=1xx;

            判斷CANSTAT 寄存器中的操作方式狀態(tài)位是否為100,即OPMODE 是否為100,如OPMODE=100 則進(jìn)入下一步;

            設(shè)置BRGCONx(x=1,2,3)寄存器,即配置正確的波特率, 同步跳轉(zhuǎn)寬度、采樣次數(shù)和重同步方式;

            設(shè)置發(fā)送郵箱和接收郵箱的標(biāo)識(shí)符、郵箱數(shù)據(jù)長(zhǎng)度、屏蔽寄存器、濾波寄存器以及初始化郵箱的數(shù)據(jù)區(qū);

            設(shè)置CANCON 寄存器中的CAN 操作方式請(qǐng)求位為000,即REQOP=000,使CAN 模塊進(jìn)入正常工作方式;

            判斷CANSTAT 寄存器中的操作方式狀態(tài)位是否為000,即OPMODE 是否為000,如OPMODE=000 則進(jìn)入下一步;

            寄存器配置和郵箱初始化完成后,進(jìn)入正常工作方式。

            

            初始化流程圖如圖2 所示。

          2.2 信息的發(fā)送

            PIC18F458 有3 個(gè)發(fā)送郵箱緩沖器,每一個(gè)發(fā)送緩沖器的數(shù)據(jù)長(zhǎng)度可以設(shè)置為1 ~ 8 個(gè)字節(jié)長(zhǎng)度, 信息發(fā)送的具體步驟如下:

           ?、?初始化發(fā)送郵箱;

           ?、?設(shè)置相應(yīng)的發(fā)送請(qǐng)求位為1 ,即TXBxCON bits.TXREQ=1(x=1,2,3);

           ?、?若CAN 總線允許發(fā)送, 則啟動(dòng)最高優(yōu)先級(jí)信息的發(fā)送;

           ?、?若發(fā)送成功,則TXREQ 被清零,TXBxIF 被置1,如果中斷被使能, 則會(huì)產(chǎn)生中斷;

           ?、?若信息發(fā)送失敗,則TXREQ 保持為1 ,并置位相應(yīng)的狀態(tài)標(biāo)志。

            2.3 信息的接收

            PIC18F458 有2 個(gè)具有多重接收濾波器的完全接收緩沖器和1 個(gè)單獨(dú)信息組合的緩沖器。接收郵箱初始化時(shí),要設(shè)置其標(biāo)識(shí)符及相關(guān)的屏蔽寄存器、接收優(yōu)先級(jí)等。

            MAB 寄存器接收所有來自總線的下一條信息,RXB0 和RXB1 則接收來自協(xié)議驅(qū)動(dòng)的完整信息。MAB 接收所有信息, 但是只有滿足過濾條件的信息才被傳送到RXBx 中。

            3 軟件設(shè)計(jì)

            下面的程序例程實(shí)現(xiàn)的是發(fā)送緩沖器0 向接收緩沖器0 發(fā)送數(shù)據(jù)的自測(cè)試模式, 其中接收采用中斷方式,發(fā)送采用查詢方式。該程序?qū)崿F(xiàn)了PIC18F458 單片機(jī)CAN 模塊的最小程序, 經(jīng)過適當(dāng)修改即可用于實(shí)際工程程序中, 并在實(shí)現(xiàn)工程中驗(yàn)證了它的正確性。

            #include

            int CAN_FLAG;

            voidiNItcan(){

            TRISB=(TRISB|0X08)&0XFB;

            CANCON=0X80;

            while(CANSTAT&0X80==0)continue;

            BRGCON1=0X01;

            BRGCON2=0X90;

            BRGCON3=0X42;

            TXB0CON=0X03;

            TXB0SIDH=0XFF;

            TXB0SIDL=0XE0;

            TXB0DLC=0X08;

            TXB0D0=0X00;

            TXB0D1=0X01;

            TXB0D2=0X02;

            TXB0D3=0X03;

            TXB0D4=0X04;

            TXB0D5=0X05;

            TXB0D6=0X06;

            TXB0D7=0X07;

            RXB0SIDH=0XFF;

            RXB0SIDL=0XE0;

            RXB0CON=0X20;

            RXB0DLC=0X08;

            RXB0D0=0X00;

            RXB0D1=0X00;

            RXB0D2=0X00;

            RXB0D3=0X00;

            RXB0D4=0X00;

            RXB0D5=0X00;

            RXB0D6=0X00;

            RXB0D7=0X00;

            RXF0SIDH=0XFF;

            RXF0SIDL=0XE0;

            RXM0SIDH=0X00;

            RXM0SIDL=0X00;

            CANCON=0X40;

            while(CANSTAT&0X40==0)continue;

            PIR3=0X00;

            PIE3=0X01;

            IPR3=0X01;

            }

            #pragma interrupt can_isr

            #pragma CODe low_ISR=0x18

            void low_ISR() {

            _asm

            gotocan_isr

            _endasm

            }

            #pragma code

            voidcan_isr() {

            if(PIR3bits.RXB0IF==1)CAN_FLAG=1;

            PIR3bits.RXB0IF=0;

            RXB0CONbits.RXFUL=0;

            }

            main(){

            INTCON=0x00;

            initcan();

            W D T C O N = 0 ;

            INTCON=0xc0;

            while(1) {

            TXB0CONbits.TXREQ=1;

            while(PIR3bits.TXB0IF!=1)continue;

            while(CAN_FLAG==0)continue;

            CAN_FLAG=0;

            TXB0CONbits.TXREQ=0;

            TXB0D0=RXB0D0+1;

            TXB0D1=RXB0D1+1;

            TXB0D2=RXB0D2+1;

            TXB0D3=RXB0D3+1;

            TXB0D4=RXB0D4+1;

            TXB0D5=RXB0D5+1;

            TXB0D6=RXB0D6+1;

            TXB0D7=RXB0D7+1;

            }

            }



          關(guān)鍵詞: PIC18F458CAN模塊總線通

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();