RTC 12C887 Issue with P89V51RD2

Thread Starter

scintrillating

Joined Dec 30, 2011
5
I have Interfaced 12C887 with P89V51RD2 but the time update does not occur. However the same code when burned in AT89C51, works perfectly...But due to memory restrictions of 4Kb in the Later, we have to use the former. Please help me out on this issue, ASAP!

The Code is :

Rich (BB code):
#include <p89v51rd2.h>
#include<absacc.h>

#define port P3
#define lcd_dataport P2  // lcd_dataport for lcd
#define keypad P1  // Port for keypadpad
#define timeport P0 // Port for RTC

sbit rs = port^0;
sbit rw = port^1;
sbit en = port^5;


int hr, min, sec;
unsigned char a[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59};
    
void delay(unsigned int msec) //Time delay function
{
int i,j ;
for(i=0;i<msec;i++)
for(j=0;j<1275;j++);
}

void lcdcmd(unsigned char item) //Function to send command to LCD
{
lcd_dataport = item;
rs=0;
rw=0;
en=1;
delay(1);
en=0;
return;
}

void lcddata(unsigned char item) //Funtion to send data on LCD
{
lcd_dataport = item;
rs=1;
rw=0;
en=1;
delay(1);
en=0;
}

void lcddata_string(unsigned char *str) // Function to send string on LCD
{
int i=0;
while(str!='\0')
{
lcddata(str);
i++;
delay(1);
}
}

void lcd(unsigned char str[16])  // Funtion display string on LCD
{
lcdcmd(0x38);
lcdcmd(0x0C);
lcddata_string(str);
}

void bcdconv(unsigned char mybyte)
{
unsigned char x,y;
x=mybyte&0x0F;
x=x|0x30;
y=mybyte&0xF0;
y=y>>4;
y=y|0x30;
lcddata(y);
lcddata(x);
}

void main()
{
lcdcmd(0x38);
lcdcmd(0x0C);
lcdcmd(0x01);         
delay(220);
XBYTE[10]=0x20;
XBYTE[11]=0x82;
XBYTE[0]=0x15;
XBYTE[2]=0x59;
XBYTE[4]=0x12;
XBYTE[11]=0x02;
while(1)
{
lcdcmd(0x80);
lcd("TIME:");
lcdcmd(0x88);
hr=XBYTE[4];
bcdconv(hr);
lcddata(':');
min=XBYTE[2];
bcdconv(min);
lcddata(':');
sec=XBYTE[0];
bcdconv(sec);
}
}
 
Last edited by a moderator:
I have Interfaced 12C887 with P89V51RD2 but the time update does not occur. However the same code when burned in AT89C51, works perfectly...But due to memory restrictions of 4Kb in the Later, we have to use the former. Please help me out on this issue, ASAP!

The Code is :

Rich (BB code):
#include <p89v51rd2.h>
#include<absacc.h>

#define port P3
#define lcd_dataport P2  // lcd_dataport for lcd
#define keypad P1  // Port for keypadpad
#define timeport P0 // Port for RTC

sbit rs = port^0;
sbit rw = port^1;
sbit en = port^5;


int hr, min, sec;
unsigned char a[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59};
    
void delay(unsigned int msec) //Time delay function
{
int i,j ;
for(i=0;i<msec;i++)
for(j=0;j<1275;j++);
}

void lcdcmd(unsigned char item) //Function to send command to LCD
{
lcd_dataport = item;
rs=0;
rw=0;
en=1;
delay(1);
en=0;
return;
}

void lcddata(unsigned char item) //Funtion to send data on LCD
{
lcd_dataport = item;
rs=1;
rw=0;
en=1;
delay(1);
en=0;
}

void lcddata_string(unsigned char *str) // Function to send string on LCD
{
int i=0;
while(str!='\0')
{
lcddata(str);
i++;
delay(1);
}
}

void lcd(unsigned char str[16])  // Funtion display string on LCD
{
lcdcmd(0x38);
lcdcmd(0x0C);
lcddata_string(str);
}

void bcdconv(unsigned char mybyte)
{
unsigned char x,y;
x=mybyte&0x0F;
x=x|0x30;
y=mybyte&0xF0;
y=y>>4;
y=y|0x30;
lcddata(y);
lcddata(x);
}

void main()
{
lcdcmd(0x38);
lcdcmd(0x0C);
lcdcmd(0x01);         
delay(220);
XBYTE[10]=0x20;
XBYTE[11]=0x82;
XBYTE[0]=0x15;
XBYTE[2]=0x59;
XBYTE[4]=0x12;
XBYTE[11]=0x02;
while(1)
{
lcdcmd(0x80);
lcd("TIME:");
lcdcmd(0x88);
hr=XBYTE[4];
bcdconv(hr);
lcddata(':');
min=XBYTE[2];
bcdconv(min);
lcddata(':');
sec=XBYTE[0];
bcdconv(sec);
}
}


hi scintrillating,

try the changed code.

#include <p89v51rd2.h>
#include<absacc.h>

#define port P3
#define lcd_dataport P2 // lcd_dataport for lcd
#define keypad P1 // Port for keypadpad
#define timeport P0 // Port for RTC

sbit rs = port^0;
sbit rw = port^1;
sbit en = port^5;


int hr, min, sec;
unsigned char a[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59};

void delay(unsigned int msec) //Time delay function
{
int i,j ;
for(i=0;i<msec;i++)
for(j=0;j<1275;j++);
}

void lcdcmd(unsigned char item) //Function to send command to LCD
{
lcd_dataport = item;
rs=0;
rw=0;
en=1;
delay(1);
en=0;
return;
}

void lcddata(unsigned char item) //Funtion to send data on LCD
{
lcd_dataport = item;
rs=1;
rw=0;
en=1;
delay(1);
en=0;
}

void lcddata_string(unsigned char *str) // Function to send string on LCD
{
int i=0;
while(str!='\0')
{
lcddata(str);
i++;
delay(1);
}
}

void lcd(unsigned char str[16]) // Funtion display string on LCD
{
lcddata_string(str);
}

void bcdconv(unsigned char mybyte)
{
unsigned char x,y;
x=mybyte&0x0F;
x=x|0x30;
y=mybyte&0xF0;
y=y>>4;
y=y|0x30;
lcddata(y);
lcddata(x);
}

void main()
{
lcdcmd(0x38);
lcdcmd(0x01);
lcdcmd(0x0C);
lcdcmd(0x06);
delay(220);
XBYTE[10]=0x20;
XBYTE[11]=0x82;
XBYTE[0]=0x15;
XBYTE[2]=0x59;
XBYTE[4]=0x12;
XBYTE[11]=0x02;
while(1)
{
lcdcmd(0x80);
lcd("TIME:");
lcdcmd(0x88);
hr=XBYTE[4];
bcdconv(hr);
lcddata(':');
min=XBYTE[2];
bcdconv(min);
lcddata(':');
sec=XBYTE[0];
bcdconv(sec);
}
}
 

Attachments

BMorse

Joined Sep 26, 2009
2,675
hi scintrillating,

try the changed code.
you should really use the code tags to make code more readable.....

Rich (BB code):
#include <p89v51rd2.h>
#include<absacc.h>

#define port P3
#define lcd_dataport P2  // lcd_dataport for lcd
#define keypad P1  // Port for keypadpad
#define timeport P0 // Port for RTC

sbit rs = port^0;
sbit rw = port^1;
sbit en = port^5;


int hr, min, sec;
unsigned char a[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59};
    
void delay(unsigned int msec) //Time delay function
{
int i,j ;
for(i=0;i<msec;i++)
for(j=0;j<1275;j++);
}

void lcdcmd(unsigned char item) //Function to send command to LCD
{
lcd_dataport = item;
rs=0;
rw=0;
en=1;
delay(1);
en=0;
return;
}

void lcddata(unsigned char item) //Funtion to send data on LCD
{
lcd_dataport = item;
rs=1;
rw=0;
en=1;
delay(1);
en=0;
}

void lcddata_string(unsigned char *str) // Function to send string on LCD
{
int i=0;
while(str!='\0')
{
lcddata(str);
i++;
delay(1);
}
}

void lcd(unsigned char str[16])  // Funtion display string on LCD
{
lcddata_string(str);
}

void bcdconv(unsigned char mybyte)
{
unsigned char x,y;
x=mybyte&0x0F;
x=x|0x30;
y=mybyte&0xF0;
y=y>>4;
y=y|0x30;
lcddata(y);
lcddata(x);
}

void main()
{
lcdcmd(0x38);
lcdcmd(0x01);         
lcdcmd(0x0C);
lcdcmd(0x06);
delay(220);
XBYTE[10]=0x20;
XBYTE[11]=0x82;
XBYTE[0]=0x15;
XBYTE[2]=0x59;
XBYTE[4]=0x12;
XBYTE[11]=0x02;
while(1)
{
lcdcmd(0x80);
lcd("TIME:");
lcdcmd(0x88);
hr=XBYTE[4];
bcdconv(hr);
lcddata(':');
min=XBYTE[2];
bcdconv(min);
lcddata(':');
sec=XBYTE[0];
bcdconv(sec);
}
}
 
Top