Forum: Mikrocontroller und Digitale Elektronik CAN MESSAGE from PIC18f45f


von azadeh (Gast)


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

von Andreas K. (a-k)


Lesenswert?

Vor allem fehlt was. Erstens ein Semikolon hinter der Deklaration von 
CANPut, zweitens der Code davon, drittens die Schilderung des Problems.

Und als Anhang macht sich der Code auch besser, weil die Formatierung 
nicht so vor die Hunde geht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.