新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC單片機CAN總線通訊匯編程序

        PIC單片機CAN總線通訊匯編程序

        作者: 時間:2012-12-11 來源:網絡 收藏

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

        LIST P=18F458
        INCLUDE "P18F458.INC"

        CAN_FLAG EQU 0X20 ;定義標志寄存器

        ORG 0X00
        GOTO MAIN
        ORG 0X18
        GOTO CAN_INTSERVE ;轉向中斷服務子程序
        ORG 0X30

        ;*********初始化子程序***************
        INITIAL
        BCF TRISB,2
        BSF TRISB,3 ;設置CANRX/RB3為輸入
        ;CANTX/RB2為輸出
        ;設置CAN的波特率為125K,在Fosc=4M時,Tbit=8us,假設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 ;請求進入CAN配置模式REQOP=100
        WAIT
        BTFSS CANSTAT,OPMODE2 ;等待進入CAN配置模式OPMODE=100
        GOTO WAIT
        MOVLW 0X01
        MOVWF BRGCON1 ;設置SJW和BRP,SJW=1TQ,BRP=01H
        MOVLW 0X90
        MOVWF BRGCON2 ;設置Phase_Seg1=3TQ和Prog _Seg=1TQ
        MOVLW 0X42
        MOVWF BRGCON3 ;設置Phase_Seg2=3TQ
        ;設置發送郵箱0標識符號和發送的數據
        MOVLW 0XFF
        MOVWF BSR ;TXB0D0到TXB0D7的地址在F60h以內,需
        ;要指定BSR
        MOVLW 0X08
        MOVWF TXB0DLC ;設置數據長度為8個字節
        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 ;寫發送緩沖器數據區的數據
        MOVLW 0XFF
        MOVWF TXB0SIDH
        MOVLW 0XE0
        MOVWF TXB0SIDL ;設置發送緩沖器0的標準標識符,本程序采用
        ;標準識符
        ;設置接收郵箱0的標識符和初始化數據
        MOVLW 0XFF
        MOVWF RXB0SIDH
        MOVLW 0XE0
        MOVWF RXB0SIDL ;設置接收緩沖器0的標識符
        MOVLW 0XFF
        MOVWF RXF0SIDH
        MOVLW 0XE0
        MOVWF RXF0SIDL ;初始化接收濾波器0
        MOVLW 0X00
        MOVWF RXM0SIDH
        MOVLW 0X00
        MOVWF RXM0SIDL ;初始化接收屏蔽
        MOVLW 0X20
        MOVWF RXB0CON ;僅僅接收標準標識符的有效信息,FILHIT0=0
        ;表示RXB0采用filter0
        MOVLW 0X08
        MOVWF RXB0DLC ;設置接收緩沖器0的數據區長度
        MOVLW 0X00
        MOVWF RXB0D0
        MOVWF RXB0D1
        MOVWF RXB0D2
        MOVWF RXB0D3
        MOVWF RXB0D4
        MOVWF RXB0D5
        MOVWF RXB0D6
        MOVWF RXB0D7 ;初始化接收緩沖器0的數據區數據
        ;初始化CAN模塊的I/O控制寄存器
        MOVLW 0X00
        MOVWF CIOCON
        ;使CAN進入某種工作模式模式
        MOVLW 0X00
        MOVWF CANCON ;=0X40,進入自測試模式;
        ;=0x00,正常操作模式
        WAIT1
        MOVF CANSTAT
        ANDLW 0XE0
        SUBLW 0X00
        BTFSS STATUS,Z ;等待進入CAN正常操作模式OPMODE=000
        ;或測試模式OPMODE=010
        GOTO WAIT1
        ;初始化CAN的中斷
        MOVLW 0X00
        MOVWF PIR3 ;清所有中斷標志
        BSF PIE3,RXB0IE ;使能接收緩沖器0的接收中斷
        MOVLW 0X01
        MOVWF IPR3 ;接收緩沖器0的接收中斷為最高優先級
        RETURN

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

        ;****************主程序******************
        ;****************此程序首發于http://www.51hei.com/ 單片機網 轉載請保留
        MAIN NOP
        CLRF INTCON ;禁止所有中斷
        CALL INITIAL ;初始化
        BSF INTCON,GIE
        BSF INTCON,PEIE ;使能中斷
        MOVLW 0X03
        MOVWF TXB0CON ;發送優先級為最高優先級,TXPRI=11
        LOOP
        BSF TXB0CON,TXREQ ;請求發送,TXREQ=1
        WAITE2
        BTFSS PIR3,TXB0IF ;等待發送完成
        GOTO WAITE2
        BCF PIR3,TXB0IF
        WAITE3
        BTFSS CAN_FLAG,0 ;等待接收數據
        GOTO WAITE3
        BCF CAN_FLAG,0 ;清接收到標志
        BCF TXB0CON,TXREQ ;禁止發送
        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 ;用接收數據加1來更新發送數據
        GOTO LOOP
        RETURN
        END



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 陇川县| 扎鲁特旗| 四会市| 滦平县| 绍兴市| 大同县| 石屏县| 莱芜市| 道真| 长海县| 隆安县| 同仁县| 庆安县| 三明市| 谷城县| 原阳县| 化州市| 高州市| 龙山县| 扶沟县| 南昌市| 抚远县| 澳门| 拉萨市| 金秀| 年辖:市辖区| 西宁市| 汝州市| 蛟河市| 苍溪县| 婺源县| 墨江| 会昌县| 吐鲁番市| 沅陵县| 泾川县| 科技| 绍兴县| 舞阳县| 宜宾县| 昌都县|