×
接口总线驱动 > 总线 > 详情

can协议_can总线协议

发布时间:2020-05-16 发布时间:
|
can协议  sja1000
原创经典:调试好的can总线程序(c语言)
程序中的两个头文件:
    #include  //SJA存储器定义头文件
    #include  //SJA子程序文件
大家需要的话联系我:nnyt@tom.com
同时提供can协议实验开发板给初学者
  CAN控制器为SJA1000,驱动器为TJA1050,电源隔离;
  提供详尽的源程序,可根据用户需求编写程序
联系我:13106551527(短信联系,QQ详谈)
       QQ: 531706356
 
调试好的can总线程序(c语言)
 //
void Init_Cpu(void);                                //初始化单片机
void Sja_1000_Init(void);                           //初始化SIA
//
void main(void)
  

    s=0;                                            //配置sja1000出现错误时,重新初始化
    do{
       Sja_1000_Init();
      }while(s!=0);                                    
    Init_Cpu();                                        //initialize mcu
    flag_init=0x00;                                 //保存中断寄存器值清零
    while(1)
    {
        if(rcv_flag)                                //if there is receive interrupt
        {
            rcv_flag=0;                             //接收标志位清零
            BCAN_DATA_RECEIVE(rcv_data);            //接收数据
            BCAN_CMD_PRG(RRB_CMD);                  //释放接收缓冲区
            flag_send=1;                            //发送命令置位
        }
        if(flag_send)                                
        {
            flag_send=0;                            //发送位清零
            send_data[0]=rcv_data[2];                //接收到的"发送方ID10~ID3"
            send_data[1]=rcv_data[3];               //接收到的"发送方ID2~ID0"和要求的数据长度
            send_data[2]=0x88;
            send_data[3]=0x89;
            BCAN_DATA_WRITE(send_data);             //发送数据
            BCAN_CMD_PRG(TR_CMD);                   //置位发送请求位
            for(count_k=0;count_k<200;count_k++)
            display(a);                             //延时显示"5"
        }
        if (err_flag)                               //错误中断
          
            for(count_k=0;count_k<280;count_k++)    
            display(c);                             //错误显示"1"
            err_flag=0;                             //错误标志位清零
            Sja_1000_Init();                        //初始化SJA
            
        }
        display(b);                                 //显示"p"
    }
}


void ex0_int(void) interrupt 0 using 1              //外部中断0
{
    SJA_BCANAdr=REG_INTERRUPT;                      //指针指向中断寄存器
    flag_init=*SJA_BCANAdr;                         //保持中断寄存器值
}


void Init_Cpu(void)                                 //单片机初始化,开放外部中断0
{
    PX0=1;
    EX0=1;
    EA=1;
}

void Sja_1000_Init(void)
{
    s=BCAN_CREATE_COMMUNATION();  //SJA自测
    s=BCAN_ENTER_RETMODEL();      //进入复位
    s=BCAN_SET_BANDRATE(0x04);    //设置波特率100K/S
    s=BCAN_SET_OBJECT(0xaa,0x00); //设置地址ID:550
    s=BCAN_SET_OUTCLK(0xaa,0x48); //设置输出方式,禁止COLOCKOUT输出
    s=BCAN_QUIT_RETMODEL();       //退出复位模式
    SJA_BCANAdr=REG_CONTROL;      //地址指针指向控制寄存器
    *SJA_BCANAdr|=0x1e;           //开放错误接收发送中断
}
 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
工程师常用的接口大全