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总线的嵌入式测温系统,此系统可以作为一种通用的小型测温系统使用也可以嵌入到其他大型的工业检测与控制系统中。