⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sja100_can_rx.asm

📁 SJA100的CAN初始化以及接收子程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
   MOVLW    0EH
   MOVWF    PORTD
   CALL     WRREG
   MOVLW    22H
   MOVWF    PORTD
   CALL     WRREG1   
;*************************第四个数据,33H**********************************
   MOVLW    0FH         
   MOVWF    PORTD
   CALL     WRREG
   MOVLW    33H
   MOVWF    PORTD
   CALL     WRREG1
;**************************第五个数据,44H*********************************
   MOVLW    010H         
   MOVWF    PORTD
   CALL     WRREG
   MOVLW    44H
   MOVWF    PORTD
   CALL     WRREG1
;**************************第六个数据,55H*********************************
   MOVLW    011H
   MOVWF    PORTD
   CALL     WRREG
   MOVLW    55H
   MOVWF    PORTD
   CALL     WRREG1
;***************************第七个数据,66H*******************************
   MOVLW    012H
   MOVWF    PORTD
   CALL     WRREG
   MOVLW    66H
   MOVWF    PORTD
   CALL     WRREG1
;***************************第八个数据,77H********************************
   MOVLW    013H
   MOVWF    PORTD
   CALL     WRREG
   MOVLW    77H
   MOVWF    PORTD
   CALL     WRREG1
;****************************启动发送位发送数据***************************
   MOVLW    01H
   MOVWF    PORTD
   CALL     WRREG
   MOVLW    01H
   MOVWF    PORTD
   CALL     WRREG1
   BSF      SJALE
   RETURN
;***************************发送子程序结束********************************
;***************************发送子程序结束********************************
;***************************发送子程序结束********************************
;***************************发送子程序结束********************************


;***********读状态寄存器的值********************
RDSR
   MOVLW   00H         
   MOVWF   TRISD
   MOVLW   02H
   MOVWF   PORTD 
   BSF     SJCS
   BSF     SJALE
   BSF     SJRD
   BSF     SJWR
   NOP
   BCF     SJALE
   BCF     SJCS
   BCF     SJRD
   NOP
   MOVLW    0FFH
   MOVWF    TRISD
   NOP
   MOVFF    PORTD,BPORTD
   RETURN
;******************读中断寄存器的值*********************************
RDIR
   MOVLW   00H         
   MOVWF   TRISD
   MOVLW   03H
   MOVWF   PORTD 
   BSF     SJCS
   BSF     SJALE
   BSF     SJRD
   BSF     SJWR
   NOP
   BCF     SJALE
   BCF     SJCS
   BCF     SJRD
   NOP
   MOVLW    0FFH
   MOVWF    TRISD
   NOP
   MOVFF    PORTD,BPORTD
   RETURN
;******************读仲裁丢失寄存器的值*********************************
RDALC
   MOVLW   00H         
   MOVWF   TRISD
   MOVLW   0BH
   MOVWF   PORTD 
   BSF     SJCS
   BSF     SJALE
   BSF     SJRD
   BSF     SJWR
   NOP
   BCF     SJALE
   BCF     SJCS
   BCF     SJRD
   NOP
   MOVLW    0FFH
   MOVWF    TRISD
   RETURN

;******************读错误代码捕捉寄存器的值*********************************
RDECC
   MOVLW   00H         
   MOVWF   TRISD
   MOVLW   0CH
   MOVWF   PORTD 
   BSF     SJCS
   BSF     SJALE
   BSF     SJRD
   BSF     SJWR
   NOP
   BCF     SJALE
   BCF     SJCS
   BCF     SJRD
   NOP
   MOVLW    0FFH
   MOVWF    TRISD
   RETURN
;******************************************************
RECDATA
   CALL     RDSR           
   MOVLW    3CH
   CPFSEQ   BPORTD
   GOTO     PROC
   RETURN
PROC
   BTFSC    BPORTD,7    ;状态寄存器第七位为1,总线关闭
   GOTO     BUSEER      ;总线关闭,调用总线错误处理程序
   GOTO     PROC1       ;总线开启,继续处理
PROC1
   CALL     RDIR        ;读中断寄存器
   BTFSC    BPORTD,3    ;IR.3为1,数据溢出中断
   GOTO     OVER        ;IR.3为1,调用数据溢出处理程序
   GOTO     OTHER       ;IR.3为0,数据没有溢出,继续处理
OTHER
   BTFSS    BPORTD,0    ;IR.0为1,接收FIFO满或者接收中断使能
   GOTO     RECOUT      ;IR.0为0,接收FIFO无数据,退出接收
   GOTO     RECE
RECE
   CALL     TDATA1
   MOVLW    00H         
   MOVWF    TRISD
   MOVLW    15H
   MOVWF    PORTD 
   BSF      SJCS
   BSF      SJALE
   BSF      SJRD
   BSF      SJWR
   NOP
   BCF      SJALE
   BCF      SJCS
   BCF      SJRD
   NOP
   MOVLW    0FFH
   MOVWF    TRISD
   MOVFF    PORTD,BPORTD
   BTFSC    BPORTD,4
   GOTO     TS    ;如果为远程帧,则发送对方请求的数据
   CALL     RDATA  
 
;******************判断收到的数据,用状态灯显示
   MOVLW    00H
   MOVWF    TRISD
   BTFSS    REBUFF8,0 
   CALL     LED0
   BTFSS    REBUFF8,1
   CALL     LED1
   BTFSS    REBUFF8,2
   CALL     LED2
   BTFSS    REBUFF8,3
   CALL     LED3 
   BTFSS    REBUFF8,4
   CALL     LED4
   BTFSS    REBUFF8,5
   CALL     LED5
   BTFSS    REBUFF8,6
   CALL     LED6
   BTFSS    REBUFF8,7
   CALL     LED7  
   RETURN
RDATA
   MOVLW   00H         ;接收八个数据字节,送入自己定义的寄存器中
   MOVWF   TRISD
   MOVLW   16H
   MOVWF   PORTD 
   CALL    RDATA1
   MOVFF   PORTD,REBUFF1

   MOVLW   00H         
   MOVWF   TRISD
   MOVLW   17H
   MOVWF   PORTD 
   CALL    RDATA1
   MOVFF   PORTD,REBUFF2

   MOVLW   00H         
   MOVWF   TRISD
   MOVLW   18H
   MOVWF   PORTD 
   CALL    RDATA1
   MOVFF   PORTD,REBUFF3

   MOVLW   00H         
   MOVWF   TRISD
   MOVLW   19H
   MOVWF   PORTD 
   CALL    RDATA1
   MOVFF   PORTD,REBUFF4
   
   MOVLW   00H         
   MOVWF   TRISD
   MOVLW   1AH
   MOVWF   PORTD 
   CALL    RDATA1
   MOVFF   PORTD,REBUFF5

   MOVLW   00H         
   MOVWF   TRISD
   MOVLW   1BH
   MOVWF   PORTD 
   CALL    RDATA1
   MOVFF   PORTD,REBUFF6

   MOVLW   00H         
   MOVWF   TRISD
   MOVLW   1CH
   MOVWF   PORTD 
   CALL    RDATA1
   MOVFF   PORTD,REBUFF7

   MOVLW   00H         
   MOVWF   TRISD
   MOVLW   1DH
   MOVWF   PORTD 
   CALL    RDATA1
   MOVFF   PORTD,REBUFF8
   
   MOVLW    00H      ;数据接收结束,释放接收缓冲区
   MOVWF    TRISD
   MOVLW    01H         
   MOVWF    PORTD
   CALL     WRREG
   MOVLW    04H
   MOVWF    PORTD
   CALL     WRREG1
   RETURN
RDATA1
   BSF     SJCS
   BSF     SJALE
   BSF     SJRD
   BSF     SJWR
   NOP
   BCF     SJALE
   BCF     SJCS
   BCF     SJRD
   NOP
   MOVLW    0FFH
   MOVWF    TRISD
   RETURN
;*******************发送远程帧请求的数据**************************
TS
   MOVLW    00H            
   MOVWF    TRISD
   MOVLW    01H
   MOVWF    PORTD
   CALL     WRREG
   MOVLW    04H
   MOVWF    PORTD
   CALL     WRREG1
   NOP
   CALL     TDATA1
   CALL     RECOUT
   RETURN
RECOUT               ;退出接收
   CALL     RDALC
   CALL     RDECC
   RETURN

OVER                 ;数据溢出处理程序
   MOVLW    00H            
   MOVWF    TRISD
   MOVLW    01H
   MOVWF    PORTD
   CALL     WRREG
   MOVLW    0CH
   MOVWF    PORTD
   CALL     WRREG1
   RETURN

;**********************总线错误处理程序**********************************
BUSEER
   CALL     RDIR         ;******读中断寄存器使之复位
   
;***********************将方式寄存器复位**************************************
   MOVLW    00H            
   MOVWF    TRISD
   MOVLW    00H
   MOVWF    PORTD
   CALL     WRREG
   MOVLW    0FEH
   MOVWF    PORTD
   CALL     WRREG1
   RETURN
;***********************总线错误处理程序结束**********************************  

   
;****************************主程序开始******************************************************
   
main_p    code    0x0700
INIT    NOP
    CLRF    INTCON
    CLRF    INTCON2
    CLRF    INTCON3     ;清除中断寄存器
    CALL    PORT_Init
    CALL    SJA1000_INT0
    NOP
    NOP 
    BCF     COMM_LED
    CALL    DELY
    BSF     COMM_LED
;*****************接收数据程序************************************************************
REPET
    CALL    RECDATA
    NOP
    NOP
    GOTO    REPET
    GOTO    INIT
    END

    
    


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -