?? sja_bcanfunc.asm
字號:
;* 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 + -