查看: 2284|回复: 1

MC9S08DZ60 CAN发送数据不正确啊(已解决)

[复制链接]

该用户从未签到

4

主题

14

帖子

0

新手上路

Rank: 1

积分
37
最后登录
1970-1-1
发表于 2014-2-25 17:40:51 | 显示全部楼层 |阅读模式
 我的代码如下:
 
#define _CAN_C
#include "MC9S08DZ60.h"
 
void init_can(void)
{
  CANCTL1_CANE=1;
  CANCTL0_INITRQ=1;
  while(!CANCTL1_INITAK);//等待进入初始化
  
  CANCTL1_CLKSRC=0;      //选择振荡器时钟
  CANCTL1_BORM=0;        //总线脱离自动恢复
  CANCTL1_LISTEN=0;     //禁止监听,复位后为监听使能
  CANCTL1_WUPM=1;
  
  CANCTL0_TIME=1;
  CANCTL0_WUPE=1;
  
  /*f=8M/4/(1+2+5)=250Kbps   接收器为固定的250kbps*/
  
  
  CANBTR0=0x43;        //2Tq   4分频
  CANBTR1=0x14;        //2Tq   5Tq
  
  CANIDAC_IDAM1=0;
  CANIDAC_IDAM0=1;    //16位的接受滤波器(四个)
  
  CANIDAR0=0x10;
  CANIDAR1=0x10;
  CANIDAR2=0x10;
  CANIDAR3=0x10;
  
  CANIDMR0=0xFF;
  CANIDMR1=0xFF; 
  CANIDMR1=0xFF; 
  CANIDMR1=0xFF;         //不匹配   
  
 
       
   
  CANCTL0_INITRQ=0;
  while(  CANCTL1_INITAK);//等待退出初始化模式不
  
  CANTIER=0x00;       //关发送完成中断
  CANRIER=0x00;       //关接收相关中断
  
  
}
 
 
void TxConfig_MB(void)
{
  CANTIDR1_IDE=1;       //扩展帧
  CANTIDR0=0xFF;
  CANTIDR1=0xFF;        //29位标准标示符全为1 IDE=1,RTR=0(数据帧)
  CANTIDR2=0xFF;
  CANTIDR3=0xFE;        //RTR=0,数据帧
  CANTDLR=0x02;         //发送一个数据
  CANTDSR0=0xAA;       //数据位5A
  CANTDSR1=0x11;
}
 #include  /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
#include "initial.h"
 
void main(void) 
{
 
 
  sys_frequency();
  init_can();
  
  PTEDD_PTEDD7=0;          //CANRx Input
  PTEDD_PTEDD6=1;          //CANTx Output
  
  for(;;)
  {
    if(!CANTFLG)
    {
       CANCTL0_INITRQ=1;            //请求进入初始化模式(发送中止请求需在初始化模式中进行)
       while(!CANCTL1_INITAK);
          
       CANTARQ=0x07;
       while(CANTAAK&0x07) 
       {
         CANCTL0_INITRQ=0; 
         while(CANCTL1_INITAK);   //等待推出初始化模式  
       } 
     }
     else
     {
       if(CANTFLG&0x01) 
       {
         CANTBSEL=0x01;
         TxConfig_MB();
         CANTFLG_TXE0=0;    //设置准备发送  
         while(!CANTFLG_TXE0);
       } 
       
       else 
       {
      
         if(CANTFLG&0x02!=0)
         {
           CANTBSEL=0x02;
           TxConfig_MB();
           CANTFLG_TXE1=0;
           while(!CANTFLG_TXE1);
         } 
        
         else
         {
        
           if(CANTFLG&0x04)
           {
              CANTBSEL=0x04;
              TxConfig_MB();
              CANTFLG_TXE2=0;
              while(!CANTFLG_TXE2);
           } 
         } 
       } 
     } 
   }
}
   代码运行后,发送出来的数据、ID、数据的个数都不是我在代码中写入的数据,而查看相应寄存器发现,寄存器里的数据是正确的。我实在不知道问题出在哪里。
 
回复

使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6034
    最后登录
    2025-8-21
    发表于 2014-2-26 11:17:53 | 显示全部楼层

    回复:MC9S08DZ60 CAN发送数据不正确啊

    楼主可以参考一下这位网友提供的CAN程序
    https://www.nxpic.org.cn/bbs/article_412_125987.html
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-27 10:16 , Processed in 0.080051 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表