[CAN-bus/DeviceNet] 求助:我的CAN怎么不能发送

[复制链接]
 楼主| wangjinjie 发表于 2007-5-9 14:08 | 显示全部楼层 |阅读模式
我的程序如下:<br />CR&nbsp;&nbsp;&nbsp;EQU&nbsp;7F00H;&nbsp;CAN0控制寄存器<br />CMR&nbsp;&nbsp;EQU&nbsp;7F01H;&nbsp;CAN1命令寄存器地址<br />SR&nbsp;&nbsp;&nbsp;EQU&nbsp;7F02H;&nbsp;CAN2状态寄存器<br />IR&nbsp;&nbsp;&nbsp;EQU&nbsp;7F03H;&nbsp;CAN3中断寄存器器<br />ACR&nbsp;&nbsp;EQU&nbsp;7F04H;&nbsp;CAN4验收代码寄存器<br />AMR&nbsp;&nbsp;EQU&nbsp;7F05H;&nbsp;CAN5验收屏蔽寄存器<br />BTR0&nbsp;EQU&nbsp;7F06H;&nbsp;CAN6总线定时寄存器0<br />BTR1&nbsp;EQU&nbsp;7F07H;&nbsp;CAN7总线定时寄存器1<br />OCR&nbsp;&nbsp;EQU&nbsp;7F08H;&nbsp;CAN8输出控制寄存器<br />TEST&nbsp;EQU&nbsp;7F09H;&nbsp;CAN9测试寄存器<br />TBSA&nbsp;EQU&nbsp;7F0AH;&nbsp;CAN10发送缓存器起始地址寄存<br />RBSA&nbsp;EQU&nbsp;7F14H;&nbsp;CAN20接收缓存器起始地址寄存<br />CDR&nbsp;&nbsp;EQU&nbsp;7F1FH;&nbsp;CAN31时钟分频器<br />TRDATA&nbsp;EQU&nbsp;77H;&nbsp;CPU&nbsp;发送数据区首址数据内容由用户定义<br />SJARst&nbsp;EQU&nbsp;P2.6;<br />LED0&nbsp;EQU&nbsp;P1.0;<br />LED1&nbsp;EQU&nbsp;P1.1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;org&nbsp;0000h<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ajmp&nbsp;start<br />start:&nbsp;lcall&nbsp;Rst;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcall&nbsp;COMMUNATION;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcall&nbsp;CANINI;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcall&nbsp;delay;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcall&nbsp;CAN;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lcall&nbsp;delay;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mov&nbsp;TRDATA,0FDH;<br />loop:&nbsp;&nbsp;lcall&nbsp;TDATA;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sjmp&nbsp;loop;<br />CANINI:MOV&nbsp;DPTR,#CR;控制寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#21H;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A;进入复位模式对SJA1000进行初始化<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;LED0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;A,@DPTR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JB&nbsp;ACC.0,CANINI_OUT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCALL&nbsp;CANINI;<br />CANINI_OUT:&nbsp;SETB&nbsp;LED0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET;<br />CAN:&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#CDR&nbsp;;时钟分频寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#08H&nbsp;;选择BasicCAN&nbsp;模式关闭时钟输出CLKOUT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#ACR;验收代码寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#0FFH;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#AMR;验收屏蔽寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#0FFH;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#BTR0;&nbsp;总线定时寄存器0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#0C9H;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#BTR1;&nbsp;总线定时寄存器1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#0A3H&nbsp;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#OCR;输出控制寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#0AAH;&nbsp;正常输出模式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#RBSA;&nbsp;接收缓存器起始地址寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#0H;&nbsp;设置接收缓存器FIFO&nbsp;起始地址为0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#CR;&nbsp;控制寄存器<br />CAN1:&nbsp;&nbsp;MOV&nbsp;A,#20H;&nbsp;&nbsp;&nbsp;返回工作状态,开发送中断<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;LED0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;A,@DPTR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JNB&nbsp;ACC.0,CAN1_OUT<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCALL&nbsp;CAN1;<br />CAN1_OUT:SETB&nbsp;LED0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET;<br />TDATA:&nbsp;MOV&nbsp;DPTR,#SR;&nbsp;状态寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;A,@DPTR;&nbsp;从SJA1000&nbsp;读入状态寄存器值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JB&nbsp;ACC.4,TDATA;&nbsp;判断是否正在接收正在接收则等待<br />TS0:&nbsp;&nbsp;&nbsp;MOVX&nbsp;A,@DPTR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JNB&nbsp;ACC.3,TS0;&nbsp;判断上次发送是否完成未完成则等待发送完成<br />TS1:&nbsp;&nbsp;&nbsp;MOVX&nbsp;A,@DPTR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JNB&nbsp;ACC.2,TS1;&nbsp;判断发送缓冲区是否锁定锁定则等待<br />TS2:&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#TBSA;&nbsp;SJA1000&nbsp;发送缓存区首址<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#82H;&nbsp;ID.10-ID.3信息功能码10,节点号000010<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INC&nbsp;DPTR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#01H;&nbsp;设置数据帧并且为1个字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;R0,#TRDATA;&nbsp;CPU&nbsp;发送数据区首址数据内容由用户定义<br />MTBF:&nbsp;&nbsp;MOV&nbsp;A,@R0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INC&nbsp;DPTR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;LED1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DPTR,#CMR&nbsp;;命令寄存器地址<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#01H<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A&nbsp;;启动SJA1000&nbsp;发送<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCALL&nbsp;delay;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SETB&nbsp;LED1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET;<br /><br />delay:&nbsp;mov&nbsp;&nbsp;&nbsp;r1,#50;<br />del0:&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;r2,#100;<br />del1:&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;r3,#100;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;djnz&nbsp;&nbsp;r3,$;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;djnz&nbsp;&nbsp;r2,del1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;djnz&nbsp;&nbsp;r1,del0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ret;<br />Rst:CLR&nbsp;SJARst;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCALL&nbsp;delay;<br />&nbsp;&nbsp;&nbsp;&nbsp;SETB&nbsp;SJARst;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCALL&nbsp;delay;<br />&nbsp;&nbsp;&nbsp;&nbsp;RET;<br />COMMUNATION:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DPTR,&nbsp;&nbsp;&nbsp;#TEST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;对测试寄存器进行读写测试&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#0AAH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;写入值0AAH&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@DPTR,&nbsp;&nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LED0&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@DPTR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;读出值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CJNE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#0AAH,COMMUNATION&nbsp;&nbsp;&nbsp;<br />QUIT:&nbsp;SETB&nbsp;LED0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />end<br />请问大家有什么地方不对吗?用P2.7片选,P2.6复位
桂电飞天鼠 发表于 2007-5-10 09:08 | 显示全部楼层

rt

汇编实在不好看~~~~<br /><br />但发现,有一个地方错误:P2.6是地址线的一部分,虽然没有使用,但实际还是地址线,所以你不能用P2的任何一个口作其它用途.<br /><br />可以参考这个帖子:<br />http://www.21icbbs.com/club/bbs/list.asp?boardid=43&page=1&t=2517365&tp=%u8BF7%u6559%u6842%u7535%u98DE%u5929%u9F20%u5927%u54E5%uFF0C%u5173%u4E8ECAN%u7684%u786C%u4EF6%u8FDE%u63A5
cui103 发表于 2007-5-26 22:32 | 显示全部楼层

回复

跟我的程序差不多&nbsp;我的也不能正常发送<br />
wxj1952 发表于 2007-5-27 13:38 | 显示全部楼层

佩服!

CANINI:MOV&nbsp;DPTR,#CR;控制寄存器<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;A,#21H;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;@DPTR,A;进入复位模式对SJA1000进行初始化<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLR&nbsp;LED0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVX&nbsp;A,@DPTR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JB&nbsp;ACC.0,CANINI_OUT;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCALL&nbsp;CANINI;<br />CANINI_OUT:&nbsp;SETB&nbsp;LED0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET;<br /><br />......
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

16

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部