基于P89C668單片機的CAN總線(xiàn)接口設計
下面是SJA1000 的初始化程序.
CAN_INI: MOV DPTR, #MOD; 模式寄存器
MOV A, #01H
MOVX @DPTR, A
NOP
MOVX A, @DPTR
ANL A, #01H
JZ CAN_INI; 等待SJA1000 進(jìn)入復位模式
MOV DPTR, #BTR0; 總線(xiàn)定時(shí)0
MOV A, #BandRate0
MOV DPTR, #BTR1; 總線(xiàn)定時(shí)1
MOV A, # BandRate1
MOV DPTR, #OCR; 輸出控制寄存器
MOV A, #1AH
MOVX @DPTR, A
MOV DPTR, #CDR; 時(shí)鐘分頻器
MOV A, #0C0H
MOV DPTR, #ACR0; 接收代碼寄存器ACR0
MOV A, #ModuleAddress; 設置為模塊的地址
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOV @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
MOV DPTR, #AMF0; 接收掩碼寄存器AMF0
MOV A, #0FFH; 接收代碼設置為
0X0FFFFFFFF
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
MOV DPTR, #IER ; 中斷使能寄存器IER
MOV A, #09H; 允許接收中斷和數據溢出中斷
MOV DPTR, #CMR; 命令寄存器
MOV A, #04H; 釋放接收緩沖器
MOVX @DPTR, A
LOOP: MOV DPTR, #MOD
MOV A, #08H; 設置SJA1000 工作模式為普通模式,單濾波接收
MOVX @DPTR, A
MOV DPTR, #MOD
MOV A, @DPTR
ANL A, #01H
JNZ LOOP; 等待復位標識被清除
RET
對SJA1000控制器進(jìn)行初始化建立CAN總線(xiàn)通信后,就可以通過(guò)CAN總線(xiàn)發(fā)送和接收報文.發(fā)送程序負責節點(diǎn)的報文發(fā)送.發(fā)送報文時(shí),用戶(hù)只需將需要發(fā)送的數據按一定的格式組合成一幀的報文,并送入SJA1000發(fā)送緩存區中,然后啟動(dòng)SJA1000發(fā)送即可.發(fā)送程序分發(fā)送數據幀和遠程幀兩種.通過(guò)設置RTR以決定是發(fā)送數據幀還是遠程幀.
評論