您当前的位置:五五电子网电子知识单片机-工控设备51单片机SJA1000 CAN总线程序 正文
SJA1000 CAN总线程序

SJA1000 CAN总线程序

点击数:7286 次   录入时间:03-04 11:43:57   整理:http://www.55dianzi.com   51单片机
{
bit setting_success;  
while(SJA_workmode)
      {
      setting_SJA_resetmode();                   //设置SJA工作在复位模式
      }
     CANREG_write(0x04,SJA_ACR);
     CANREG_write(0x05,SJA_AMR);
     if((CANREG_read(0x04)==SJA_ACR)&(CANREG_read(0x05)==SJA_AMR))
        {
         setting_success=1;                        //滤波器设置成功
        }
     else 
       {
           setting_success=0;                         //滤波器设置失败
        }  
return(setting_success);
}

//------------------------------------------------------------------------------------------------------
// 函数类别   SJA1000基本操作
// 函数名称   setting_SJA_CLK
// 入口函数   SJA_OCR,SJA_CDR
// 出口函数   setting_success
// 操作寄存器 输出控制寄存器OCR(地址08)和时钟分频寄存器CDR(地址31)
// 函数功能   设置SJA输出始终类型
// 特殊要求   只能在复位工作模式下设置
//------------------------------------------------------------------------------------------------------
bit setting_SJA_CLK(void)
{
bit setting_success;  
while(SJA_workmode)
      {
      setting_SJA_resetmode();                   //设置SJA工作在复位模式
      }
     CANREG_write(0x08,SJA_OCR);
     CANREG_write(31,SJA_CDR);
     if((CANREG_read(0x08)==SJA_OCR)&(CANREG_read(31)==SJA_CDR))
        {
         setting_success=1;                        //滤波器设置成功
        }
     else 
       {
           setting_success=0;                         //滤波器设置失败
        }  
return(setting_success);
}
//------------------------------------------------------------------------------------------------------
// 函数类别   SJA1000基本操作
// 函数名称   setting_SJA_interrupt
// 入口函数   SJA_OIE,SJA_EIE,SJA_TIE,SJA_RIE
// 出口函数   setting_success
// 操作寄存器 控制寄存器(00)
// 函数功能   设置SJA中断类型和中断状态
// 特殊要求   只能在复位工作模式下设置
//------------------------------------------------------------------------------------------------------
bit setting_SJA_interrupt(void)
{
bit setting_success;  
unsigned char CONT_buf,temp=0;
while(SJA_workmode)
      {
      setting_SJA_resetmode();                   //设置SJA工作在复位模式
      }
     CONT_buf=CANREG_read(0x00);
     temp=SJA_OIE;
     temp=temp<<4;
     temp=temp|SJA_EIE;
     temp=temp<<3;
     temp=temp|SJA_TIE;
     temp=temp<<2;
     temp=temp|SJA_RIE;
     temp=temp<<1;
     CONT_buf=(temp&0x1E)|(CONT_buf&0x01);
     CANREG_write(0x00,CONT_buf);
     if(CANREG_read(0x00)==CONT_buf)
        {
         setting_success=1;                        //滤波器设置成功
        }
     else 
       {
           setting_success=0;                         //滤波器设置失败
        }  
return(setting_success);
}
//------------------------------------------------------------------------------------------------------
// 函数类别   SJA1000基本操作
// 函数名称   Write_SJAsendBUF
// 入口函数   无
// 出口函数   setting_success
// 操作寄存器 发送缓存器(10-19)状态寄存器02
// 函数功能   写发送缓存器
// 特殊要求   只能在工作模式下写
//------------------------------------------------------------------------------------------------------
bit Write_SJAsendBUF(void)
{
bit setting_success=0;  
unsigned char i;
while(SJA_workmode==0)
      {
      setting_SJA_workingmode();                   //设置SJA在工作模式
      }
if((CANREG_read(0x02)&0x10)==0)
   {
   if((CANREG_read(0x02)&0x04)!=0)
    {
    CANREG_write(0x10,send_BUF.FrameID_H);
    CANREG_write(0x11,(send_BUF.FrameLENTH<<4)||(send_BUF.FrameKIND<<3)||(send_BUF.FrameID_L3));
    if(send_BUF.FrameKIND==0)
      {for(i=0;i<send_BUF.FrameLENTH,i<8;i++)
          CANREG_write(0x12+i,send_BUF.Frame_Data[i]);
        }
    setting_success=1;                        //发送寄存器写成功

上一页  [1] [2] [3] [4]  下一页


本文关键字:程序  51单片机单片机-工控设备 - 51单片机