void TWI_start();
void TWI_stop();
void TWI_write(char);
char TWI_read();
void RTC_write(char,char);
char RTC_read(char);
void setup() {
volatile char *TWBR1=(volatile char*) 0xB8;
*TWBR1=0x48;//for 100khz scl
volatile char *TWSR1=(volatile char*) 0xB9;
*TWSR1=0x00;//prescalar is 1;
Serial.begin(9600);
RTC_write(0x00,0x30);
RTC_write(0x01,0x30);
RTC_write(0x02,0x17);
while(1)
{
char second=RTC_read(0x00);
char minute=RTC_read(0x01);
char hour=RTC_read(0x02);
Serial.print("Time :");
Serial.print(hour,HEX);
Serial.print("/");
Serial.print(minute,HEX);
Serial.print("/");
Serial.println(second,HEX);
delay(1000);
}
}
void RTC_write(char address,char data)
{
TWI_start();
TWI_write(0xD0);
TWI_write(address);
TWI_write(data);
TWI_stop();
}
char RTC_read(char address)
{
TWI_start();
TWI_write(0xD0);
TWI_write(address);
TWI_start();
TWI_write(0xD1);
char data=TWI_read();
TWI_stop();
return data;
}
void TWI_start()
{
volatile char *TWCR1=(volatile char*) 0xBC;
*TWCR1=0xA4;//set start bit
while(!(*TWCR1 & (0x80)));
}
void TWI_write(char data)
{
volatile char *TWCR1=(volatile char*) 0xBC;
volatile char *TWDR1=(volatile char*) 0xBB;
*TWDR1=data;
*TWCR1=0x84;
while(!(*TWCR1 & (0x80)));
}
void TWI_stop()
{
volatile char *TWCR1=(volatile char*) 0xBC;
*TWCR1=0xB4;//set stop bit
while(!(*TWCR1 & (0x80)));
}
char TWI_read()
{
volatile char *TWCR1=(volatile char*) 0xBC;
volatile char *TWDR1=(volatile char*) 0xBB;
*TWCR1=0x84;
while(!(*TWCR1 & (0x80)));
char data =*TWDR1;
return data;
}
void loop() {
// put your main code here, to run repeatedly:
}