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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PIC單片機(jī)CAN總線通訊匯編程序

          PIC單片機(jī)CAN總線通訊匯編程序

          作者: 時間:2012-12-11 來源:網(wǎng)絡(luò) 收藏

          ;該實(shí)現(xiàn)發(fā)送緩沖器0向接收緩沖器0發(fā)送數(shù)據(jù)的自測試模式,單片機(jī)采用P18F458,其中接收采用中斷方式,發(fā)送采用查詢方式,本例的c51程序請打開 http://www.51hei.com/mcu/555.html,流程和這個一樣的。

          LIST P=18F458
          INCLUDE "P18F458.INC"

          CAN_FLAG EQU 0X20 ;定義標(biāo)志寄存器

          ORG 0X00
          GOTO MAIN
          ORG 0X18
          GOTO CAN_INTSERVE ;轉(zhuǎn)向中斷服務(wù)子程序
          ORG 0X30

          ;*********初始化子程序***************
          INITIAL
          BCF TRISB,2
          BSF TRISB,3 ;設(shè)置CANRX/RB3為輸入
          ;CANTX/RB2為輸出
          ;設(shè)置CAN的波特率為125K,在Fosc=4M時,Tbit=8us,假設(shè)BRP=01h,則
          ;TQ=[2*(1+BRP)]/Fosc=2*(1+1)/4=1us。
          ;NOMINAL BIT RATE=8TQ,SJW=1,Sync_Seg=1TQ,Prog _Seg=1TQ,Phase_Seg1=3TQ,Phase_Seg2=3TQ
          MOVLW 0X80
          MOVWF CANCON ;請求進(jìn)入CAN配置模式REQOP=100
          WAIT
          BTFSS CANSTAT,OPMODE2 ;等待進(jìn)入CAN配置模式OPMODE=100
          GOTO WAIT
          MOVLW 0X01
          MOVWF BRGCON1 ;設(shè)置SJW和BRP,SJW=1TQ,BRP=01H
          MOVLW 0X90
          MOVWF BRGCON2 ;設(shè)置Phase_Seg1=3TQ和Prog _Seg=1TQ
          MOVLW 0X42
          MOVWF BRGCON3 ;設(shè)置Phase_Seg2=3TQ
          ;設(shè)置發(fā)送郵箱0標(biāo)識符號和發(fā)送的數(shù)據(jù)
          MOVLW 0XFF
          MOVWF BSR ;TXB0D0到TXB0D7的地址在F60h以內(nèi),需
          ;要指定BSR
          MOVLW 0X08
          MOVWF TXB0DLC ;設(shè)置數(shù)據(jù)長度為8個字節(jié)
          MOVLW 0X00
          MOVWF TXB0D0
          MOVLW 0X01
          MOVWF TXB0D1
          MOVLW 0X02
          MOVWF TXB0D2
          MOVLW 0X03
          MOVWF TXB0D3
          MOVLW 0X04
          MOVWF TXB0D4
          MOVLW 0X05
          MOVWF TXB0D5
          MOVLW 0X06
          MOVWF TXB0D6
          MOVLW 0X07
          MOVWF TXB0D7 ;寫發(fā)送緩沖器數(shù)據(jù)區(qū)的數(shù)據(jù)
          MOVLW 0XFF
          MOVWF TXB0SIDH
          MOVLW 0XE0
          MOVWF TXB0SIDL ;設(shè)置發(fā)送緩沖器0的標(biāo)準(zhǔn)標(biāo)識符,本程序采用
          ;標(biāo)準(zhǔn)識符
          ;設(shè)置接收郵箱0的標(biāo)識符和初始化數(shù)據(jù)
          MOVLW 0XFF
          MOVWF RXB0SIDH
          MOVLW 0XE0
          MOVWF RXB0SIDL ;設(shè)置接收緩沖器0的標(biāo)識符
          MOVLW 0XFF
          MOVWF RXF0SIDH
          MOVLW 0XE0
          MOVWF RXF0SIDL ;初始化接收濾波器0
          MOVLW 0X00
          MOVWF RXM0SIDH
          MOVLW 0X00
          MOVWF RXM0SIDL ;初始化接收屏蔽
          MOVLW 0X20
          MOVWF RXB0CON ;僅僅接收標(biāo)準(zhǔn)標(biāo)識符的有效信息,F(xiàn)ILHIT0=0
          ;表示RXB0采用filter0
          MOVLW 0X08
          MOVWF RXB0DLC ;設(shè)置接收緩沖器0的數(shù)據(jù)區(qū)長度
          MOVLW 0X00
          MOVWF RXB0D0
          MOVWF RXB0D1
          MOVWF RXB0D2
          MOVWF RXB0D3
          MOVWF RXB0D4
          MOVWF RXB0D5
          MOVWF RXB0D6
          MOVWF RXB0D7 ;初始化接收緩沖器0的數(shù)據(jù)區(qū)數(shù)據(jù)
          ;初始化CAN模塊的I/O控制寄存器
          MOVLW 0X00
          MOVWF CIOCON
          ;使CAN進(jìn)入某種工作模式模式
          MOVLW 0X00
          MOVWF CANCON ;=0X40,進(jìn)入自測試模式;
          ;=0x00,正常操作模式
          WAIT1
          MOVF CANSTAT
          ANDLW 0XE0
          SUBLW 0X00
          BTFSS STATUS,Z ;等待進(jìn)入CAN正常操作模式OPMODE=000
          ;或測試模式OPMODE=010
          GOTO WAIT1
          ;初始化CAN的中斷
          MOVLW 0X00
          MOVWF PIR3 ;清所有中斷標(biāo)志
          BSF PIE3,RXB0IE ;使能接收緩沖器0的接收中斷
          MOVLW 0X01
          MOVWF IPR3 ;接收緩沖器0的接收中斷為最高優(yōu)先級
          RETURN

          ;*********接收緩沖器0接收中斷服務(wù)程序***********
          CAN_INTSERVE
          BTFSS PIR3,RXB0IF
          GOTO ERR_EXIT
          BSF CAN_FLAG,0
          BCF PIR3,RXB0IF ;清接收中斷標(biāo)志
          BCF RXB0CON,RXFUL ;打開接收緩沖器來接收新信息
          ERR_EXIT
          RETFIE

          ;****************主程序******************
          ;****************此程序首發(fā)于http://www.51hei.com/ 單片機(jī)網(wǎng) 轉(zhuǎn)載請保留
          MAIN NOP
          CLRF INTCON ;禁止所有中斷
          CALL INITIAL ;初始化
          BSF INTCON,GIE
          BSF INTCON,PEIE ;使能中斷
          MOVLW 0X03
          MOVWF TXB0CON ;發(fā)送優(yōu)先級為最高優(yōu)先級,TXPRI=11
          LOOP
          BSF TXB0CON,TXREQ ;請求發(fā)送,TXREQ=1
          WAITE2
          BTFSS PIR3,TXB0IF ;等待發(fā)送完成
          GOTO WAITE2
          BCF PIR3,TXB0IF
          WAITE3
          BTFSS CAN_FLAG,0 ;等待接收數(shù)據(jù)
          GOTO WAITE3
          BCF CAN_FLAG,0 ;清接收到標(biāo)志
          BCF TXB0CON,TXREQ ;禁止發(fā)送
          INCF RXB0D0,0
          MOVWF TXB0D0
          INCF RXB0D1,0
          MOVWF TXB0D1
          INCF RXB0D2,0
          MOVWF TXB0D2
          INCF RXB0D3,0
          MOVWF TXB0D3
          INCF RXB0D4,0
          MOVWF TXB0D4
          INCF RXB0D5,0
          MOVWF TXB0D5
          INCF RXB0D6,0
          MOVWF TXB0D6
          INCF RXB0D7,0
          MOVWF TXB0D7 ;用接收數(shù)據(jù)加1來更新發(fā)送數(shù)據(jù)
          GOTO LOOP
          RETURN
          END



          評論


          相關(guān)推薦

          技術(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); })();