?? sja_bcanfunc.asm
字號:
;$INCLUDE (SJA_BCANCONF.ASM)
;************************************************************************
;* 廣州周立功單片機(jī)發(fā)展有限公司 http://www.zlgmcu.com *
;************************************************************************
;************************************************************************
;* *
;* CAN 控制器SJA1000基本CAN匯編子程序說明(BasicCAN 工作方式) *
;* *
;************************************************************************
;************************************************************************
;* *
;* 目的: 用戶在應(yīng)用SJA1000組成CAN網(wǎng)絡(luò)中通過簡單的參數(shù)設(shè)置和調(diào)用 *
;* 本文件提供函數(shù)便能使自己的CAN系統(tǒng)進(jìn)行基本的調(diào)試和運(yùn)行 *
;* *
;* 文件名: SJA_BCANFUNC.ASM *
;* *
;* 模塊名: -- *
;* *
;* 目標(biāo)系統(tǒng): 任何基于任何兼容8051指令的微處理器同SJA1000組成的CAN *
;* 系統(tǒng) *
;* *
;* 應(yīng)用語言: Keil ASM-51 or Intel ASM-51 *
;* *
;************************************************************************
;* 版本 :V1.0 *
;* *
;************************************************************************
;* 廣州周立功單片機(jī)發(fā)展有限公司 保留所有的版權(quán) *
;************************************************************************
;//以下為函數(shù)定義
;************************************************************************
;*函數(shù): BCAN_CREATE_COMMUNATION *
;*應(yīng)用資源: DPTR,ACC,F0 *
;*參數(shù)說明: 無 *
;*返回值: F0,存放返回值 *
;* 0 ; 表示SJA1000接口正常 *
;* 1 ; 表示SJA1000與處理器接口不正常 *
;* *
;*說明:該函數(shù)用于檢測CAN控制器的接口是否正常 *
;************************************************************************
;*子程序調(diào)用示例: *
;* USER_CODE: ;;用戶代碼 *
;* ----- ----- *
;* LCALL BCAN_CREATE_COMMUNATION ;;調(diào)用子程序 *
;* JNB F0, USER_CODE1 ;;繼續(xù)用戶代碼 *
;* LJMP ERROR_PRG ;;接口不正常跳到錯誤處理 *
;* *
;* USER_CODE1: *
;* ----- ----- ;;用戶代碼 *
;************************************************************************
BCAN_CREATE_COMMUNATION:
MOV DPTR, #REG_TEST ;對測試寄存器進(jìn)行讀寫測試
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
;************************************************************************
;*函數(shù): BCAN_ENTER_RETMODEL *
;*應(yīng)用資源: DPTR,ACC,F0 *
;*參數(shù)說明: 無 *
;*返回值: F0,存放返回值 *
;* 0 ; 表示成功進(jìn)入復(fù)位工作模式 *
;* 1 ; 表示不能進(jìn)入復(fù)位工作模式 *
;* *
;*說明:CAN控制器進(jìn)入復(fù)位工作模式 *
;************************************************************************
;*子程序調(diào)用示例: *
;* USER_CODE: ;;用戶代碼 *
;* ----- ----- *
;* LCALL BCAN_ENTER_RETMODEL ;;調(diào)用子程序 *
;* JNB F0, USER_CODE1 ;;繼續(xù)用戶代碼 *
;* LJMP ERROR_PRG ;;復(fù)位請求不成功跳到錯誤處理 *
;* *
;* USER_CODE1: *
;* ----- ----- ;;用戶代碼 *
;************************************************************************
BCAN_ENTER_RETMODEL:
MOV DPTR, #REG_CONTROL ;控制寄存器訪問
MOVX A, @DPTR ;
ORL A, #01H ;置位復(fù)位請求
MOVX @DPTR, A ;
CLR F0
MOVX A, @DPTR ;驗(yàn)證復(fù)位是否寫入
JB ACC.0, BCAN_ER_QUIT
SETB F0 ;復(fù)位不成功
BCAN_ER_QUIT:
RET
;************************************************************************
;*函數(shù): BCAN_QUIT_RETMODEL *
;*應(yīng)用資源: DPTR,ACC,F0 *
;*參數(shù)說明: 無 *
;*返回值: F0,存放返回值 *
;* 0 ; 表示成功退出復(fù)位工作模式 *
;* 1 ; 表示不能退出復(fù)位工作模式 *
;* *
;*說明:CAN控制器退出復(fù)位工作模式,進(jìn)入工作模式 *
;************************************************************************
;*子程序調(diào)用示例: *
;* USER_CODE: ;;用戶代碼 *
;* ----- ----- *
;* LCALL BCAN_QUIT_RETMODEL ;;調(diào)用子程序 *
;* JNB F0, USER_CODE1 ;;繼續(xù)用戶代碼 *
;* LJMP ERROR_PRG ;;不能退出復(fù)位模式跳到錯誤處理 *
;* *
;* USER_CODE1: *
;* ----- ----- ;;用戶代碼 *
;************************************************************************
BCAN_QUIT_RETMODEL:
MOV DPTR, #REG_CONTROL ; 控制寄存器訪問
MOVX A, @DPTR ;
ANL A, #0FEH ;清零復(fù)位請求,進(jìn)入工作狀態(tài)
MOVX @DPTR, A
CLR F0
MOVX A, @DPTR
JNB ACC.0, BCAN_QR_QUIT ;驗(yàn)證是否退出復(fù)位狀態(tài)
SETB F0
BCAN_QR_QUIT:
RET
;************************************************************************
;*函數(shù): BCAN_DATA_WRITE *
;*應(yīng)用資源: DPTR,ACC,R0,R7 *
;*參數(shù)說明: *
;* R0:存放待發(fā)送特定幀各式的數(shù)據(jù)的首地址 *
;* *
;*返回值: F0,存放返回值 *
;* 0 ; 表示將數(shù)據(jù)成功的送至發(fā)送緩沖區(qū) *
;* 1 ; 表示上一次的數(shù)據(jù)正在發(fā)送, *
;* ; 表示發(fā)送緩沖區(qū)被鎖定,不能寫入數(shù)據(jù) *
;* ; 表示寫入數(shù)據(jù)錯誤 *
;* *
;*說明: 將待發(fā)送特定幀各式的數(shù)據(jù),送入SJA1000發(fā)送緩存區(qū)中,然后啟動 *
;* SJA1000發(fā)送。 *
;* 特定幀格式為:開始的兩個字節(jié)存放 '描述符' ,以后的為數(shù)據(jù) *
;* 描述符包括11位長的ID(標(biāo)志符)\1位RTR\4位描述數(shù)據(jù)長度的DLC共16位 *
;* *
;*注:本函數(shù)的返回值僅指示,將數(shù)據(jù)正確寫入SJA1000發(fā)送緩存區(qū)中與否。 *
;* 不指示SJA1000將該數(shù)據(jù)正確發(fā)送到CAN總線上完畢與否,要向總線發(fā)送請?jiān)?
;* 本子程序后調(diào)用發(fā)送命令 *
;************************************************************************
;*子程序調(diào)用示例: *
;* USER_CODE: ;;用戶代碼 *
;* ----- ----- *
;* MOV R0, #DATA_BUF0 ;;裝入微處理器要發(fā)送數(shù)據(jù)的首地址 *
;* LCALL BCAN_DATA_WRITE ;;調(diào)用子程序 *
;* JNB F0, USER_CODE1 ;;繼續(xù)用戶代碼 *
;* LJMP ERROR_PRG ;;寫入發(fā)送緩沖區(qū)錯跳到錯誤處理 *
;* *
;* USER_CODE1: *
;* ----- ----- ;;用戶代碼 *
;************************************************************************
BCAN_DATA_WRITE:
MOV DPTR, #REG_STATUS ;讀取狀態(tài)寄存器
MOVX A, @DPTR ;判斷上次發(fā)送是否完成
SETB F0
JNB ACC.3, BCAN_DW_QUIT ;正在發(fā)送退出
CLR F0
MOVX A, @DPTR ;判斷發(fā)送緩沖區(qū)是否鎖定,
SETB F0
JNB ACC.2, BCAN_DW_QUIT ;鎖定則跳出
CLR F0
INC R0 ;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -