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

📄 can.i

📁 AT90CAN128的CAN通信源码测试成功
💻 I
字号:
#line 1 "D:\liliang\can-232\CAN-232\can.c"

#line 9 "D:\liliang\can-232\CAN-232\can.c"
#line 1 "D:\liliang\can-232\CAN-232/can.h"


#line 9 "D:\liliang\can-232\CAN-232/can.h"









struct BIT_FILED
{
 unsigned mess_wait : 1;
 unsigned i_over    : 1;
 unsigned v_over    : 1;
 unsigned ad_mux    : 1;
 unsigned s_100ms     : 1;
 unsigned s_200ms     : 1;
 unsigned s_300ms     : 1;
 unsigned s_400ms     : 1;
}flag={0,0,0,0,0,0,0,0};
































#line 63 "D:\liliang\can-232\CAN-232/can.h"





























































#line 126 "D:\liliang\can-232\CAN-232/can.h"





























































































































void sja_port_init(void);
void sja_write_data(unsigned char addr,unsigned char data);
unsigned char sja_read_data(unsigned char addr);
void sja_init(void);
void sja_tx_service(void);
void sja_tx(unsigned char *TransmitMessage);
void CanTransmit(void);
void sja_rx_service(void);
void play_buffer(unsigned char *ptr);



#line 10 "D:\liliang\can-232\CAN-232\can.c"
#line 1 "D:\liliang\can-232\CAN-232/delay.h"


#line 10 "D:\liliang\can-232\CAN-232/delay.h"



void shortdelay(unsigned char tt);
void delay_us(void);
void delay_nus(unsigned int n);
void delay_ms(void);
void delay_nms(unsigned int n);


#line 11 "D:\liliang\can-232\CAN-232\can.c"




#line 17 "D:\liliang\can-232\CAN-232\can.c"

unsigned char TransmitMessage[13];
unsigned char RxBuffer[13];





#line 29 "D:\liliang\can-232\CAN-232\can.c"
void sja_port_init(void)
{

   PORTC=0x00;
   DDRC=0xff;
   PORTD=0b11000000;
   DDRD =0b11111000;

 DDRA |=(1<< PA5)|(1<< PA6)|(1<< PA4)|(1<< PA7);
 PORTA|=(1<<PA5);
 PORTA|=(1<<PA6);
 PORTA&=~(1<<PA4);
 PORTA|=(1<<PA7);
}


#line 49 "D:\liliang\can-232\CAN-232\can.c"
void sja_write_data(unsigned char addr,unsigned char data)
{
 PORTA|=(1<<PA6);
 DDRC=0xFF;

 PORTC=addr;
 PORTA|=(1<<PA4);
 NOP();
 PORTA&=~(1<<PA4);
 NOP();

 PORTC=data;
 PORTA&=~(1<<PA7);
 PORTA&=~(1<<PA5);
 NOP();
 PORTA|=(1<<PA5);
 NOP();

 PORTA|=(1<<PA7);
}


#line 75 "D:\liliang\can-232\CAN-232\can.c"
unsigned char sja_read_data(unsigned char addr)
{
 unsigned char data;
 PORTA|=(1<<PA5);
 DDRC=0xFF;

 PORTA&=~(1<<PA4);
 PORTC=addr;
 PORTA|=(1<<PA4);
 NOP();
 PORTA&=~(1<<PA4);
 NOP();

 PORTC=0xFF;
 DDRC=0x00;
 PORTA&=~(1<<PA7);
 PORTA&=~(1<<PA6);
 NOP();
 PORTA|=(1<<PA6);
 NOP();
 data=PINC;
 PORTA|=(1<<PA7);
 return data;
}


#line 105 "D:\liliang\can-232\CAN-232\can.c"
void sja_init(void)
{
    unsigned char temp;
    unsigned int k ;

    CLI();
    sja_write_data(0x00,0x09);

    sja_read_data(0x03);

    while(!( sja_read_data(0x00)&0x01))
    {
       sja_write_data(0x00,0x09);
    }
    delay_nus(5);
    sja_write_data(0x1F,0x88);
    delay_nus(5);

    sja_write_data(0x06,0x01);
    sja_write_data(0x07,0x1c);

    sja_write_data(0x08,0x1A);

    sja_write_data(0x0E,0x00);
    sja_write_data(0x0F,0x00);
    sja_write_data(0x0C,0x00);

    sja_write_data(0x1E,0x00);

    sja_write_data(0x10,0x00);
    sja_write_data(0x11,0x00);
    sja_write_data(0x12,0x00);
    sja_write_data(0x13,0x00);

    sja_write_data(0x14,0xFF);
    sja_write_data(0x15,0xFF);
    sja_write_data(0x16,0xFF);
    sja_write_data(0x17,0xFF);

    sja_write_data(0x04,0x81);

    sja_write_data(0x01,0x08);
	delay_nus(10);
	sja_write_data(0x01,0x04);

    do
    {

	   sja_write_data(0x00,0x08);
    }
    while((sja_read_data(0x00)&0x01));

    SEI();
}


#line 165 "D:\liliang\can-232\CAN-232\can.c"
void sja_tx_service(void)
{
unsigned char Length;
unsigned char FF,i;
   if(flag.mess_wait==TRUE)
      {
 PORTD&=~(1<<PD7);
	   flag.mess_wait=FALSE;
	   FF=TransmitMessage[0]&0x80;
	   Length=TransmitMessage[0]&0x0f;

	   if(Length=0x08)
	      {
	        Length = 0x80;
	      }

	   sja_write_data(0x10,TransmitMessage[0]);
       sja_write_data(0x11,TransmitMessage[1]);
	   sja_write_data(0x12,TransmitMessage[2]);
	   if(FF)
	       {
	          sja_write_data(0x13,TransmitMessage[3]);
	          sja_write_data(0x14,TransmitMessage[4]);
	       }
	   for (i=0;i<Length;i++)
	      {
	          if(FF)
	              sja_write_data(0x15 +i,TransmitMessage[5+i]);
	          else
	              sja_write_data(0x15 +i,TransmitMessage[3+i]);
	      }
 PORTD|=(1<<PD7);


      sja_write_data(0x01,0x01);
	  }
}


#line 208 "D:\liliang\can-232\CAN-232\can.c"
void sja_tx(unsigned char *TransmitMessage)
{
  unsigned char Length;
  unsigned char FF,i,state;

  unsigned char sreg;
  sreg=SREG;
  CLI();

  state=sja_read_data(0x02);
  while(state&(1<<4));

  if(state&(1<<2))
  {
 PORTD&=~(1<<PD7);
    FF=TransmitMessage[0]&0x80;
	Length=TransmitMessage[0]&0x0f;





	if(Length>8)
	{
	 Length = 8;
	}
	sja_write_data(0x10,TransmitMessage[0]);
    sja_write_data(0x11,TransmitMessage[1]);
    sja_write_data(0x12,TransmitMessage[2]);
	if(FF)
	{
	sja_write_data(0x13,TransmitMessage[3]);
	sja_write_data(0x14,TransmitMessage[4]);
	}
	for (i=0;i<Length;i++)
	{
	  if(FF)
	    sja_write_data(21+i,TransmitMessage[5+i]);
	  else
	    sja_write_data(19+i,TransmitMessage[3+i]);
	}


	sja_write_data(0x01,0x01);
 PORTD|=(1<<PD7);





  }
  else
  {
    flag.mess_wait=TRUE;
  }

  SREG=sreg;
  SEI();
}



#line 275 "D:\liliang\can-232\CAN-232\can.c"
void sja_rx_service(void)
{
    unsigned char number,i,ptr;
    ptr= 0x10;
            if((sja_read_data(0x10)&0x40)==0x40)
    		{
                sja_write_data(0x01,0x04);
    		}
            else
    		{
                number=(sja_read_data(0x10)&0x0f);
				if (number>0x08)
				number=0x08;
                if ((sja_read_data(0x10))&0x80)
				{
                number=number+5;
				}
        		else
				{
                number=number+3;
				}
                for(i=0;i<number;i++)
        		{
                    RxBuffer[i]=sja_read_data(0x10 +i);
                	ptr++;
        		}
                sja_write_data(0x01,0x04);
    		}
}


#line 310 "D:\liliang\can-232\CAN-232\can.c"
void Search(void)
{
   unsigned char SearchStatus;
   SearchStatus=sja_read_data(0x02);







      if(SearchStatus&(1<<7))
         {




         sja_read_data(0x03);
         sja_write_data(0x00,0x08);
         }
      if(SearchStatus&0x02)
		 {




         sja_write_data(0x01,0x0c);
		 }
       if(sja_read_data(0x03) & 0x01)
         {
 PORTD&=~(1<<PD7);




         }

}



void play_buffer(unsigned char *ptr)
{
 unsigned char i;
 for (i=0;i<13;i++)
  {
    rprintfu08(*ptr);

	ptr++;
  }
   rprintfCRLF();
}



void buffer_init(void)
{
    TransmitMessage[0]=0x88;

    TransmitMessage[1]=192;
    TransmitMessage[2]=168;
    TransmitMessage[3]=0x00;
    TransmitMessage[4]=0x08;

    TransmitMessage[5]=0xCC;

    TransmitMessage[6]=0x00;
    TransmitMessage[7]=0x01;
    TransmitMessage[8]=0xa1;
    TransmitMessage[9]=0xa2;
    TransmitMessage[10]=0xa3;
    TransmitMessage[11]=0xa4;
    TransmitMessage[12]=0xff;
}

void test_can(void)
{
      rprintfCRLF();
	  rprintfStr("***CAN BUS DEBUG:***");
	  rprintfCRLF();

	  rprintfStr("content of transmit buffer ");
	  rprintfCRLF();
	  play_buffer(TransmitMessage);

	  CLI();
      sja_tx(TransmitMessage);
	  SEI();
	  rprintfCRLF();
}

⌨️ 快捷键说明

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