提供can实验开发板给初学者
大家需要的话联系我:
nnyt@
1 CAN控制器为SJA1000,驱动器为TJA1050,电源隔离;
2 提供详尽的源程序,可根据用户需求编写程序
联系我:13671387011(短信联系,QQ详谈)
QQ: 531706356
接
调试好的can总线程序(汇编1),构成完整的程序
BCAN_DATA_WRITE:
MOV DPTR, #REG_STATUS ;读取状态寄存器
MOVX A, @DPTR ;判断上次发送是否完成
SETB F0
JNB ACC.3, BCAN_DW_QUIT ;正在发送退出
CLR F0
MOVX A, @DPTR ;判断发送缓冲区是否锁定,
SETB F0
JNB ACC.2, BCAN_DW_QUIT ;锁定则跳出
CLR F0
INC R0 ;
MOV A, @R0 ;ID号的低3位 \RTR位 \数据长度DLC
DEC R0 ;恢复指针指向发送数据的首地址
MOV DPTR, #REG_TxBuffer1;发送缓冲区首地址
JB ACC.4, BCAN_WYB ;远程帧
;数据帧
ANL A, #0FH ;计算发送数据的长度
ADD A, #02H
MOV R7, A
AJMP BCAN_WRTXBUF ;
BCAN_WYB:
MOV R7, #02 ;写入发送缓冲区数据长度为2
BCAN_WRTXBUF:
MOV A, @R0 ;开始写入
MOVX @DPTR, A
SETB F0
MOVX A, @DPTR ;校验写入的是否正确
XRL A, @R0
JNZ BCAN_DW_QUIT ;写入错误退出
CLR F0 ;正确写入继续
INC R0
INC DPTR
DJNZ R7, BCAN_WRTXBUF ;没有写完继续
BCAN_DW_QUIT:
RET
BCAN_DATA_RECEIVE:
MOV DPTR, #REG_STATUS
MOVX A, @DPTR
SETB F0
JNB ACC.0, BCAN_DR_QUIT ;判断报文是否有效
CLR F0
MOV DPTR, #REG_RxBuffer2 ;接收报文的ID号的低3位 \RTR位 \数据长度DLC
MOVX A, @DPTR
MOV DPTR, #REG_RxBuffer1 ;接收缓冲区的首地址
JB ACC.4, BCAN_RCVYB ;接收到的是远程帧
;数据帧
ANL A, #0FH ;计算接收到的数据长度
ADD A, #02H ;计算报文的长度
MOV R6, A
AJMP BCAN_RCVDATA
BCAN_RCVYB:
MOV R6, #02 ;远程帧
BCAN_RCVDATA: ;开始读取数据
MOVX A, @DPTR
MOV @R0, A
INC DPTR
INC R0
DJNZ R6, BCAN_RCVDATA
BCAN_DR_QUIT:
RET
BCAN_SET_BANDRATE:
MOV A, R7 ;判断波特率的值是否存在
CLR CY
SUBB A, #13 ;
SETB F0
JNC BCAN_SETBR_QUIT ;输入的值大于12则不正确
CLR F0
MOV A, R7
RL A
MOV DPTR, #BCAN_SETBR ;查表找出相应的预设第一个值
MOVC A, @A+DPTR
MOV R5, A ;将数据保存
MOV A, R7 ;找出第二个值
RL A
INC A
MOVC A, @A+DPTR
MOV R6, A ;保存值
MOV DPTR, #REG_BTR0 ;装入波特率预设值,同步跳转宽度
;位宽度
MOV A, R5
MOVX @DPTR, A
SETB F0
MOVX A, @DPTR
XRL A, R5 ;判断写入是否正确
JNZ BCAN_SETBR_QUIT ;不正确
CLR F0
INC DPTR
MOV A, R6
MOVX @DPTR, A
SETB F0
MOVX A, @DPTR
XRL A, R6 ;判断写入是否正确
JNZ BCAN_SETBR_QUIT
CLR F0
BCAN_SETBR_QUIT:
RET
BCAN_SETBR:
DB 053H, 02FH ;20KBPS的预设值
DB 087H, 0FFH ;40KBPS的预设值
DB 047H, 02FH ;50KBPS的预设值
DB 083H, 0FFH ;80KBPS的预设值
DB 043H, 02fH ;100KBPS的预设值
DB 03H, 01cH ;125KBPS的预设值
DB 081H, 0faH ;200KBPS的预设值
DB 01H, 01cH ;250KBPS的预设值
DB 080H, 0faH ;400KBPS的预设值
DB 00H, 01cH ;500KBPS的预设值
DB 080H, 0b6H ;666KBPS的预设值
DB 00H, 016H ;800KBPS的预设值
DB 00H, 014H ;1000KBPS的预设值
BCAN_SET_OBJECT:
MOV DPTR, #REG_ACR ;写ACR寄存器
MOV A, R7
MOVX @DPTR, A
MOVX A, @DPTR
XRL A, R7 ;检验写入是否正确
JNZ BCAN_SETO_QUIT
INC DPTR ;写AMR寄存器
MOV A, R6
MOVX @DPTR, A
MOVX A, @DPTR
XRL A, R6 ;检验写入是否正确
JNZ BCAN_SETO_QUIT
CLR F0
BCAN_SETO_QUIT:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCAN_CMD_PRG:
MOV A, R7
CJNE A, #01, BCAN_CMD1
;发送请求命令
MOV DPTR, #REG_COMMAND; 地址指向命令寄存器
MOVX @DPTR, A ;写入命令字
RET
BCAN_CMD1:
CJNE A, #02, BCAN_CMD2
;;//夭折发送命令
MOV DPTR, #REG_STATUS ;地址指向状态寄存器
MOVX A, @DPTR ;判断是否有正在发送的状态
SETB F0
JB ACC.5, BCAN_CMD_QUIT
CLR F0
BCAN_CMD_QUIT:
RET
以下是几款can开发板:
http://item./auction/item_detail-0db2-6e3c6f5717a53a6802d3068fd054ecf3.jhtml
这是一款针对初学者的
http://item./auction/item_detail-0db2-84528f10e90fcdcc97b99194d14201b3.jhtml
这是一款带有8路12位adc采集功能的
http://item./auction/item_detail-0db2-58cd65ef6489e9d4f22176c16a0f6be6.jhtml
这是温度测量的
http://item./auction/item_detail-db2-155e51885e39c4bca4ffe21105e566b5.htm
这是实现usb转can的
同时本人接受can项目开发:设计、制作pcb板、焊接、编程、调试以及技术支持服务。
需要的话,请联系我qq:531706356 手机:13106551527 MSN:nnyt@ 邮箱:nnyt@ 博客网址:http://na./nnyt 周一到周五我晚上六点到七点,qq在线,其它时间请联系我手机,有时间我就上线,谢谢
本博客作品采用版权所有,未经协议授权禁止转载。