Saturday, November 14, 2009

SPI code for communication between two P89V51 RD2 controllers

//Pseudo code for communication between two microcontrollers


//Tested on p89v51RD2 controller



#include

#include



void init_master(void);

void init_slave(void);

void delay(void);

int transfer_data(void);

int recieve_data(void);

sbit ssbar=P1^4;

sbit mosi=P1^5;

sbit miso=P1^6;

sbit device_check=P2^7; // check bit for device to work in either mode

sbit slave_this=P2^6; // low this pin for slave mode

sbit master_this=P2^5; // low this pin for master mode



char sen[]={0x01,0x01,0x02,0x03,0x00,0x00,0x00,0x00};

char rec[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};



void main()

{ int flag;

int device;

int done;

P2=0xFF;

delay();

delay();



do

{

if(slave_this==0x00)

{device=1;

flag=1 ;}

if(master_this==0x00)

{device=0;

flag=1;}





}while(flag==1);







delay();

switch (device)

{

case 0:

ssbar=0x00;

init_master();

done=transfer_data();

if(done==0x01)

SPCFG=0X80; //after COMPLETEION OF DATA TRANSFER SPIF SET HIGH;



break;

case 1:

delay();

delay();

if(ssbar=0x00)

{

init_slave();

recieve_data();}

break;

default:

break;

}







}







void init_master()

{

SPCTL=0x50;

}



void init_slave()

{

SPCTL=0x44;

}











int transfer_data()

{

int i;

delay();

for(i=0;i<8;i++)

{



SPDAT=sen[i];

delay();

delay();



}







return 1;



}







int recieve_data()

{

int i;

delay();

delay();

for(i=0;i<8;i++)

{



rec[i]=SPDAT;

delay();

delay();



}





return 1;



}

void delay()

{

int i;

for(i=0;i<=30000;i++);



}

Thursday, October 8, 2009

'SPI' BASICS

To read about basics of SPI protocol visit the uder given live space...
www.abhishekkumatatsit.spaces.live.com
On the above space go to skydrive and inside it to the public folder.There in the technical topic one can find the document related to SPI