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

📄 sja_pelifunc.asm

📁 591单片机CAN模块A51DEMO程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;;;//*
;********************************************************************************************************************
;*描述:    带CAN 控制器的单片机P8XC951基本硬件头文件定义 CAN 工作方式)
;*文件名:   CAN591_PELIFunc.ASM
;*应用语言: KEIL A51/L51	or	Intel A51/L51
;*版本 :    V1.0
;*广州周立功单片机发展有限公司 保留所有的版权
;;*******************************************************************************************************************
;;*/
  ;/*$page;*/
;/*
;;***********************************************************************************************************************
;;*                           导入头文件
;;***********************************************************************************************************************
;;*/
$INCLUDE(CAN591_PELICONF.ASM)	

;/*
;;***********************************************************************************************************************
;;*                           子程序说明
;;***********************************************************************************************************************
;;*/

;/*
;;***********************************************************************************************************************
;;*子程序:       SJATestInterface
;;*应用资源:	 R7,R6,ACC,DPTR,F0
;;*参数说明:     R7 ;存放测试值
;;*返回值:       R7 ; 
;;*              SJA_OK            ; 表示CAN591接口正常
;;*              SJA_INTERFACE_ERR ; 表示CAN591与处理器接口出错
;;*
;;*说明:         该子程序用于检测CAN控制器的接口是否正常
;;***********************************************************************************************************************
;;*/

;/*
;;***********************************************************************************************************************
;;*子程序:  	SJAEntryResetMode
;;*应用资源:	R7,R6,ACR,F0
;;*参数说明:  	无
;;*返回值:		R7
;;*           	SJA_OK             ; 表示CAN591进入复位模式成功
;;*           	SJA_ENTRYRESET_ERR ; 表示CAN591进入复位模式失败
;;*
;;*说明:     该子程序用于使CAN591进入复位模式
;;***********************************************************************************************************************
;;*/
SJAEntryResetMode:
	MOV	R6,#0FFH					;存放重复次数
	SETB    F0
SJAENTRSTMD0:	
	MOV	A,REG_CANMOD;
	SETB	ACC.0
	MOV     REG_CANMOD,A
    	MOV	A,REG_CANMOD
	JB	ACC.0,SJAENTRSTMD1
	DJNZ	R6,SJAENTRSTMD0
	AJMP	SJAENTRSTMD2
SJAENTRSTMD1:
	CLR		F0
SJAENTRSTMD2:
	JB		F0,SJAENTRSTMD3
	MOV		R7,#SJA_OK 
	RET
SJAENTRSTMD3:
	MOV		R7,#SJA_ENTRYRESET_ERR
	RET

;/*
;;***********************************************************************************************************************
;;*子程序:     	SJAQuitResetMode
;;*应用资源:	R7,R6,ACC,F0
;;*参数说明:  	无
;;*返回值:		R7
;;*           	SJA_OK             ; 表示CAN591退出复位模式成功
;;*           	SJA_QUITRESET_ERR  ; 表示CAN591退出复位模式失败
;;*
;;*说明:     该子程序用于使CAN591退出复位模式,进入工作模式
;;***********************************************************************************************************************
;;*/
SJAQuitResetMode:
	MOV	R6,#0FFH					;存放重复次数
	SETB    F0
SJAQUTRSTMD0:	
	MOV	A,REG_CANMOD
	CLR	ACC.0						;请复位请求位
	MOV     REG_CANMOD,A
    	MOV	A,REG_CANMOD
	JNB	ACC.0,SJAENTRSTMD1
	DJNZ	R6,SJAENTRSTMD0
	AJMP	SJAQUTRSTMD2
SJAQUTRSTMD1:
	CLR		F0
SJAQUTRSTMD2:
	JB		F0,SJAQUTRSTMD3
	MOV		R7,#SJA_OK 
	RET
SJAQUTRSTMD3:
	MOV		R7,#SJA_QUITRESET_ERR 
	RET

;/*
;;***********************************************************************************************************************
;;*子程序:     	SJATestRstMode
;;*应用资源:	ACC,F0
;;*参数说明:  	无
;;*返回值:		F0
;;*           	0   ; 表示CAN591处于复位模式
;;*           	1   ; 表示CAN591处于工作模式
;;*
;;*说明:     该子程序用于测试CAN591 处于复位模式还是工作模式
;;***********************************************************************************************************************
;;*/
SJATestRstMode:
	SETB	F0
	MOV	A,REG_CANMOD
	JNB	ACC.0,SJATestRM0
	CLR	F0
SJATestRM0:
	RET

;/*
;;***********************************************************************************************************************
;;*子程序:     	SJSetCanIER
;;*应用资源:	ACC,F0,R7,R6
;;*参数说明:    R7 ;存放设定值
;;*返回值:		R7
;;**     SJA_OK 	  ; 设置中断使能寄存器成功
;;**	 SJA_SETIER_ERR	  ; 设置中断使能寄存器失败
;;*
;;*说明:     该函数用于591的CAN中断使能设置
;;***********************************************************************************************************************
;;*/
SJASetCanIER:
	MOV	R6,#0FFH					;存放重复次数
	SETB    F0
        MOV     REG_CANADR,#REG_CAN_IER
SJASETCIRMD0:	
	MOV	REG_CANSTA,R7
	MOV     A,REG_CANDAT
        XRL     A,R7
	JZ	SJASETCIRMD1
	DJNZ	R6,SJASETCIRMD0
	AJMP	SJASETCIRMD2
SJASETCIRMD1:
	CLR		F0
SJASETCIRMD2:
	JB		F0,SJASETCIRMD3
	MOV		R7,#SJA_OK 
	RET
SJASETCIRMD3:
	MOV		R7,#SJA_SETIER_ERR
	RET

;/*
;;***********************************************************************************************************************
;;*子程序:     	SJASetAccMode
;;*应用资源:	ACC,F0,R7,R6
;;*参数说明:    R7 ;存放设定值
;;*返回值:		R7
;;**     SJA_OK 	  	; 设置代码验收滤波器工作模式寄存器成功
;;**	 SJA_SETACFMODE_ERR	; 设置代码验收滤波器工作模式寄存器错误
;;*
;;*说明:     该函数用于设置591代码验收滤波器工作模式
;;***********************************************************************************************************************
;;*/
SJASetAccMode:
	MOV	R6,#0FFH					;存放重复次数
	SETB    F0
        MOV     REG_CANADR,#REG_CAN_ACFMOD
SJASETAMDMD0:	
	MOV	REG_CANDAT,R7
	MOV     A,REG_CANDAT
        XRL     A,R7
	JZ	SJASETAMDMD1
	DJNZ	R6,SJASETAMDMD0
	AJMP	SJASETAMDMD2
SJASETAMDMD1:
	CLR		F0
SJASETAMDMD2:
	JB		F0,SJASETAMDMD3
	MOV		R7,#SJA_OK 
	RET
SJASETAMDMD3:
	MOV		R7,#SJA_SETACFMODE_ERR
	RET

;/*
;;***********************************************************************************************************************
;;*子程序:     	SJASetAccPrio
;;*应用资源:	ACC,F0,R7,R6
;;*参数说明:    R7 ;存放设定值
;;*返回值:		R7
;;**     SJA_OK 	  	; 设置代码验收滤波器优先级寄存器成功
;;**	 SJA_SETACFPRIO_ERR	; 设置代码验收滤波器优先级寄存器错
;;*
;;*说明:     该函数用于设置591代码验收滤波器优先级
;;***********************************************************************************************************************
;;*/
SJASetAccPrio:
	MOV	R6,#0FFH					;存放重复次数
	SETB    F0
        MOV     REG_CANADR,#REG_CAN_ACFPRIO
SJASETAPOMD0:	
	MOV	REG_CANDAT,R7
	MOV     A,REG_CANDAT
    	XRL     A,R7
	JZ	SJASETAPOMD1
	DJNZ	R6,SJASETAPOMD0
	AJMP	SJASETAPOMD2
SJASETAPOMD1:
	CLR		F0
SJASETAPOMD2:
	JB		F0,SJASETAPOMD3
	MOV		R7,#SJA_OK 
	RET
SJASETAPOMD3:
	MOV		R7,#SJA_SETACFPRIO_ERR
	RET

;/*
;;***********************************************************************************************************************
;;*子程序:     	SJASetAccEN
;;*应用资源:	ACC,F0,R7,R6
;;*参数说明:    R7 ;存放设定值
;;*返回值:		R7
;;**     SJA_OK 	  	; 设置代码验收滤波器使能寄存器成功
;;**	 SJA_SETACFEN_ERR	; 设置代码验收滤波器使能寄存器错
;;*
;;*说明:     该函数用于设置591代码验收滤波器使能
;;***********************************************************************************************************************
;;*/
SJASetAccEN:
	MOV	R6,#0FFH					;存放重复次数
	SETB    F0
        MOV     REG_CANADR,#REG_CAN_ACFEN
SJASETAENMD0:	
	MOV	REG_CANDAT,R7
	MOV     A,REG_CANDAT
    	XRL     A,R7
	JZ	SJASETAENMD1
	DJNZ	R6,SJASETAENMD0
	AJMP	SJASETAENMD2
SJASETAENMD1:
	CLR		F0
SJASETAENMD2:
	JB		F0,SJASETAENMD3
	MOV		R7,#SJA_OK 
	RET
SJASETAENMD3:
	MOV		R7,#SJA_SETACFEN_ERR
	RET

;/*
;;***********************************************************************************************************************
;;*子程序:  	SJASetOutControl
;;*应用资源:	R7,R6,ACC,DPTR,F0
;;*参数说明:    R7 ;存放设定值
;;*返回值:      R7 ; 
;;*           	SJA_OK 			    ; 设置输出控制寄存器成功
;;*			 	SJA_SETOCR_ERR		; 设置输出控制寄存器错
;;*			 	SJA_NOTRSTMODE     	; CAN591不在复位模式
;;*
;;*说明:     该子程序用于设定CAN591的输出控制
;;***********************************************************************************************************************
;;*/

;/*
;;***********************************************************************************************************************
;;*子程序:  	SJASetClockDivision
;;*应用资源:	R7,R6,ACC,DPTR,F0
;;*参数说明:    R7 ;存放设定值
;;*返回值:      R7 ; 
;;*           	SJA_OK 			    ; 设置时钟分频寄存器成功
;;*			 	SJA_SETCDR_ERR		; 设置时钟分频寄存器错 
;;*			 	SJA_NOTRSTMODE      ; CAN591不在复位模式
;;*
;;*说明:     该子程序用于设定CAN591的时钟分频寄存器
;;***********************************************************************************************************************
;;*/

;/*
;;***********************************************************************************************************************
;;*子程序:  	SJASetAccCode
;;*应用资源:	R7,R6,R0,ACC,F0
;;*参数说明:    R0 ;存放设置代码验收寄存器数组的首地址,首地址为滤波器组号
;;*				
;;*返回值:      R7 ; 
;;*           	SJA_OK 		      ; 设置代码验收寄存器成功
;;*			 	SJA_SETACR_ERR	  ; 设置代码验收寄存器错
;;*			 	SJA_NOTRSTMODE    ; CAN591不在复位模式
;;*
;;*说明:     该子程序用于设定报文滤波的代码验收滤波器
;;*				
;;***********************************************************************************************************************
;;*/
SJASetAccCode:
	LCALL		SJATestRstMode
	JNB		F0,SJASETACR1
   	MOV		R7,#SJA_NOTRSTMODE
	RET
SJASETACR1:
	MOV		R6,#0FFH					;存放重复次数
	SETB    	F0
SJASETACR2:
	MOV		R7,#4
	MOV     	REG_CANADR,@R0  ;指针指向模式寄存器
        INC             R0
SJASETACR3:
	MOV		A,@R0
	MOV		REG_CANDAT,A
	DEC             REG_CANADR
        MOV             A,REG_CANDAT
	XRL		A,@R0
	JZ		SJASETACR4
	DJNZ		R6,SJASETACR3
	AJMP		SJASETACR5
SJASETACR4:
	INC		DPTR
	INC		R0
	DJNZ		R7,SJASETACR3
	CLR		F0
SJASETACR5:
	JB		F0,SJASETACR6
	MOV		R7,#SJA_OK 
	RET
SJASETACR6:
    	MOV		R7,#SJA_SETACR_ERR
	RET


;/*
;;***********************************************************************************************************************
;;*子程序:  	SJASetAccMask	
;;*应用资源:	R7,R6,R0,ACC,F0
;;*参数说明:    R0 ;存放设置代码验收寄存器数组的首地址
;;*返回值:		R7 ;
;;*      	    SJA_OK			  ; 设置验收屏蔽寄存器成功
;;*			 	SJA_SETAMR_ERR	  ; 设置验收屏蔽寄存器错
;;*			 	SJA_NOTRSTMODE	  ; CAN591不在复位模式
;;*
;;*说明:     该子程序用于设定报文滤波的验收屏蔽寄存器 
;;***********************************************************************************************************************
;*/
SJASetAccMask:
	LCALL	SJATestRstMode
	JNB		F0,SJASETAMR1
   	MOV		R7,#SJA_NOTRSTMODE
	RET
SJASETAMR1:
	MOV		R6,#0FFH					;存放重复次数
	SETB    	F0
SJASETAMR2:

⌨️ 快捷键说明

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