你可以看看~~
P87C591单片机:
/******************************************
单片机CAN寄存器初始化函数
******************************************/
void P87C591_CANRegInit_Config()
{
REG_CANADR = REG_CAN_MOD; //指针指向CAN寄存器MOD
REG_CANDAT = 0x01; //置复位请求
P1M2 = P1M2|0xC2; //将CAN总线TXDC置成推挽模式
REG_CANADR = REG_CAN_IER;
REG_CANDAT = 0x83; //开CAN中断
REG_CANADR = REG_CAN_BTR0; //10K波特率 FOR 12M(CAN)
REG_CANDAT = 0xEF;
REG_CANADR = REG_CAN_BTR1;
REG_CANDAT = 0xFF;
REG_CANADR = REG_CAN_ACF1_ACR0; //设置验收代码滤波器(接收标志:0xAC)
REG_CANDAT = 0xAC;
REG_CANDAT = 0x00;
REG_CANDAT = 0x00;
REG_CANADR = REG_CAN_ACF1_AMR0; //设置验收代码屏蔽器
REG_CANDAT = 0x00;
REG_CANDAT = 0xFF;
REG_CANDAT = 0xFF;
REG_CANDAT = 0xFF;
REG_CANADR = REG_CAN_ACFMOD; //设置验收滤波器工作模式(单滤波器,接收扩展帧)
REG_CANDAT = 0x33;
REG_CANADR = REG_CAN_ACFPRIO; //设置所有滤波器优先级为高
REG_CANDAT = 0xFF;
REG_CANADR = REG_CAN_ACFEN; //使能验收滤波器1
REG_CANDAT = 0x01;
REG_CANADR = REG_CAN_MOD; //退出复位使能
REG_CANDAT = 0x00;
}
/*************************************************
CAN中断处理函数
*************************************************/
void ECAN_int_service(void) interrupt 13
{
REG_CANADR = REG_CAN_IR;
InterruptRegCopy = REG_CANDAT; //读出CAN中断状态
CANADR_save = REG_CANADR;
if((InterruptRegCopy & 0x01) == 0x01)
{
//接收中断
}
if((InterruptRegCopy & 0x02) == 0x02)
{
//发送中断处理
}
if((InterruptRegCopy & 0x80) == 0x80)
{
//总线出错处理
}
REG_CANADR = CANADR_save;
}
你试试先~~
都是跑通了的
初始化波特率写入的值那里我不太肯定,忘了,你自己查一下
发表时间:2005年2月21日10:10:48