QQ:531706356,手机13671387011
另外还有其它几款can开发板:http://shop35312684.taobao.com/?catId=45939404&queryType=cat&categoryName=CAN%BF%AA%B7%A2%B0%E5&browseType=#pagebar
1、 USB或DC+5V供电;
2、 89c52+sja1000+tja1050(tja1040)(p82c250);89c52+mcp2515+tja1050(tja1040)(p82c250);通过跳键选择sja1000或 mcp2515,用户任选一种CAN控制芯片;
3、 支持RS232/422/485总线与CAN总线相互转换;
4、 CAN总线波特率可调:20,40,50,80,100,125,200,250,400,500,666,800,1000Kbit/s
5、 提供电路图;
6、 提供源程序:basican和pelican模式(CAN2.0A和CAN2.0B),c语言和汇编语言,程序注释详尽;
7、 成对购买开发板可以实现:A开发板发送数据,B开发板接收数据,并把接收到的数据通过串口上传到计算机显示;A开发板上短路键的状态,可以通过CAN总线发送给B开发板,通过B开发板LED灯的亮灭,显示A开发板上短路键的状态;
8、 提供技术支持,接受CAN开发项目;
以下为汇编例程:
系统can地址为550,用于can系统测试,应用T0定时器每隔1s向can总线发送一组数据:数据长度为8个字节,
首字节为05H,第二个字节为累加变量,每秒钟数值增加1,
CONTROLLER_BASE EQU 7E00H ;SJA1000的片选地址
RCV_GOOD BIT 0FH ;成功的接收一帧标志
SEC_FLAG BIT 010H ;一秒到标志
ERR_FLAG BIT 011H ;监测到错误标志
SAVE_INT_INFO DATA 032H ;保存SJA1000中断寄存器的内容
SEND_DATA_BUF1 DATA 040H ;发送缓冲区
SEND_DATA_BUF2 DATA 041H
SEND_DATA_BUF3 DATA 042H
SEND_DATA_BUF4 DATA 043H
SEND_DATA_BUF5 DATA 044H
SEND_DATA_BUF6 DATA 045H
SEND_DATA_BUF7 DATA 046H
SEND_DATA_BUF8 DATA 047H
SEND_DATA_BUF9 DATA 048H
SEND_DATA_BUF10 DATA 049H
RCV_DATA_BUF1 DATA 050H ;接收缓冲区
ERROR_STATUS DATA 07CH ;错误状态表示
TEST_DATA DATA 07FH ;测试发送数据
;程序开始
ORG 0000H
LJMP MAIN ;运行主程序
ORG 0003H
LJMP BCAN_INT0 ;中断方式访问SJA1000程序
ORG 000BH
LJMP T0_INTERRUPT ;定时器0中断
ORG 0100H ;程序开始
MAIN:
LOOPER:
JNB RCV_GOOD,LOOPER2 ;sja1000成功接收一帧,通知CPU处理
CLR RCV_GOOD
LCALL RCVDATA_PRG
LOOPER2:
JNB SEC_FLAG,LOOPER3 ;一秒时间到,每秒发送一次
CLR SEC_FLAG
CLR P3.5 ;点亮指示灯
LCALL SENDDATA_PRG
;;;;;;;;;初始化SJA1000;;
SJA1000_INT0:
LCALL BCAN_CREATE_COMMUNATION ;调用SJA1000接口测试函数
MOV R7, #04
LCALL BCAN_SET_BANDRATE ;设置波特率为100k
MOV R7, #0A8H ;设置接收报文ID
MOV R6, #0FFH
LCALL BCAN_SET_OBJECT
MOV R7, #0AAH ;设置输出控制、时钟分频;正常输出模式
MOV R6, #048H ;使能内部比较器、禁止CLKOUT
LCALL BCAN_SET_OUTCLK ;
LCALL BCAN_QUIT_RETMODEL ;退出复位状态
MOV DPTR,#REG_CONTROL ;开放SJA1000内部功能中断
MOV A,#01EH ;中断开放
MOVX @DPTR,A
CLR F0
;;;;;错误信息处理;;;;;;;;;;;;
ERR_PRG:
LCALL BCAN_ENTER_RETMODEL ;进入复位模式
LCALL SJA1000_INT0 ;
MOV ERROR_STATUS,#0FCH
RET
;;;;;;;;;接收数据处理部分;;;;;
RCVDATA_PRG:
MOV R0,# RCV_DATA_BUF1 ;微处理器接收首地址
LCALL BCAN_DATA_RECEIVE ;调用接收数据子程序
MOV R7,#04H ;释放接收缓冲区
LCALL BCAN_CMD_PRG ;
RET
;;;;;;;;;;;;;;;;;;控制SJA1000向CAN总线发送数据处理部分;;;;;;;;;;;;;;;
SENDDATA_PRG:
MOV R0, #SEND_DATA_BUF1
MOV @R0, #02H
INC R0
MOV @R0, #08H
INC R0
MOV @R0, #05H
MOV A, TEST_DATA
INC R0
MOV @R0, A
MOV R0, #SEND_DATA_BUF1
LCALL BCAN_DATA_WRITE ;将要发送的数据送入发送缓冲区
;;;;;;;;;;定时器0初始化;;;;;;;;;;
T0_INIT:
MOV A,TMOD
ANL A,#0F0H
ORL A,#01H
MOV TMOD,A;T0工作在方式1
MOV TH0,#0FCH ;定时周期1MS
MOV TL0,#066H
MOV 3AH,#00H
RET
;;;;;;;;;外部中断0;;;;;;;;;;;
BCAN_INT0:
push DPH
PUSH DPL
PUSH PSW ;PSW,ACC入栈
PUSH ACC
USING 3 ;应用寄存器第3组
MOV DPTR,#REG_INTERRUPT ;读中断寄存器
MOVX A,@DPTR ;
MOV SAVE_INT_INFO,A ;保存中断寄存器的内容
BCAN_INT1:
MOV A,SAVE_INT_INFO
JNB ACC.2,BCAN_INT2 ;错误中断
SETB ERR_FLAG ;置位错误标志
BCAN_INT2:
POP ACC
POP PSW
POP DPL
POP DPH
RETI
;;;;;;;;定时器0中断;;;;
T0_INTERRUPT:
push DPH
PUSH DPL
PUSH PSW ;PSW、ACC入栈
PUSH ACC
USING 2
MOV TH0,#80H ;设置定时周期0.3S
MOV TL0,#26H
INC 3AH
MOV A,3AH
CJNE A,#23H,T0_QUIT ;判断1秒时间是否到
BCAN_ENTER_RETMODEL:
MOV DPTR, #REG_CONTROL ;控制寄存器访问
MOVX A, @DPTR ;
ORL A, #01H ;置位复位请求
MOVX @DPTR, A ;
CLR F0
MOVX A, @DPTR ;验证复位是否写入
JB ACC.0, BCAN_ER_QUIT
SETB F0 ;复位不成功
BCAN_ER_QUIT:
RET
huli184_389376486 2008-9-12 10:22