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

📄 can.asm

📁 MCS-51单片机实验 39个实用实验和源码
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	CJNE    A,#05,NOMOVEDISPBIT
MOVEDISPBIT:	
	MOV     DISP_POINT,#00
	AJMP    NEXT_DISPBIT

NOMOVEDISPBIT:
	JNC    	MOVEDISPBIT

NEXT_DISPBIT:
	INC		SEC_COUNT_L                              ;单位时间计数器
	MOV		A,SEC_COUNT_L
	CJNE	A,#200,T0_QUIT                          ;判断1/5秒时间是否到
	MOV		SEC_COUNT_L,#00                          ;重新计数
	INC		SEC_COUNT_H                              ;单位时间计数器
	MOV		A,SEC_COUNT_H
	CJNE	A,#6,T0_QUIT                            ;判断1秒时间是否到
   	MOV		SEC_COUNT_H,#00                          ;重新计数
	SETB	SEC_FLAG                                ;置位1秒到标志
	INC		TEST_DATA                               ;测试发送的数据,每1秒加1
T0_QUIT:
	POP		ACC
	POP		PSW
	POP 	DPL
	POP 	DPH
	RETI

;;;;;;;LED 送显处理程序;;;;;;;;;;
DISPLAY_PRG:
	
    MOV     DPTR,#KEYLED_BUF
	MOV     A,#0FFH
	MOVX    @DPTR,A
	ORL     P1,#0F8H
;;;;;;;UP IS DISABLE DISPLAY;;;;;;;;;;
	MOV     A,#DISPLAYBUF0
	ADD     A,DISP_POINT
	MOV     R0,A
	MOV     A,@R0
	MOV     DPTR,#DISPSEG_TAB
    MOVC    A,@A+DPTR
	MOV     DPTR,#KEYLED_BUF
	MOVX    @DPTR,A
;;;;;;;;UP IS SEND SEG;;;;;
	MOV     A,DISP_POINT
	RL      A
    MOV     DPTR,#DISPBIT_TAB
    JMP     @A+DPTR
;LED段码译码
DISPSEG_TAB:
	DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H ;   //0X00--0X07
    DB 080H,090H,088H,083H,0c6H,0a1H,086H,08eH ;   //0X08--0X0f
	DB 0c8H,08cH,0bfH						   ;   //n,  p,   -
;LED位跳转
DISPBIT_TAB:
    JMP		DISP_LED0
    JMP		DISP_LED1
    JMP		DISP_LED2
    JMP		DISP_LED3
    JMP		DISP_LED4

DISP_LED0:
    CLR     EN_DISPBIT0
	JNB     FLIGHBIT0,DISP_QUIT
	JNB     FLIGHSYNC,DISP_QUIT
	SETB    EN_DISPBIT0
	AJMP    DISP_QUIT
DISP_LED1:
   	CLR     EN_DISPBIT1
	JNB     FLIGHBIT1,DISP_QUIT
	JNB     FLIGHSYNC,DISP_QUIT
	SETB    EN_DISPBIT1
	AJMP    DISP_QUIT
DISP_LED2:
	CLR     EN_DISPBIT2
	JNB     FLIGHBIT2,DISP_QUIT
	JNB     FLIGHSYNC,DISP_QUIT
	SETB    EN_DISPBIT2
	AJMP    DISP_QUIT

DISP_LED3:
	CLR     EN_DISPBIT3
	JNB     FLIGHBIT3,DISP_QUIT
	JNB     FLIGHSYNC,DISP_QUIT
	SETB    EN_DISPBIT3
	AJMP    DISP_QUIT
DISP_LED4:
	CLR     EN_DISPBIT4
	JNB     FLIGHBIT4,DISP_QUIT
	JNB     FLIGHSYNC,DISP_QUIT
	SETB    EN_DISPBIT4

DISP_QUIT:
    RET

;;;;;;;;;;系统出错时显示
DISP_ERROR:
    MOV    R0,#DISPLAYBUF0
	INC    R0
    MOV    @R0,#0EH
	INC    R0
	MOV    @R0,#12H
	INC    R0
	MOV    A,ERROR_STATUS
	ANL    A,#0F0H
	SWAP   A
	MOV    @R0,A
	INC    R0
	MOV    A,ERROR_STATUS
	ANL    A,#0FH
	MOV    @R0,A
	MOV    FLIGHDISP,#01FH
	RET

;;;;;;;;;;CAN通讯正常时显示
DISP_OK:
	CLR     A
	MOV     FLIGHDISP,A
	MOV     ERROR_STATUS,A
	MOV    R0,#DISPLAYBUF0+01
	MOV    @R0,#0
	INC    R0
	MOV    @R0,#12H
	INC    R0
	MOV    A,RCV_DATA_BUF3
	ANL    A,#0F0H
	SWAP   A
	MOV    @R0,A
	INC    R0
	MOV    A,RCV_DATA_BUF3
	ANL    A,#0FH
	MOV    @R0,A
	RET
;
;$INCLUDE (SJA_BCANCONF.ASM)

;//以下为函数定义
;************************************************************************
;*函数:      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                   ;
      MOV            A,      @R0          ;ID号的低3位 \RTR位 \数据长度DLC
      DEC            R0                   ;恢复指针指向发送数据的首地址
      MOV            DPTR,   #REG_TxBuffer1;发送缓冲区首地址

      JB             ACC.4,  BCAN_WYB     ;远程帧
      ;数据帧
      ANL            A,      #0FH         ;计算发送数据的长度
      ADD            A,      #02H
      MOV            R7,     A
      AJMP           BCAN_WRTXBUF         ;
 
BCAN_WYB:
      MOV            R7,     #02          ;写入发送缓冲区数据长度为2

BCAN_WRTXBUF:      
      MOV            A,      @R0          ;开始写入
      MOVX           @DPTR,  A
      SETB           F0
      MOVX           A,      @DPTR        ;校验写入的是否正确
      XRL            A,      @R0
      JNZ            BCAN_DW_QUIT         ;写入错误退出
      CLR            F0                   ;正确写入继续
      INC            R0
      INC            DPTR
      DJNZ           R7,     BCAN_WRTXBUF ;没有写完继续
        
BCAN_DW_QUIT:      
      RET 

;************************************************************************
;*函数:      BCAN_DATA_RECEIVE                                          *
;*应用资源:  DPTR,ACC,R0,R7 ,F0                                         *
;*参数说明:  R0,存放微处理器保存数据缓冲区的首地址                      *
;*返回值:    F0=0;接收成功                                              *
;*           F0=1;接收失败                                              * 
;*说明:CAN控制器接收数据,仅限于接收数据                                 *

⌨️ 快捷键说明

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