RTC12C887 Interfacing Error

Thread Starter

scintrillating

Joined Dec 30, 2011
5
I have written the code in C Language to build a Digital Clock using DS12C887 and a 16*2 LCD...But I am facing a problem in getting the exact output...

Initially as i set time i get output as (HH:MM:SS format)
16:58:01
and get the outputs as

16:58:02
03:03:03
58:58:04
and so on but not in unique pattern...


The out put is very much unpredictable...please help me out

The code for the program appears as below...


Rich (BB code):
#include<reg51.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^2;

sbit key0=keypad^0;
sbit key1=keypad^1;
sbit key2=keypad^2;
sbit key3=keypad^3;
sbit key4=keypad^4;
sbit key5=keypad^5;
sbit key6=keypad^6;
sbit key7=keypad^7;

int hr, min, sec;

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[10])  // Funtion to Initialize LCD
{
lcdcmd(0x38);
lcdcmd(0x0C);
lcdcmd(0x01);
lcdcmd(0x80);
lcddata_string(str);
}

void check_key()
{
if(key0==0)
lcd("SET TIME");
if(key1==0)
lcd("Increment");
if(key2==0)
lcd("Decrement");
if(key3==0)
lcd("SET A");
if(key4==0)
lcd("SET B");
if(key5==0)
lcd("SET C");
if(key6==0)
lcd("SET BANGS");
if(key7==0)
lcd("SET GROUPS");
}

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()
{
        delay(220);
        XBYTE[10]=0x20;
        XBYTE[11]=0x82;
        lcd("TIME:");
        while(1)
        {
        lcdcmd(0x88);
        hr=XBYTE[4];
        bcdconv(hr);
        lcddata(':');
        min=XBYTE[2];
        bcdconv(min);
        lcddata(':');
        sec=XBYTE[0];
        bcdconv(sec);
        lcdcmd(0x02);
        }
}

 
Last edited by a moderator:
Top