访问手机版页面
你的位置:老古开发网 > 其他 > 正文  
单片机CAN寄存器初始化函数
内容导读:
~~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/5/20 0:00:00
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐