CAN-receiver.

CAN-receiver.

This is the CAN-receiver . The receiver accpets data from CAN-transmitter and when data-match happens INT pin goes low and mcu turns on red led. Entire project is based on bare-metal coding and no library is used here .(pic16f877a is used to control the mcp2515-module). Here is the code part of receiver

#include <xc.h>

#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)

#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)

#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)

#pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR disabled)

#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)

#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)

#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)

#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)

#define XTALFREQ 16000000

char buf0[14];

char buf1[14];

static void init_config(void) {

//Write your initialization code here

TRISC5=0;

TRISC4=1;

TRISC3=0;

TRISC2=0;// Chipselect;

TRISC1=0;

SSPM0=0;

SSPM1=0;

SSPM2=0;

SSPM3=0;

SMP=0;

CKP=0;

RC2=1;

RC1=0;

CKE=1;

SSPEN=1;

}

char data_trasnfer(unsigned char data)

{

SSPBUF=data;

while(!SSPIF);

SSPIF=0;

data=SSPBUF;

return data;

}

void config()

{

RC2=0;

data_trasnfer(0x02);

data_trasnfer(0x0F);

data_trasnfer(0x80);

RC2=1;

}

void reset()

{

RC2=0;

data_trasnfer(0XC0);

RC2=1;

}

void normalmode()

{

RC2=0;

data_trasnfer(0x02);

data_trasnfer(0x0f);

data_trasnfer(0x00);

RC2=1;

}

void receiver0() // setting mask and filer.

{

RC2=0;

data_trasnfer(0x02);// write

data_trasnfer(0x60);// address

data_trasnfer(0X04);// data to activate roll over.

RC2=1;

/*go to filter*/

RC2=0;

data_trasnfer(0x02);// write

data_trasnfer(0x00);// address.

data_trasnfer(0x00);//data

data_trasnfer(0x00);// data;

RC2=1;

/*go to mask*/

RC2=0;

data_trasnfer(0x02);// write

data_trasnfer(0x20);// address.

data_trasnfer(0x00);//data

data_trasnfer(0x00);// data;

RC2=1;

}

void receiver1() //setting mask and filter

{

RC2=0;

data_trasnfer(0x02);// write

data_trasnfer(0x70);// address

data_trasnfer(0X00);// data

RC2=1;

/*go to Filter*/

RC2=0;

data_trasnfer(0x02);// write

data_trasnfer(0x04);//address

data_trasnfer(0x00);//data

data_trasnfer(0X00);//data

RC2=1;

/*go to mask*/

RC2=0;

data_trasnfer(0x02);

data_trasnfer(0x24);

data_trasnfer(0x00);

data_trasnfer(0x00);

RC2=1;

}

void mcp2515_init()

{

reset();// reset the mcp2515;

config();// set it to configuration mode

RC2=0;

data_trasnfer(0x02);// write ins.

data_trasnfer(0x28);// address.

data_trasnfer(0x05);// data

data_trasnfer(0xF1);

data_trasnfer(0x04);

RC2=1;

receiver0();// set maks filter and turnon rollover

receiver1();//ser mask and filter.

normalmode();

}

void inter()

{

RC2=0;

data_trasnfer(0x02);

data_trasnfer(0x2B);

data_trasnfer(0x03);

RC2=1;

}

void turonoff()

{

RC2=0;

data_trasnfer(0x02);

data_trasnfer(0x2C);

data_trasnfer(0x00);

RC2=1;

}

unsigned char readregister(char data)

{

char b=0x00;

RC2=0;

data_trasnfer(0x03);

data_trasnfer(data);

b=data_trasnfer(0x00);

RC2=1;

return b;

}

void main(void) {

init_config(); //Calling initializing function

mcp2515_init();

/*make inter flagbit =0*/

char status=0x00;

char result1=0x00,result2=0x00;

inter();// activate interrupt

while (1) {

//Write application code here

while(status==0x00)

{

status=readregister(0x2C);

}

if(status&(0x01))

{

// read buffer 0

RC2=0;

data_trasnfer(0x92);

result1=data_trasnfer(0x00);

RC2=1;

}

if(status&(0x02))

{

/*read buffer 1*/

RC2=0;

data_trasnfer(0x96);

result2=data_trasnfer(0x00);

RC2=1;

}

if(result1==0xA6)

{

while(1)

{

RC1=1;

}

}

status=0x00;

}

}


This CAN receiver also receives data from anywhere in its surroundings, including your vacuum cleaner and coffee machine.?? #EMC #ESD

要查看或添加评论,请登录

Embedded enthusiastic的更多文章

社区洞察

其他会员也浏览了