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

📄 sja_bcanfunc.asm

📁 sja1000的驱动开发包
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;*    R7:存放验收代码寄存器(ACR)的参数设置                            *
;*    R6:存放接收屏蔽寄存器(AMR)的参数设置                            *
;*返回值:    F0,存放返回值                                              *
;*           0 ;通信对象设置成功                                        *
;*           1 ;通信对象设置失败                                        *
;*                                                                      * 
;*说明:设置CAN节点的通讯对象,允许接收的报文ID号的高8位(D10--D3) 。     *
;*     允许接收的报文,是由AMR和ACR共同决定的.                           *  
;*    满足以下条件的ID号的报文才可以被接收                              *
;*[(ID.10-ID.3)≡(AC.7-AC.0)]||(AM.7-AM.0)≡11111111              *
;*    该子程序只能用于复位模式                                          *                                                                                                                     *             
;************************************************************************
;*子程序调用示例:                                                       *
;* USER_CODE:                          ;;用户代码                       *
;*    -----   -----                                                     *
;*    MOV     R7,      #0AAH           ;;只允许接收ID号高8位为'10101010'*
;*    MOV     R6,      #00H            ;;                               *
;*    LCALL   BCAN_SET_OBJECT          ;;调用子程序                     *
;*    JNB     F0,      USER_CODE1      ;;成功,继续用户代码             *            
;*    LJMP    ERROR_PRG                ;;失败,跳到错误处理             *
;*                                                                      *
;* USER_CODE1:                                                          *
;*    -----   -----                    ;;用户代码                       *  
;************************************************************************


BCAN_SET_OBJECT:
    MOV      DPTR,      #REG_ACR      ;写ACR寄存器
    MOV      A,         R7
    MOVX     @DPTR,     A
    MOVX     A,         @DPTR
    SETB     F0
    XRL      A,         R7            ;检验写入是否正确
    JNZ      BCAN_SETO_QUIT
    CLR      F0
    INC      DPTR                     ;写AMR寄存器
    MOV      A,         R6
    MOVX     @DPTR,     A
    MOVX     A,         @DPTR
    SETB     F0
    XRL      A,         R6            ;检验写入是否正确
    JNZ      BCAN_SETO_QUIT
    CLR      F0
BCAN_SETO_QUIT:
    RET    


;************************************************************************
;*子程序:    BCAN_SET_OUTCLK                                            *
;*应用资源:  DPTR,ACC,R6,R7,F0,B                                        *
;*    R7:存放输出寄存器(OCR)的参数设置                                *
;*    R6:存放时钟分品寄存器(REG_CDR)的参数设置                        *
;*返回值:    F0,存放返回值                                              *
;*           0 ;设置成功                                                *
;*           1 ;设置失败                                                *
;*                                                                      * 
;*说明:设置SJA1000的输出模式和时钟分频 。该子程序只能用于复位模式       *                                                                                                                     *             
;************************************************************************
;*子程序调用示例:                                                       *
;* USER_CODE:                          ;;用户代码                       *
;*    -----   -----                                                     *
;*    MOV     R7,      #0AAH           ;;输出为正常模式                 *
;*    MOV     R6,      #048H           ;;禁止CLKOUT,BasicCAN模式        *
;*    LCALL   BCAN_SET_OUTCLK          ;;调用子程序                     *
;*    JNB     F0,      USER_CODE1      ;;成功,继续用户代码             *            
;*    LJMP    ERROR_PRG                ;;失败,跳到错误处理             *
;*                                                                      *
;* USER_CODE1:                                                          *
;*    -----   -----                    ;;用户代码                       *  
;************************************************************************

BCAN_SET_OUTCLK:
    MOV      DPTR,      #REG_OCR      ;写OCR寄存器
    MOV      A,         R7
    MOVX     @DPTR,     A
    MOV      B,         A
    MOVX     A,         @DPTR
    SETB     F0
    CJNE     A,         B,   BCAN_SETOC_QUIT ;检验写入是否正确
    CLR      F0
    MOV      DPTR,      #REG_CDR            ;写CDR寄存器
    MOV      A,         R6
    MOVX     @DPTR,     A
    MOV      B,         A
    MOVX     A,         @DPTR
    SETB     F0
    CJNE     A,         B,   BCAN_SETOC_QUIT ;检验写入是否正确
    CLR      F0
BCAN_SETOC_QUIT :
    RET    




;************************************************************************
;*函数:      BCAN_CMD_PRG                                               *
;*应用资源:  DPTR,ACC,R7,F0                                             *
;*参数说明:  R7,存放命令字                                              *
;*             0x01          ;//发送请求命令                            *
;*             0x02          ;//夭折发送命令                            *
;*             0x04          ;//释放接收缓冲区                          *
;*             0x08          ;//清除超载状态                            *
;*             0x10          ;//进入睡眠状态命令                        *
;*                                                                      *
;*返回值:    F0,存放返回值                                              *
;*           0 ; 执行命令成功                                           *
;*           1 ; 执行命令失败                                           *
;*                                                                      * 
;*说明:本子程序为SJA1000的命令执行程序                                  *
;************************************************************************ 
;*子程序调用示例:                                                       *
;* USER_CODE:                          ;;用户代码                       *
;*    -----   -----                                                     *
;*    MOV     R7,      #01H            ;;发送请求命令                   *
;*    LCALL   BCAN_CMD_PRG             ;;调用子程序                     *
;*    JNB     F0,      USER_CODE1      ;;成功,继续用户代码             *            
;*    LJMP    ERROR_PRG                ;;失败,跳到错误处理             *
;*                                                                      *
;* USER_CODE1:                                                          *
;*    -----   -----                    ;;用户代码                       *  
;************************************************************************

BCAN_CMD_PRG:
     MOV           A,      R7
     CJNE          A,      #01,   BCAN_CMD1
     ;发送请求命令 
     MOV           DPTR,   #REG_COMMAND; 地址指向命令寄存器 
     MOVX          @DPTR,  A           ;写入命令字
     CLR           F0
     RET

BCAN_CMD1:
     CJNE          A,      #02,    BCAN_CMD2
     ;;//夭折发送命令
     MOV           DPTR,   #REG_STATUS ;地址指向状态寄存器
     MOVX          A,      @DPTR       ;判断是否有正在发送的状态
     SETB          F0
     JB            ACC.5,  BCAN_CMD_QUIT
     CLR           F0
BCAN_CMD_QUIT:
     RET

BCAN_CMD2:
     CJNE          A,      #04,    BCAN_CMD3          
     ;释放接收缓冲区 
     MOV           DPTR,   #REG_COMMAND; 地址指向命令寄存器 
     MOVX          @DPTR,  A           ;写入命令字          
     NOP
     NOP
     MOV           DPTR,   #REG_STATUS ;判断是否释放成功
     MOVX          A,      @DPTR 
     SETB          F0     
     JB            ACC.0,  BCAN_DB_QUIT  ;不成功跳转
     CLR           F0
BCAN_DB_QUIT:
     RET

BCAN_CMD3: 
     CJNE          A,      #08,    BCAN_CMD4
     ;清除超载状态  
     MOV           DPTR,   #REG_COMMAND; 地址指向命令寄存器 
     MOVX          @DPTR,  A           ;写入命令字          
     NOP
     NOP
     MOV           DPTR,   #REG_STATUS ;判断清除超载是否成功
     MOVX          A,      @DPTR 
     SETB          F0     
     JB            ACC.1,  BCAN_DOVER_QUIT  ;不成功跳转
     CLR           F0
BCAN_DOVER_QUIT:
     RET

BCAN_CMD4:
     CJNE          A,      #10H,    BCAN_CMD5
     ;进入睡眠状态命令 
     MOV           DPTR,   #REG_COMMAND; 地址指向命令寄存器 
     MOVX          @DPTR,  A           ;写入命令字 
     CLR           F0
BCAN_CMD5:
     RET

⌨️ 快捷键说明

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