⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 一个用sja1000控制器的can源程序
💻 C
字号:
#include <AT89X51.H> 
#include  "SJA_BCANCONF.h"
#include  "SJA_BCANFUNC.c"
#include <display_s.h>
void Init_Cpu(void);
void Init_T0(void);
void Sja_1000_Init(void);
void disp_ok(void);
void disp_err(void);
void Init_T0(void);

bit flag_sec;
unsigned char data a[5];
unsigned char data send_data[10],rcv_data[10];
unsigned char databuf,sec_data,second;
unsigned char data Tmod_data;
unsigned char bdata flag_init;
sbit rcv_flag=flag_init^0;
sbit err_flag=flag_init^2;
unsigned char i;
void main(void)
{
  Sja_1000_Init();
  Init_T0();
  Init_Cpu();
  flag_init=0x00;
  while(1)
  {
    if(rcv_flag)
    {
      rcv_flag=0;             //有接收中断,单片机进行处理
	  BCAN_DATA_RECEIVE(rcv_data);  //将数据从接受缓冲器读入到rcv_data中
	  BCAN_CMD_PRG(0x04);     //发送命令,释放接受缓冲器
	  disp_ok();
    }
    if(flag_sec)
    {
      flag_sec=0;
	  send_data[0]=0xaa;
	  send_data[1]=0x08;
	  //send_data[2]=second;
	  for(i=2;i<10;i++)
	  	send_data[i]=0xff;
	  BCAN_DATA_WRITE(send_data);  //将数据写入发送缓冲器中
	  BCAN_CMD_PRG(0x01);         //命令,发送请求
    }
    if(err_flag)
    {
      err_flag=0;
	  disp_err();
	  Sja_1000_Init();
    }
    display(a);
  }
}



void ex0_int(void) interrupt 0 using 1
  {
    SJA_BCANAdr=REG_INTERRUPT;
	flag_init=*SJA_BCANAdr;   //将sja1000中断标志信号读入到 flag_init(bdata)
  }

void T0_init(void) interrupt 1 using 2      
{
  TR0=0;                                 //定时器溢出中断,置位flag_sec标志/second
  sec_data--;
  if(sec_data==0)
  {
    sec_data=0x10;
	TH0=0x80;
	TL0=0x60;
	flag_sec=1;
	second++;
  }
  TR0=1;
}


void Init_Cpu(void)
{
  PX0=1;
  IT0=1;
  EX0=1;
  ET0=1;
  EA=1;
  sec_data=0x10;
}


void Init_T0(void)
{
  Tmod_data=TMOD;
  Tmod_data&=0xf0;
  Tmod_data|=0x01;
  TMOD=Tmod_data;
  TH0=0x80;
  TL0=0x60;
  TR0=1;
  sec_data=0x20;
  second=0x00;
}

void Sja_1000_Init(void)
{
  BCAN_ENTER_RETMODEL();
  BCAN_SET_BANDRATE(0x04);
  BCAN_SET_OBJECT(0xaa,0x00);
  BCAN_SET_OUTCLK(0xaa,0x48);
  BCAN_QUIT_RETMODEL();
  SJA_BCANAdr=REG_CONTROL;                  //使能所有中断
  *SJA_BCANAdr|=0x1e;
}

void disp_ok(void)
{
  a[0]=0x00;
  a[1]=0x11;
  a[2]=0x10;
  databuf=rcv_data[2];
  databuf>>=0x04;
  a[3]=databuf;
  databuf=rcv_data[2];
  databuf=databuf&0x0f;
  a[4]=databuf;
}



void disp_err(void)
{
  a[0]=0x00;
  a[1]=0x0e;
  a[2]=0x10;
  a[3]=0x0f;
  a[4]=0x0e;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -