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

📄 sja_bcanfunc.asm

📁 SJA1000驱动程序(分别用C&ASM书写)
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;$INCLUDE (SJA_BCANCONF.ASM)
;************************************************************************
;*   广州周立功单片机发展有限公司    http://www.zlgmcu.com              *
;************************************************************************
;************************************************************************
;*                                                                      *
;*  CAN 控制器SJA1000基本CAN汇编子程序说明(BasicCAN 工作方式)          *
;*                                                                      *
;************************************************************************
;************************************************************************
;*                                                                      *
;*  目的:       用户在应用SJA1000组成CAN网络中通过简单的参数设置和调用  *
;*              本文件提供函数便能使自己的CAN系统进行基本的调试和运行   *
;*                                                                      *
;*  文件名:     SJA_BCANFUNC.ASM                                        *
;*                                                                      *
;*  模块名:     --                                                      *
;*                                                                      *
;*  目标系统:   任何基于任何兼容8051指令的微处理器同SJA1000组成的CAN    *
;*              系统                                                    *
;*                                                                      *
;*  应用语言:   Keil ASM-51 or Intel ASM-51                             *
;*                                                                      *
;************************************************************************
;*  版本 :V1.0                                                          *
;*                                                                      *
;************************************************************************
;*  广州周立功单片机发展有限公司 保留所有的版权                         *
;************************************************************************

;//以下为函数定义
;************************************************************************
;*函数:      BCAN_CREATE_COMMUNATION                                    *
;*应用资源:  DPTR,ACC,F0                                                *
;*参数说明:  无                                                         *
;*返回值:    F0,存放返回值                                              *
;*           0 ; 表示SJA1000接口正常                                    *
;*           1 ; 表示SJA1000与处理器接口不正常                          *
;*                                                                      * 
;*说明:该函数用于检测CAN控制器的接口是否正常                            *
;************************************************************************
;*子程序调用示例:                                                       *
;* USER_CODE:                          ;;用户代码                       *
;*    -----   -----                                                     *
;*    LCALL   BCAN_CREATE_COMMUNATION  ;;调用子程序                     *
;*    JNB     F0,      USER_CODE1      ;;继续用户代码                   *           
;*    LJMP    ERROR_PRG                ;;接口不正常跳到错误处理         *
;*                                                                      *
;* USER_CODE1:                                                          *
;*    -----   -----                    ;;用户代码                       *  
;************************************************************************

BCAN_CREATE_COMMUNATION:     
      MOV            DPTR,   #REG_TEST                  ;对测试寄存器进行读写测试  
      MOVX           A,      @DPTR
      MOV            A,      #0AAH                      ;写入值0AAH 
      MOVX           @DPTR,  A                           
      SETB           F0  
      MOVX           A,      @DPTR                      ;读出值
      CJNE           A,      #0AAH,BCAN_CM_QUIT         ;测试写入读出是否正确
      MOV            A,      #055H                      ;再次测试
      MOVX           @DPTR,  A                          ;写入055H
      MOVX           A,      @DPTR
      CJNE           A,      #055H,BCAN_CM_QUIT         ;测试写入读出是否正确    
      CLR            A                                  ;清零测试寄存器                                     
      MOVX           @DPTR,  A 
      CLR            F0                                 ;接口正确
BCAN_CM_QUIT:
      RET                    

;************************************************************************
;*函数:      BCAN_ENTER_RETMODEL                                        *
;*应用资源:  DPTR,ACC,F0                                                *
;*参数说明:  无                                                         *
;*返回值:    F0,存放返回值                                              *
;*           0 ; 表示成功进入复位工作模式                               *
;*           1 ; 表示不能进入复位工作模式                               *
;*                                                                      * 
;*说明:CAN控制器进入复位工作模式                                        *
;************************************************************************
;*子程序调用示例:                                                       *
;* USER_CODE:                          ;;用户代码                       *
;*    -----   -----                                                     *
;*    LCALL   BCAN_ENTER_RETMODEL      ;;调用子程序                     *
;*    JNB     F0,      USER_CODE1      ;;继续用户代码                   *            
;*    LJMP    ERROR_PRG                ;;复位请求不成功跳到错误处理     *
;*                                                                      *
;* USER_CODE1:                                                          *
;*    -----   -----                    ;;用户代码                       *  
;************************************************************************
BCAN_ENTER_RETMODEL:
      MOV            DPTR,   #REG_CONTROL       ;控制寄存器访问  
      MOVX           A,      @DPTR              ;
      ORL            A,      #01H               ;置位复位请求
      MOVX           @DPTR,  A                              ;
      CLR            F0
      MOVX           A,      @DPTR              ;验证复位是否写入
      JB             ACC.0,  BCAN_ER_QUIT
      SETB           F0                         ;复位不成功
BCAN_ER_QUIT:
      RET


;************************************************************************
;*函数:      BCAN_QUIT_RETMODEL                                         *
;*应用资源:  DPTR,ACC,F0                                                *
;*参数说明:  无                                                         *
;*返回值:    F0,存放返回值                                              *
;*           0 ; 表示成功退出复位工作模式                               *
;*           1 ; 表示不能退出复位工作模式                               *
;*                                                                      * 
;*说明:CAN控制器退出复位工作模式,进入工作模式                          *
;************************************************************************
;*子程序调用示例:                                                       *
;* USER_CODE:                          ;;用户代码                       *
;*    -----   -----                                                     *
;*    LCALL   BCAN_QUIT_RETMODEL       ;;调用子程序                     *
;*    JNB     F0,      USER_CODE1      ;;继续用户代码                   *            
;*    LJMP    ERROR_PRG                ;;不能退出复位模式跳到错误处理   *
;*                                                                      *
;* USER_CODE1:                                                          *
;*    -----   -----                    ;;用户代码                       *  
;************************************************************************
BCAN_QUIT_RETMODEL:
      MOV            DPTR,   #REG_CONTROL   ; 控制寄存器访问  
      MOVX           A,      @DPTR          ;
      ANL            A,      #0FEH          ;清零复位请求,进入工作状态
      MOVX           @DPTR,  A
      CLR            F0
      MOVX           A,      @DPTR           
      JNB            ACC.0,  BCAN_QR_QUIT   ;验证是否退出复位状态
      SETB           F0
BCAN_QR_QUIT:
      RET





;************************************************************************
;*函数:      BCAN_DATA_WRITE                                            *
;*应用资源:  DPTR,ACC,R0,R7                                             *
;*参数说明:                                                             *
;*    R0:存放待发送特定帧各式的数据的首地址                             *
;*                                                                      *
;*返回值:    F0,存放返回值                                              *
;*           0 ; 表示将数据成功的送至发送缓冲区                         *
;*           1 ; 表示上一次的数据正在发送,                             *
;*             ; 表示发送缓冲区被锁定,不能写入数据                     *
;*             ; 表示写入数据错误                                       *
;*                                                                      * 
;*说明: 将待发送特定帧各式的数据,送入SJA1000发送缓存区中,然后启动     *
;*        SJA1000发送。                                                 *
;*      特定帧格式为:开始的两个字节存放 '描述符' ,以后的为数据          *
;*   描述符包括11位长的ID(标志符)\1位RTR\4位描述数据长度的DLC共16位    *
;*                                                                      *
;*注:本函数的返回值仅指示,将数据正确写入SJA1000发送缓存区中与否。     *
;*    不指示SJA1000将该数据正确发送到CAN总线上完毕与否,要向总线发送请在*
;*    本子程序后调用发送命令                                            *
;************************************************************************
;*子程序调用示例:                                                       *
;* USER_CODE:                          ;;用户代码                       *
;*    -----   -----                                                     *
;*    MOV     R0,      #DATA_BUF0      ;;装入微处理器要发送数据的首地址 *
;*    LCALL   BCAN_DATA_WRITE          ;;调用子程序                     *
;*    JNB     F0,      USER_CODE1      ;;继续用户代码                   *            
;*    LJMP    ERROR_PRG                ;;写入发送缓冲区错跳到错误处理   *
;*                                                                      *
;* USER_CODE1:                                                          *
;*    -----   -----                    ;;用户代码                       *  
;************************************************************************
BCAN_DATA_WRITE:
      MOV            DPTR,   #REG_STATUS  ;读取状态寄存器
      MOVX           A,      @DPTR        ;判断上次发送是否完成
      SETB           F0
      JNB            ACC.3,  BCAN_DW_QUIT ;正在发送退出
      CLR            F0               
      MOVX           A,      @DPTR        ;判断发送缓冲区是否锁定,
      SETB           F0 
      JNB            ACC.2,  BCAN_DW_QUIT ;锁定则跳出                     
      CLR            F0     
           
      INC            R0                   ;

⌨️ 快捷键说明

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