4.2 CAN通信程序設計
CAN應用節點的通信程序設計主要包括三部分:初始化子程序、發送子程序、接收子程序,各個部分的具體程序如下[5]:
(1)CAN總線初始化子程序
NODE??? EQU??? 30H ;節點號緩沖區
NBTR0?? EQU??? 31H ;總線定時寄存器0緩沖區
NBTR1?? EQU??? 32H ;總線定時寄存器1緩沖區
…;定義RAM內發送TXBF、接收RXBF緩沖區,即40H與50H
…;再定義相應的控制CR、命令CMR、狀態SR、中斷IR寄存器,即0BF00H-0BF04H
AMR???? EQU?? 0BF05H ;接收碼屏蔽寄存器
BTR0??? EQU??? 0BF06H ;總線定時寄存器0
BTR1??? EQU??? 0BF07H ;總線定時寄存器1
OCR???? EQU??? 0BF08H ;輸出控制寄存器
CDR???? EQU??? 0BF1FH ;時鐘分頻寄存器
… ;定義接收RXB、發送TXB緩沖器,即0BF14H與0BF0AH
CANINI: MOV?? DPTR,#CR?? ;寫控制寄存器
MOV?? A,#01H????? ;置復位請求為高
MOVX? @DPTR, A
CANI1: MOVX? A, @DPTR???? ;判斷復位請求有效
JNB???? ACC.0, CANI1
MOV??? DPTR,? #ACR? ;寫接收碼寄存器
MOV??? A, NODE?????? ;設置節點號
MOVX?? @DPTR,? A
MOV???? DPTR, #AMR? ;寫接收碼屏蔽寄存器
MOV??? A, #00H
MOVX?? @DPTR, A
MOV???? DPTR, #BTR0? ;寫總線定時寄存器0
MOV??? A ,? NBTR0??? ;設置波特率
MOVX?? @DPTR, A
… ;同上三行進行寫總線定時寄存器1并設置好波特率
MOV??? DPTR, #OCR?? ;寫輸出控制寄存器
MOV???? A, #OFAH
MOV???? @DPTR, A
MOV???? DPTR, #CDR? ;寫時鐘分頻寄存器
MOV???? A, #00H??? ;將CAN工作模式設為BasicCAN模式時鐘2分頻
MOVX??? @DPTR, A
MOV???? DPTR, #CR? ;寫控制寄存器
MOV???? A, #0EH???? ;開放中斷源
MOVX??? @DPTR, A
(2)CAN總線接收子程序
RXSB: MOV???? DPTR, #SR? ;讀狀態寄存器判斷接收緩沖區滿
MOVX?? A, @DPTR
JNB????? ACC.0, RXSB
RXSB1: MOV???? DPTR, #RXB? ;將接收的數據放在CPU RAM區
MOV????? R0, #RXBF
MOVX???? A, @DPTR
MOV????? @R0, A
INC????? R0
INC????? DPTR
MOVX??? A, @DPTR
MOV???? @R0, A
MOV???? B, A
RXSB2: INC????? DPTR
INC????? R0
MOVX?? A, @DPTR
MOV???? @R0, A
DJNZ???? B, RXSB2
MOV???? DPTR, #CMR? ;接收完畢釋放接收緩沖區
MOV???? A, #04H
MOVX??? @DPTR, A
MOV????? DPTR, #SR? ;讀此狀態寄存器
MOVX??? A, @DPTR
…;判斷ACC.1、ACC.7、ACC.6,分別跳到DATAOVER、BUSWRONG、CNTWRONG
SJMP?? RECEEND
DATAOVER:做相應的數據益處錯誤處理后直接跳到RECEEND
BUSWRONG:做總線錯誤處理后直接跳到RECEEND
CNTWRONG:做數據錯誤處理
RECEEND: ;接收任務結束
(3)CAN總線發送子程序
TXSB: MOV???? DPTR, #SR?? ;讀狀態寄存器
MOVX??? A, @DPTR?? ;判斷發送緩沖區狀態
JNB?????? ACC.2, TXSB
MOV????? R1, #TXBF
MOV????? DPTR, #TXB
TX1: MOV????? A, @R1?????? ;向發送緩沖區10填入標示符
MOVX??? @DPTR, A
INC?????? R1
INC?????? DPTR
MOV????? A, @R1?????? ;向發送緩沖區11填入數據長度
MOVX???? @DPTR, A
MOV????? B, A
TX2:? INC?????? R1
INC?????? DPTR
MOV????? A, @R1??? ;向發送緩沖區12到19送數據
MOVX???? @DPTR, A
DJNZ????? B, TX2
MOV????? DPTR, #CMR? ;置CMR.0為1請求發送
MOV????? A, #01H
MOVX??? @DPTR, A
5.設計總結
根據上述的嵌入式溫度測量系統設計出的測溫系統能通過熱電偶實現自動溫度信號采集,再由MAX6675將此信號轉換成12位的數字信號輸入到微處理器,讓微處理器對它進行自動處理后送到LED顯示器顯示出來,也可以通過CAN總線送向上位機,實現遠程測量溫度和網絡監視控制的功能。整個系統采用12位的高速的模數轉換系統,使其溫度測量誤差可以達到小于0.1°C,同時系統也具有良好的實時性[6]。本文作者創新點:運用嵌入式系統設計思想和方法、結合相應的測溫精度和實時性、采用CAN工業通信總線標準,設計出一種基于CAN總線的嵌入式測溫系統,此系統可以作為一種通用的小型測溫系統使用也可以嵌入到其他大型的工業檢測與控制系統中。
評論
查看更多