[求助]请无中生有大侠帮忙分析一下程序为何不能正常工作(附电路图)
<p><p><font size="4"><font face="宋体"><font color="#2222dd"></font></font></font></p><font face="宋体" size="4">void sja1000hardinit(); <font color="#1a1ae6">//sja1000硬件初始化函数</font><br/>void sja1000softinit(); </font><font size="4"><font face="宋体"><font color="#113dee">//sja1000软件初始化函数<br/></font>void sja1000write(unsigned char address,unsigned char writedata); <font color="#1a42e6">//sja1000写函数</font><br/>unsigned char sja1000read(unsigned char address); <font color="#1111ee">//sja1000读函数</font></font></font></p><p><font face="宋体" size="4">unsigned char i,j,k;<br/>unsigned char temp;</font></p><p><font size="4"><font face="宋体"><font color="#113dee"></font></font></font></p><p><font face="宋体" size="4">sbit alepin=P2^0; </font><font size="4"><font face="宋体"><font color="#113dee">// SJA1000的ALE信号线<br/></font>sbit cspin=P2^1; </font></font><font size="4"><font face="宋体"><font color="#1111ee"> // SJA1000的CS信号线<br/></font>sbit rdpin=P2^2; </font></font><font size="4"><font face="宋体"><font color="#0938f7">// SJA1000的RD信号线<br/></font>sbit wrpin=P2^3; </font></font><font size="4"><font face="宋体"><font color="#1a1ae6"> // SJA1000的WR信号线<br/></font>sbit rstpin=P2^4; </font></font><font size="4"><font face="宋体"><font color="#1111ee">// SJA1000的RST信号线<br/></font>sbit intpin=P2^5; <font color="#0909f7"> // SJA1000的INT信号线</font></font></font></p><p><br/><font size="4"><font face="宋体">#define sja1000dataport P3 <font color="#0938f7">// SJA1000的地址、数据线</font></font></font></p><p><font face="宋体" size="4">unsigned char sja1000read(unsigned char address)<br/>{<br/> unsigned char port=0;<br/> wrpin=1;</font></p><p><font face="宋体" size="4"> rdpin=1;<br/> cspin=0;<br/> alepin=0;<br/> alepin=1;<br/> sja1000dataport=address; <br/> alepin=0;<br/> sja1000dataport=0xff; <br/> rdpin=0;<br/> port=sja1000dataport;<br/> rdpin=1;<br/> cspin=1;<br/> return port; </font><font size="4"><font face="宋体"><font color="#0909f7"> // 返回读出的数据<br/></font>}</font></font></p><p><font face="宋体" size="4">void sja1000write(unsigned char address,unsigned char writedata)<br/>{<br/> rdpin=1;<br/> <br/> wrpin=1;<br/> cspin=1;<br/> alepin=0;<br/> alepin=1;<br/> cspin=0;<br/> sja1000dataport=address;<br/> alepin=0;<br/> wrpin=0;<br/> sja1000dataport=writedata;<br/> wrpin=1;<br/> alepin=1;<br/> cspin=1; <br/>}</font></p>[align=right][color=#000066][此贴子已经被作者于2008-4-11 19:10:53编辑过][/color][/align] <p>上传电路图不成功,下面是我电路图在和讯里面的网页地址,可能只能这么看了</p><p>你点“查看原图”,可以看到我画的大图</p><p></p><p><a href="http://diskcopy.photo.hexun.com/36757117_d.html">http://diskcopy.photo.hexun.com/36757117_d.html</a></p>
[align=right][color=#000066][此贴子已经被作者于2008-4-2 7:55:34编辑过][/color][/align] <p>期待答复<a href="http://diskcopy.photo.hexun.com/originalPic.aspx?photoID=36757117&pubTime=2008-4-1%2020:32&filetype=.jpg&hashid=318223DD836468D91A2768D318AB4640"></a></p>
[align=right][color=#000066][此贴子已经被作者于2008-4-2 7:54:36编辑过][/color][/align] <p> 你的电路和程序已浏览,认为你的硬件电路图应该没太大问题,只要你读写测试缓冲区先写入0XAA再写入0X55都能正常读出的话那你的硬件应该没问题,不过硬件联通了并不表明就连接的好,一般没有谁用单片机的IO口来模拟SJA1000的时序,至少我还没见过,一般都是P0接地址数据线AD0-AD7.再用P2口来接其余地址线,应为这样能够方便的应用读写外设的指令来操作SJA1000.</p><p>再说你的软件应用模拟的方法来操作SJA1000很难保证真的把数据写进去了,就是抛开这些不说在你的联机程序(非自测模式下)中:::::::::::::::::::::::<font size="4">sja1000write(0x1f,0x88); <font face="宋体"><font color="#0909f7">//地址31,设置时钟分频寄存器,关闭时钟,PeliCAN模式</font></font></font></p><p><font face="宋体" color="#000000" size="4">建议你改为sja1000write(0x1f,0xc8)</font></p><p><font face="宋体" color="#000000" size="4">同时你的<font color="#f70909">sja1000write(0,0x0c);</font><font face="宋体" color="#0968f7" size="4"><font color="#f70909"> //返回到工作模式</font> <font color="#000000">这里你是让SJA1000退出复位模式但是却进入了自检模式.同时发送指令也是sja1000write(0x01,0x10);也是自接收请求命令而不是发送请求(0X01);我建议你先把上述问题问题搞清楚之后再解决后面的问题.</font></font></font></p><p><font face="宋体" color="#000000" size="4"><font face="宋体" color="#0968f7" size="4"><font color="#000000">同时提醒你LED是不能反应出PCA82C250是否发送数据,即使是一般的示波器也反应不出来,除非反复发送.</font></font></font></p> <p>感谢版主的热情回复!</p><p>我用我这个硬件电路跑了跑你贴上来的那个BASIC-CAN模式的收发程序,成功了</p><p>而且我用的就是我搞的这个P3口的读写程序,事实证明我的接口程序是没有问题的</p><p>你发的那两个贴中的发送和接收的ACR的值是不同的,不过,因为接收方的AMR设成了0XFF,所以可以正常收到的,但是,如果是两个发送方都往接收方发信息,过不了几秒钟就会死机的</p><p>我只保留我写的P3口程序部分,为了不误导他人,有错误的部分删掉了</p><p>现在我要研究其它的模块了,等有了时间,我会把PELI-CAN模式研究清楚的</p> <p>到时候把代码贴上来</p><p>感谢所有贴出CAN代码的人!</p><p>谢谢你们!BS收费的!</p> 看到你成功的消息我很为你高兴,也是应为你有这种坚持不懈的毅力才换来的成功,恭喜你,以后有什么需要帮助的尽管说。你可以加我的QQ:498575921
页:
[1]