#define PCF2127_CONTROL1 0x00 //control/status 1
#define PCF2127_CONTROL2 0x01 //control/status 2
#define PCF2127_CONTROL3 0x02 //control/status 2
#define PCF2127_CLKOUT 0x0F //CLKOUT control
#define PCF2127_SECONDS 0x03 //0..59 BCD (bit7 is VL)
#define PCF2127_MINUTES 0x04 //0..59 BCD
#define PCF2127_HOURS 0x05 //0..23 bcd
#define PCF2127_DAYS 0x06 //1..31 bcd
#define PCF2127_WEEKDAY 0x07 //0..6
#define PCF2127_MONTHS 0x08 //0..12 (bit7 is Century, leave clear for 20xx)
#define PCF2127_YEARS 0x09 //0..99 bcd
#define PCF2127_SECOND_ALARM 0x0A //0..59 BCD
#define PCF2127_MINUTE_ALARM 0x0B //0..59 BCD
#define PCF2127_HOUR_ALARM 0x0C //0..23 BCD
#define PCF2127_DAY_ALARM 0x0D //0..31 BCD
#define PCF2127_WEEKDAY_ALARM 0x0E //0..6
#define PCF2127_RAM_ADR_MSB 0x1A
#define PCF2127_RAM_ADR_LSB 0x1B
#define PCF2127_RAM_WRT_CMD 0x1C
#define PCF2127_RAM_RD_CMD 0x1D
void write_ram(unsigned int16 direccion, int8 valor) {
i2c_start(STREAM_PCF2127);
i2c_write(STREAM_PCF2127, PCF2127_I2C_ADDR);
i2c_write(STREAM_PCF2127, PCF2127_RAM_ADR_MSB);
i2c_write(STREAM_PCF2127, direccion>>8);
i2c_write(STREAM_PCF2127, direccion&0xFF);
i2c_start(STREAM_PCF2127);
i2c_write(STREAM_PCF2127, PCF2127_I2C_ADDR);
i2c_write(STREAM_PCF2127, PCF2127_RAM_WRT_CMD);
i2c_write(STREAM_PCF2127, valor);
i2c_stop(STREAM_PCF2127);
}
int8 read_ram(unsigned int16 direccion) {
int8 valor;
i2c_start(STREAM_PCF2127);
i2c_write(STREAM_PCF2127, PCF2127_I2C_ADDR);
i2c_write(STREAM_PCF2127, PCF2127_RAM_ADR_MSB);
i2c_write(STREAM_PCF2127, direccion>>8);
i2c_write(STREAM_PCF2127, direccion&0xFF);
i2c_start(STREAM_PCF2127,2);
i2c_write(STREAM_PCF2127, PCF2127_I2C_ADDR);
i2c_write(STREAM_PCF2127, PCF2127_RAM_RD_CMD);
i2c_write(STREAM_PCF2127, 0xFF);
i2c_start(STREAM_PCF2127,2);
i2c_write(STREAM_PCF2127, PCF2127_I2C_ADDR+1);
valor = i2c_read(STREAM_PCF2127,1);
i2c_stop(STREAM_PCF2127);
return (valor);