学者之家电子论坛--打造电子工程师共同致富的平台's Archiver

diskcopy 发表于 2008-2-16 03:23

[求助]求助CAN总线中单片机与SJA1000物理连接不成功的问题

<p><font color="#2248dd">俺想使用AT89S52+SJA1000+PCA82C250这三个器件进行CAN总线通信,在写测试寄存器以便检测物理连接时出现问题,电路是按照周立功的某PDF文档里面的电路图连接的(电路见附图,P1口接共阳数码管,图中未画出),上电后,数码管即显示E,这基本说明SJA1000的晶振信号已输出到单片机,单片机可以运行,但却无法向SJA1000的测试寄存器写入数值,无论写入何值,按下述程序测试时总是显示字母'E',如果用读数据语句去读测试寄存器9的数值,则读出的数值一直是9,请各位帮忙看一下是我的物理电路连接有问题,还是用来测试的C51程序有问题(诸如头文件之类有无错误等),也可以帮忙分析一下是否SJA1000器件本身有问题(请指导一下对它的测试方法),我现在是丈二和尚摸不着头脑了,谢谢!</font></p><p>#include &lt;reg52.h&gt;<br/>#include &lt;absacc.h&gt;</p><p>sbit P2_7=P2^7;<br/>unsigned char xdata *canport=0x00;</p><p>void main()<br/>{<br/>//检测物理连接,AT89S52的P1端口接1个共阳数码管</p><p>P2_7=0;//我看器件手册说第4脚'/CS'为片选输入,低电平时允许访问SJA1000,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //但是,实验证明有没有这个语句效果都一样,读出值还是9</p><p>*(canport+0x09)=0xAA;//向测试寄存器(地址为9)写一个数值</p><p>if(*(canport+0x09)==0xAA)//如果读出的测试寄存器的值与写入值相同,数码管显示'8'<br/>&nbsp;&nbsp; P1=0;<br/>else<br/>&nbsp;&nbsp; P1=0X86;//如果读出的值与写入值不同,数码管显示字母'E'</p><p>}</p><p></p><p></p>

diskcopy 发表于 2008-2-16 03:46

<p>电路图</p><p>[IMG]http://img6.tianya.cn/photo/2008/2/16/6776002_1986585.jpg[/IMG]</p>

diskcopy 发表于 2008-2-18 18:15

问题解决了,不过,这里的人气够P的

无中生有 发表于 2008-3-9 19:25

你的软件应该没问题,一般是硬件的问题注意SJA1000是低电平复位哦!

diskcopy 发表于 2008-3-18 06:13

<p>谢谢</p><p>这个问题已经解决</p><p></p><p>现在的问题是经典问题:一直在发送状态,并且总线报错。呵呵,慢慢努力中</p>

无中生有 发表于 2008-3-18 09:52

在调试前应该清楚CAN总线必须要至少两台联调哦!否则无应答信号则会报错,若是联调现在你应该检查你的外部中断,我觉得最好是用电平触发否则会导致SJA1000的中断输出脚一直是低电平.

diskcopy 发表于 2008-3-27 05:55

谢谢,我这几天单位有事,有空马上接着试验[em17]

luoluo 发表于 2009-12-1 22:03

[b]回复 [url=http://study-bbs.com/redirect.php?goto=findpost&pid=73299&ptid=22254]1#[/url] [i]diskcopy[/i] [/b]

我也遇到了同样的问题:无法向SJA1000的测试寄存器写入数值,能给点建议吗?先谢谢了!

页: [1]

Powered by Discuz! Archiver 7.1  © 2001-2009 Comsenz Inc.

302 Found

302 Found


nginx/1.8.0