在线时间1 小时
UID2028380
注册时间2013-7-25
NXP金币0
该用户从未签到
注册会员

- 积分
- 61
- 最后登录
- 1970-1-1
|
下面是写的利用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
|
|