请哪位大虾般我改下这程序
#include<reg52.h><br />#define _INTRPSW 0X25<br />#define _CAN1_ADDR 0X4700<br />#define uchar unsigned char<br />#define uint unsigned int<br />uchar xdata *canport;<br />/*CAN控制器的初始化*/<br />Init_CAN()<br />{<br /> uchar i;<br /> //P1=0xff;<br /> canport=_CAN1_ADDR;<br /> *canport=0x09;<br /> *(canport+31)=0x80;<br /> for(i=0;i<8;i++)<br /> *(canport+16+i)=0xff;<br /> i=Can_SD; //将源地址放好<br /> *(canport+18)=i; //其他相关设置见资料<br /> *(canport+22)=0;<br /> *(canport+6)=0x71;<br /> *(canport+7)=0xb4;<br /> *(canport+8)=0x1a;<br /> *(canport+4)=_INTRPSW;<br /> *canport=0x08;<br />}<br /><br />请问改下哪 ,能让芯片的CLKOUT脚输出与晶振频率一样的输出以驱动另一芯片,我在网上查了好久都没查到.(我的电路图是将P2.7接在片选,我使用的是PeliCAN模式)第一个SJA比第二个工作频率高一倍!
当然是改 *(canport+6)=0x71;<br /><br />把第一个SJA的通信速率降低一半,(或者改第二个SJA的BTR,把第二个SJA通信速率提高一倍)。因为你设置的是SJA2外部频率是SJA1的一半。<br /> CD.2-CD.0=000 -----输出频率=fosc/2.<br />:re
也就是说可以有两种改法:可以改时钟分频器eg:*(canport+31)=0x07;将CLKOUT输出频率改成f=fosc;<br />也可以改总线时序也就是上楼说的?你说的方法简单
是,还是改CDR容易。我不知道时钟输出脚是开路还是接地
我的用外部振荡源的那个不能工作好象,我用另一个给其发送数据后,它不能产生中断,请老师指点,两个片子的初始化都是上面的程序(当然源地址那不同)很简单
1、看看它的时钟输出端有没有输出。也就是证实一下外部时钟已经输入。<br />2、单独进行自测试。看能不能发送/接收中断。<br />3、用SJA2向SJA1发送,看自己有没有发送中断。然后是对方有没有接收中断。<br /><br />一切正向不行,先反向试试。请问
在自测试时,当给出自发自收的命令后,正常情况下它是先产生发送中断后产生接受中断?会不会造成混淆。是不是只要读中断寄存器就能区分出来。<br /> 根据我的初始化程序,我只使能了3个中断(发送、还有2个错误中断),但是检测到中断脚SJA1的低点平时,我读中断寄存器后发现不是我设置中断使能中的一种。<br /> 所以我考虑先用自测模式,但书上介绍得不详细,自测的流程是怎么样,发送的数据还是放在发送缓冲区,接受的数据还是在那读?WEN
今天我用自测模式时,在初始化中改动*canport=0x0d;以及最后的*canport=0x0c;用的下面的程序<br /> Can_Send(buf); //其中的发送命令是 *(canport+1)=0x10;用0x12也试过<br /> while(INTX1!=0);//查询方式SJA1的中断<br /> sta1=*(canport+3);//获取IR<br /> temp=sta1&0x20; //判断EPI<br /> if(temp==0x20)<br /> H_temp=0; //使一个红色的发光二极管亮<br /> temp=sta1&0x04; //判断EI<br /> if(temp==0x04)<br /> L_temp=0; //使一个绿色的发光二极管亮<br /> temp=sta1&0x01; //判断RI<br /> if(temp==0x01)<br /> { //接受处理(这里省略)<br /> }<br /> while(1);<br />结果是:红、绿灯都亮, 而接受处理部分没执行,后来我检查了发送中断位发现此中断位置位了;是不是能说明SJA在接收的时候出现了EI和PEI提示错误?这里到底设置了什么?
for(i=0;i<8;i++)<br /> *(canport+16+i)=0xff;<br /><br />这里到底设置了什么?<br /><br />Data/ID/ACR/AMR?
页:
[1]