CAN MESSAGE from PIC18f45f

Gast #803026
Lesenswert?

i need to transmit a can message from PIC18f45f. cann anoyone please 
tell me what is wrong here. This is my code. I use CAN-MCP2551.

# include <p18f458.h>
# include <p18cxxx.h>
# include <can2510.h>


# define  RXF5  101
# define  RXF4  100
# define  RXF3  011
# define  RXF2  010
# define  RXF1  001 \\ only possible when RXB0DBENbit is set
# define  RXF0  000 \\ only possible when RXB0DBENbit is set


# define CAN_TX_PRIORITY_0 0
# define CAN_TX_STD_FRAME 0
# define CAN_TX_NO_RTR_FRAME 0


typedef struct CANMessage {
  unsigned long Address;
  unsigned char MessageData[8];
  unsigned char NoOfBytes;
  unsigned char Priority;
  unsigned Ext:1;
  unsigned Remote:1;
};

char CANPut(CANMessage)

void Can_Config (void);
void Can_Init (void);
void Can_Txmsg (void);
void Can_Txinit (void);

/* for can_message receive
unsigned char NewMessage[8];
unsigned char NewMessageData[8];
unsigned char NewMessageLen;
unsigned int NewMessageFlags;*/

unsigned char bus_free;
unsigned char r ;

 void main()

{
   Can_Config(); // to configure CANRX and TX as interface
  Can_Init(); // can_initialising and configuring
  CANCON = 0x00; // Normal mode , to send or receive a message ,can 
should be in the normal mode
     CANSTAT = 0x00; // Normal mode

  Can_Txinit();// initialising to transmit message
  TXB0CONbits.TXREQ = 1; // TXREQ is set, the TXABT, TXLARB and TXERR 
bits will be cleared

      if(bus_free == 0)
                {
                          r = 1;   // breakpoint
                          CANPut(0x02,0x01,1,CAN_TX_PRIORITY_0 & 
CAN_TX_STD_FRAME & CAN_TX_NO_RTR_FRAME);
                          while(bus_free == 0)
              continue;
                      }
            r = 0;


}



void Can_Txinit()
  {

    TXB0CON = 0x00;
    PIE3bits.TXB0IE = 0;
    TXB0SIDL = 0; // lower byte transmit buffer with standard identifier
    TXB0SIDH = 0; // higher byte transmit buffer with standard 
identifier
    TXB0DLC = 0; // data length code

  }

void Can_Config()

  {
    TRISBbits.TRISB3 = 1; //to configure CANRX as interface
    TRISBbits.TRISB2 = 0;  //to configure CANTX as interface
  }

void Can_Init()
{

  CANCON  = 0x10; //Request configuration mode
  CANSTAT = 0x10; // Configuration mode
  RXB0CON = 0x64; // Receive all messages (including those with errors, 
Roll over from receive buffer0to1
  RXB1CON = 0x60; // Receive all messages (including those with errors, 
Roll over from receive buffer0to1
  BRGCON1 = 0x01;
  BRGCON2 = 0x00;
  BRGCON3 = 0x00;

}




Antworten können aud Deutsch, Englich oder Französisch erfolgen
besten Dank

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren