原创 【转贴】调试好的CAN总线程序

2007-9-2 21:41 3087 4 5 分类: 汽车电子
 
程序中的两个头文件:

    #i nclude  //SJA存储器定义头文件
    #i nclude  //SJA子程序文件
如果有需要,可以联系网友牛牛


QQ: 531706356

 

调试好的can总线程序(c语言)

 //**********程序功能************************************************
//节点1向CAN节点2发送数据,数据的头两个字节分别是:节点1的ID和要求节点2回复的数据长度
//节点2收到节点1的信息后,立即按照节点1的要求回复数据


#i nclude
#i nclude                            //SJA存储器定义头文件
#i nclude                            //SJA子程序文件
#i nclude                               //显示头文件
#i nclude         //字符串函数
//***************************头文件***************************************************//
void Init_Cpu(void);                                //初始化单片机
void Sja_1000_Init(void);                           //初始化SIA
//************************************************************************************
bit s;                                              //配置sja标志
bit flag_send;                                      //发送命令标志
unsigned char data a[5]={0x05,0x05,0x05,0x05,0x05}; //显示"5"
unsigned char b[5]={0x12,0x12,0x12,0x12,0x12};      //显示"p"
unsigned char c[5]={0x01,0x01,0x01,0x01,0x01};      //显示"1"
unsigned char data  send_data[10],rcv_data[10];     //发送和接收数组
unsigned char bdata flag_init;                      //保存中断寄存器值
unsigned int count_k;                               //延时记数用
sbit rcv_flag=flag_init^0;                          //接收中断标志
sbit err_flag=flag_init^2;                          //错误中断标志
//***********************************************************************************//
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;           //开放错误\接收\发送中断
}

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户195187 2009-4-28 21:06

踩 踩
相关推荐阅读
用户108773 2007-09-16 14:39
【转贴】汽车音响升级知识概述
http://www.sina.com.cn 2007年07月25日 20:11 《汽车导报》杂志  撰文:谢宗桓   编辑:陆文汉  现在读者对于音响知识的要求越来越高,笔者认为已经到了为汽车音响爱...
用户108773 2007-09-16 14:34
【转贴】汽车音响市场商机巨大 名牌车载主机质量堪忧
http://www.sina.com.cn 2007年08月21日 11:26 新浪汽车字号设置:[ 大 中 小 ]  随着中国汽车市场的快速扩张,与其息息相关的汽车音响市场也急速扩张。由于中国强大...
用户108773 2007-09-16 14:26
【转贴】如何选装适合自己的汽车音响
如何选装适合自己的汽车音响--------------------------------------------------------------------------------http://...
用户108773 2007-09-06 18:57
【转贴】车载DVD娱乐普及时代是否来临
来源: 网易汽车频道 “这是最好的时代,这是最坏的时代”,这是娱乐的时代,这是大片的时代,从豪华影院到街头盗版,大片已经充斥着生活的每个角落,甚至在车内欣赏大片也成了部分车主们购买车载DVD的理由之一...
用户108773 2007-08-31 21:10
【转贴】Mp4的数据编码答疑
1) 什么是MP4?听闻它是一种“容器格式”,那是什么?容器格式允许你将不同种类的多媒体数据流(多为视频流和音频流)合并在一个单一的文件内。多媒体容器格式,就是我们熟知的AVI(.avi), MPEG...
EE直播间
更多
我要评论
1
4
关闭 站长推荐上一条 /3 下一条