ANSITION: MOV DPTR, #SR; 狀態(tài)寄存器 MOVX A, @DPTR; JNB ACC.0, CAN_QUIT; 是否接收到信息,無(wú)數(shù)據(jù)則退出轉(zhuǎn)換程序 CAN-RS485_HANDLE: MOV DPTR, #CANR ;接收緩沖區(qū)首地址 MOVX A , @DPTR ;接收幀的格式 JNB ACC.6 , RECEIVE _ FRAME ;RTR=1則報(bào)文是遠(yuǎn)程請(qǐng)求幀 LCALL TRANSMIT_ DATA ;發(fā)送對(duì)方請(qǐng)求的數(shù)據(jù) LJMP CAN_QUIT ;退出轉(zhuǎn)換程序 RECEIVE_ FRAME: MOVX A, @DPTR; ANL A, #0FH; ADD A, #05H ;獲得接收數(shù)據(jù)的長(zhǎng)度 MOV R7, A MOV R0,#43H ;設(shè)定MCU接收數(shù)據(jù)緩沖區(qū) DATAFRAME: MOVX A, @DPTR ;接收數(shù)據(jù) MOV @R0, A LCALL RS485_SEND ;將有效信息通過(guò)MAX485轉(zhuǎn)發(fā)到RS-485總線(xiàn) INC DPTR INC R0 DJNZ R7, DATAFRAME ;判斷接收是否結(jié)束 RECOUT: MOV DPTR, #CMR MOV A, #04H ;釋放接收緩沖區(qū) MOVX @DPTR, A CAN_QUIT: RET ;退出轉(zhuǎn)換程序

4 結(jié)束語(yǔ) CAN總線(xiàn)是當(dāng)前應(yīng)用最為廣泛的現(xiàn)場(chǎng)總線(xiàn)之一,而RS-485總線(xiàn)則是常用的串行總線(xiàn),兩者之間的相互轉(zhuǎn)換具有很高的實(shí)用價(jià)值。本文設(shè)計(jì)的CAN-RS485通信接口電路能夠很好地解決這兩種串行數(shù)據(jù)總線(xiàn)之間的相互轉(zhuǎn)換問(wèn)題,并已成功應(yīng)用于某地區(qū)的智能交通控制系統(tǒng)。
|