查看: 1749|回复: 0

[其他] CAN发送程序求指导

[复制链接]

该用户从未签到

3

主题

19

帖子

0

注册会员

Rank: 2

积分
61
最后登录
1970-1-1
发表于 2013-12-17 21:47:27 | 显示全部楼层 |阅读模式
 下面是写的利用MSCAN模块发送数据,并通过串口调试助手显示出来    可是结果一直不对  求指导啊

#include       /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
 
//void CLK_Init(void);
void SCI0_Init(void);
void CAN_Init(void);
void SCI0_SendByte(int data);
int can_rvdata[20];
unsigned char sci_num = 0;
/*************************************************/
/*函数功能:主函数                               */
/*************************************************/
void main(void)
{
  //CLK_Init();
  SCI0_Init();
  CAN_Init();    
 
        EnableInterrupts;
 
 
  for(;;)
  {
    
    {
        CAN0TIER=0x07;        //允许发送中断   发送器空时引发送器空中断请求
    }
  }
}
 
/*************************************************/
/*函数功能:MSCAN初始化                          */
/*************************************************/
 
void CAN_Init(void) 
{
  CAN0CTL0_INITRQ = 1;     //MSCAN控制寄存器0;设置进入初始化状态
  
  
  while(!(CAN0CTL1&0x01)){}; //当INITRQ=1且CANOCTL1_INITAK=1时,初始化模式有效,INITAK初始化模标志位
  
  CAN0CTL1 = 0B10000001;    //osc clock = 16MHz,使能MSCAN模块
  CAN0BTR0 = 0B01000001;    //设置波特率为  8MHz/16 = 500k
  CAN0BTR1 = 0B00111010;    //TSEG1=10;TSEG2=3
  CAN0IDAC = 0B00100000;    //设置8个8位过滤单元     MSCAN标志符验收控制寄存器
  
  CAN0IDMR0 = 0x00;          //标识符屏蔽寄存器,设置接受符ID过滤屏蔽寄存器
  CAN0IDMR1 = 0x0f;  
  CAN0IDMR2 = 0xff;  
  CAN0IDMR3 = 0xff;  
  CAN0IDMR4 = 0xff;              
  CAN0IDMR5 = 0x00;  
  CAN0IDMR6 = 0x00;  
  CAN0IDMR7 = 0x00; 
  
  CAN0IDAR0 = 0x51;    //设置过滤比较码寄存器,接收所有的数据所以随便设置 
  CAN0IDAR1 = 0x87;
  CAN0IDAR2 = 0xFF;
  CAN0IDAR3 = 0xFF;
  CAN0IDAR4 = 0xFF;
  CAN0IDAR5 = 0xFF;
  CAN0IDAR6 = 0xFF;
  CAN0IDAR7 = 0xFF;
  
  CAN0CTL0 = 0x00;       //退出初始化   在初始化模式时设置标识符接收/过滤寄存器
  
  while((CAN0CTL1&0x01)!=0){
  };                    //等待进入normal模式
  
  CAN0RIER = 0x01;  //    允许接收中断
}
 
/*******************中断部分**********************/
#pragma CODE_SEG_NEAR_SEG NON_BANKED           
/*************************************************/
 
/*************************************************/
/*函数功能:MSCAN接收数据                        */
/*************************************************/
 
 void interrupt  CAN0receive(void)
{
   uchar index ,length;
   length = (CAN0RXDLR&0x0F);              //读取将接收的数据长度
   

   for(index=0;index
我知道答案 目前已有0人回答

CANtest.rar

111.09 KB, 下载次数: 12, 下载积分: 威望 1

回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-21 03:59 , Processed in 0.086363 second(s), 22 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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