#include <p18cxxx.h>
#include <delays.h>
#pragma config FOSC=HS2 //20MHz
#pragma config PLLCFG=OFF
#pragma config FCMEN=OFF
#pragma config IESO=OFF
#pragma config PWRTEN=OFF
#pragma config BOREN=OFF
#pragma config BORV=3
#pragma config WDTEN=OFF
#pragma config WDTPS=32768
#pragma config MCLRE=OFF
#pragma config STVREN=ON
#pragma config XINST=OFF
#pragma config CP0=OFF
#pragma config CP1=OFF
#pragma config CPB=OFF
#pragma config CPD=OFF
#pragma config WRT0=OFF
#pragma config WRT1=OFF
#pragma config WRTC=OFF
#pragma config WRTB=OFF
#pragma config WRTD=OFF
#pragma config EBTR0=OFF
#pragma config EBTR1=OFF
//***********************************************************************
#pragma udata
char StdMsg[11]={0x11,0x00,0x08,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
#pragma code
void InitCAN(void);
char TxCan(char*);
void main(void)
{
ANCON0=0;
ANCON1=0;
TRISC=0;
InitCAN();
while(1)
{
LATCbits.LATC4^=1;
Delay10KTCYx(0);
TxCan(StdMsg);
}
}
//*************************************************************************
void InitCAN(void)
{
TRISBbits.TRISB3=1;
TRISBbits.TRISB2=0;
CANCON=0x80;
while ((CANSTAT & 0xE0) != 0x80);
/*
RXM0SIDH=0x00;
RXM0SIDL=0x00;
RXM1SIDH=0x00;
RXM1SIDL=0x00;
RXM0EIDH=0x00;
RXM0EIDL=0x00;
RXM1EIDH=0x00;
RXM1EIDL=0x00;
RXB0CONbits.RXM1=0;
RXB0CONbits.RXM0=1;
RXB0CONbits.RB0DBEN=0;
*/
BRGCON1=0x01; //20MHz 500kbps
BRGCON2=0xA0;
BRGCON3=0x02;
CIOCONbits.ENDRHI=1;
CIOCONbits.CANCAP=0;
CANCON=0b00000000;
while ((CANSTAT & 0b11100000) != 0b00000000);
}
char TxCan(char* StdMsg)
{
if(TXB0CONbits.TXREQ){
return 1;
}
TXB0D1 =StdMsg[4];
TXB0D2 =StdMsg[5];
TXB0D3 =StdMsg[6];
TXB0D4 =StdMsg[7];
TXB0D5 =StdMsg[8];
TXB0D6 =StdMsg[9];
TXB0D7 =StdMsg[10];
TXB0SIDH=StdMsg[0];
TXB0SIDL=StdMsg[1];
TXB0DLC =StdMsg[2];
TXB0D0 =StdMsg[3];
// TXB0CONbits.TXPRI0=0;
//TXB0CONbits.TXPRI1=0;
TXB0CONbits.TXREQ=1;
return 0;
}