Bit banging for RF-ID reader

Status
Not open for further replies.

sanket.joshi

Member level 3
Joined
Jun 27, 2013
Messages
65
Helped
8
Reputation
16
Reaction score
8
Trophy points
8
Location
Mumbai,India
Visit site
Activity points
386
i want to interface RF-ID module using any two pins of 8051...
i have written following code...
Code:
include<reg51f.h>
#include<string.h>

#define _XTAL_FREQ   11059200    
#define Baudrate     9600
#define OneBitDelay  (100000000/Baudrate)

#define port P0            
#define lcdport P1  //14,13,12,11 pins of lcd and 1.7,1.6,1.5,1.4 of controller

sbit rs=port^0;        //Register select 
sbit rw=port^1;        //Read/Write 
sbit en=port^2;        //Enable pin

sbit  UART_RX=P2^0;
sbit  UART_TX=P2^1;

unsigned char d[12]=0,i,l;
unsigned char card_id[12];

void delay(unsigned int count)    //Function to provide delay
{
    int i,j;
     for(i=0;i<count;i++)
     for(j=0;j<1100;j++);
}

void lcdcmd(char cmdout)
{
lcdport=cmdout;
rs=0;
rw=0;
en=1;
delay(10);
en=0;
}
 
void lcddata(char dataout)
{
	lcdport=dataout;
rs=1;
rw=0;
en=1;
delay(10);
en=0;
}

void dis_cmd(char cmd_value)
{
	char cmd_value1;
	
		cmd_value1 = cmd_value & 0xF0;		//mask lower nibble because PA4-PA7 pins are used. 
	lcdcmd(cmd_value1);			// send to LCD
 
	cmd_value1 = ((cmd_value<<4) & 0xF0);	//shift 4-bit and mask
	lcdcmd(cmd_value1);			// send to LCD
}						
 
 
void dis_data(char data_value)
{
	char data_value1;
	
	data_value1=data_value&0xF0;
	lcddata(data_value1);
 
	data_value1=((data_value<<4)&0xF0);
	lcddata(data_value1);
}
void __delay_us(unsigned int d)
{
   unsigned int i, limit;
   limit = d/15;

   for(i=0;i<limit;i++);
}


void lcd_init()	// fuction for intialize 
{
	dis_cmd(0x02);		// to initialize LCD in 4-bit mode.
	dis_cmd(0x28);		//to initialize LCD in 2 lines, 5X7 dots and 4bit mode.
	dis_cmd(0x0C);
	dis_cmd(0x06);
	dis_cmd(0x80);
}

void initialize_serialcommunication(void)
{
SCON  = 0x50;
TMOD  = 0x20;
TH1   = 0xFD;
TL1   = 0xFD;
TR1   = 1;
TI    = 1;		          
}

void init(void)
{
UART_RX = 1;  //set as i/p
UART_TX = 0;  //set as o/p
}

unsigned char receive(void)
{
unsigned char DataValue = 0,i;

	//wait for start bit
	while(UART_RX==1);

	__delay_us(OneBitDelay);
	__delay_us(OneBitDelay/2);   // Take sample value in the mid of bit duration

	for (  i = 0; i < 8; i++ )
	{
		if ( UART_RX == 1 )   //if received bit is high
		{
			DataValue += (1<<i);
		}

		__delay_us(OneBitDelay);
	}

	// Check for stop bit
	if ( UART_RX == 1 )       //Stop bit should be high
	{
		__delay_us(OneBitDelay/2);

		return DataValue;
	}
	else                      //some error occurred !
	{
		__delay_us(OneBitDelay/2);
		return 0x000;
	}
}

void rfid_data(void)
{
for(i=0;i<12;i++)
{
card_id[i]=receive();

}
}

void main(void)
{
//unsigned char ch;
unsigned char data0[]="CARD ID:";
lcdport=0;
init();
//initialize_serialcommunication();
lcd_init();
dis_cmd(0x81);        //Place cursor to second position of first line 
    while(data0[i]!='\0')
   {
dis_data(data0[i]);
delay(20);
i++;
}
while(1)
{
rfid_data();
dis_cmd(0xC1);        //Place cursor to second position of second line
         for(l=0;l<12;l++)
         { 
              dis_data(card_id[l]);
			  delay(20);
          }
}
}

since RF-ID only transmit data i have written code for receiving...
but i m getting nothing on the LCD except statement(CARD ID..
what is the mistake in this program?
kindly help me...
its urgent friends...please help me
 
Last edited:

Status
Not open for further replies.

Similar threads

Cookies are required to use this site. You must accept them to continue using the site. Learn more…