Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
08/26/08 06:42
Read: times


 
#157756 - which RTC
Responding to: ???'s previous message
which type RTC(IIC or 3wire).
if IIC check this code. this code will work with DS1307 RTC IC



...void i2c_start()
{
	sda=1;scl=1;sda=0;
}
void i2c_stop()
{
	sda=0;sda=0;sda=0;scl=1;scl=1;sda=1;
}
void i2c_write(unsigned char d)
{
	unsigned char i,d1=d;
	scl=0;
	for(i=1;i<=8;i++)
	{
		sda=(d>>7);
		scl=1;
		d=d<<1;
		scl=0;
	}
	sda=1;
	scl=0;
	scl=1;
	if(sda)
	{
		lcd_puts("ACK missing",0x80);
		lcd_putval(d1,0xC6,0);
	}
	scl=0;
}
unsigned char i2c_read(unsigned char b)
{
	unsigned char d,i;
	sda=1;
	scl=0;
	for(i=1;i<=8;i++)
	{
		scl=1;
		d=d<<1;
		d=d | (unsigned char)sda;
		scl=0;
	}
	sda=b;
	scl=0;
	scl=1;
	if(b==nack) sda=1;
	scl=0;
	sda=1;
	return d;
}




unsigned char hex_bcd(unsigned char w)
{
	char w1,w2,w3;
	if(w<10)
	{
		return w;
	}
	else
	{
		w1 = w%10;
		w2 = w/10;
		w3 = (w2*0x10)+w1;
		return (w3);
	}
}


unsigned char bcd_hex(unsigned char a)
{
	char b,c,d;
	b = a & 0xF0;
	c = b;
	b >>=4;
	d = a & 0x0F;
	//out = ((c-(6*b))+d);
	return ((c-(6*b))+d);
}


void initialise()
{
	i2c_start();
	i2c_write(addrtc);
	i2c_write(0x00);
	i2c_write(0x00);
	i2c_stop();
	
	i2c_start();
	i2c_write(addrtc);
	i2c_write(0x00);
	i2c_write(0x00);
	i2c_write(0x00);
	i2c_write(0x00); //01010000
	i2c_write(0x02);
	i2c_write(0x21);
	i2c_write(0x06);
	i2c_write(0x08);
	
	//#if defined DS1307
	i2c_write(0x10);
	//#endif
	i2c_stop();	
/*
	i2c_start();
	i2c_write(0xA0);
	i2c_write(0x00);
	i2c_write(0x00);
	i2c_write(0x55);
	i2c_write(0x11);
	i2c_write(0x99);
	i2c_stop();
	delayUs(50);	*/
}

void rtc_read()
{
	i2c_start();
	i2c_write(addrtc);
	i2c_write(0x00);
	i2c_start();
	i2c_write(addrtc|1);
	rsec=i2c_read(ack);
	rmin=i2c_read(ack);
	rhour=i2c_read(ack);
	rday=i2c_read(ack);
	rdate=i2c_read(ack);
	rmonth=i2c_read(ack);
	ryear=i2c_read(nack);
//	i2c_read(nack);
	i2c_stop();
	if(tsec!=rsec && l==32)
	{
		tsec = rsec;
		d = 1;
	}

}
...


List of 7 messages in thread
TopicAuthorDate
How to design an hour meter using RTC and AT89C51            01/01/70 00:00      
   bad description            01/01/70 00:00      
      Not all possible            01/01/70 00:00      
         why?            01/01/70 00:00      
            Common need            01/01/70 00:00      
   which RTC            01/01/70 00:00      
      Reading helps            01/01/70 00:00      

Back to Subject List