您现在所在的是:

现场总线

回帖:2个,阅读:2762 [上一页] [1] [下一页]
814
nnyt369
文章数:9
年度积分:50
历史总积分:814
注册时间:2009/6/1
发站内信
发表于:2009/6/2 9:22:12
#0楼
原创经典:调试好的can总线程序(c语言)

更多请查看:http://user.qzone.qq.com/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;           //开放错误\接收\发送中断
}  
表情表情表情表情表情表情表情表情






[此贴子已经被作者于2009-6-2 15:54:53编辑过]
814
nnyt369
文章数:9
年度积分:50
历史总积分:814
注册时间:2009/6/1
发站内信
发表于:2009/6/2 9:22:48
#1楼
顶顶
17528
ahljj
文章数:3386
年度积分:240
历史总积分:17528
注册时间:2002/3/23
发站内信
发表于:2013/10/23 11:01:08
#2楼
顶顶

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

46.8003