导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→有关CAN现场总线通信的问题请教(请大家关注!!!!!!!!

* 89621: 有关CAN现场总线通信的问题请教(请大家关注!!!!!!!!!!!!!)

   johdon23 
johdon23发表的帖子 

 有关CAN现场总线通信的问题请教(请大家关注!!!!!!!!!!!!!)
硬件电路是按照各种资料上给出的标准电路搭的(SJA1000+PCA82C250方案),唯一有怀疑的地方是SJA1000的复位脚,我直接从ATMEGA8515的RST处给出,不知道有没有影响。 
  软件部分,看了资料,也看了很多例程,但就是调不通!我现在正利用ZLG的CAN232MB(也就是CAN与232的转换器,利用它可以直接在PC上通过串口调试软件与CAN设备进行通讯)调试,在我的程序里,CAN的发送已经完成,但是在上位机的串口调试软件中没有收到数据。下面是CAN初识化及发送部分的程序: 
另外,如果有成功做出过CAN通信的朋友,能否发一份完整的资料(软&硬)给我
johdon23@hotmail.com            不胜感谢!!!!
/************************************************* 
          初始化SJA1000控制器子程序      
*************************************************/ 
void Init_CAN(void)                 

   uchar temp; 
   do 
   { 
      write_sja(MODE,0x01);   //进入复位模式 
   } 
   while(!(read_sja(MODE)&0x01));   //检测是否已进入复位工作模式 
   write_sja(BTR0,0x07);    //设置时钟分频器,速度为20KHZ 
   write_sja(BTR1,0x7f);             
   write_sja(OCR,0x1a);               //输出设置,正常模式 
   write_sja(CDR,0x88);            //设置PeliCAN模式,同时禁能CLOCKOUT  
   write_sja(RXERR,0x00);          
   write_sja(TXERR,0x00); 
   write_sja(ECC,0x00); 
   write_sja(RBSA,0x00);              //缓存器起始地址寄存器设置为0 
    
   write_sja(ACR0,0x00);    //设置ACR 
   write_sja(ACR1,0x00); 
   write_sja(ACR2,0x00); 
   write_sja(ACR3,0x00); 

   write_sja(AMR0,0xff);           //设置AMR,所有数据都可接收 
   write_sja(AMR0,0xff); 
   write_sja(AMR0,0xff); 
   write_sja(AMR0,0xff); 

   write_sja(IER,0x01);  
   write_sja(CMR,0x0c);      //设置命令寄存器,清除数据溢出和释放接收缓冲器 
   write_sja(MODE,0x08);    //进入工作模式                         

/************************************************* 
               SJA1000发送子程序 
*************************************************/ 
void CanTransmit(void)  
{  
   uchar status; 
   CLI();                               
   while(!(read_sja(SR)&0x10));   //判断是否正在接收           

           while(!(read_sja(SR)&0x04));   //等待reg2^2==1,即判断发送缓冲器的状态 
   write_sja(TXEFF,0x88);         //数据的第一个字节,设置成扩展帧,数据长度为8个字节 
   write_sja(TXID0,0xff);         //ID码 
   write_sja(TXID1,0xff); 
   write_sja(TXID2,0xff); 
   write_sja(TXID3,0xff); 
   write_sja(TXDATA0,0x00);       //8个字节的数据 
   write_sja(TXDATA1,0x11); 
   write_sja(TXDATA2,0x22); 
   write_sja(TXDATA3,0x33); 
   write_sja(TXDATA4,0x44); 
   write_sja(TXDATA5,0x55); 
   write_sja(TXDATA6,0x66); 
   write_sja(TXDATA7,0x77); 
   write_sja(CMR,0x01);            //启动发送 
   while(!(read_sja(SR) & 0x08));//判断发送是否完成 
   PORTD ^= BIT(5);              //改变小灯状态(程序已能正确运行到这里,每次起动发送后,小灯的状态变化正常) 
   SEI();                         
}


发表时间:2006年3月2日15:22:08

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:可直接用cp2101可直接用cp2101
[下一篇帖子]:80c196KB  C196 编程问题 请教WAVE&nbs