Buenas:
Estoy intentando manejar el reloj en tiempo real DS1305, y para ello he creado mi propia libreria.
En ella he definido una tipo estructura para llevar el control de los datos del reloj:
struct DS1305_estructura {
BYTE seg;
BYTE min;
BYTE hor;
BYTE wdia;
BYTE mdia;
BYTE mes;
BYTE anho;
};
Las funciones que creo que no funcionan son asi:
void DS1305_poner_en_hora(BYTE min, BYTE hor, BYTE wdia, BYTE mdia, BYTE mes, BYTE anho)
{
struct DS1305_estructura *valores;
*valores->seg = binario_a_bcd(0);
*valores->min = binario_a_bcd(min);
bit_clear(hor,6); //ponemos a 0 para seleccionar 24h
*valores->hor = binario_a_bcd(hor);
*valores->wdia = binario_a_bcd(wdia);
*valores->mdia = binario_a_bcd(mdia);
*valores->mes = binario_a_bcd(mes);
*valores->anho = binario_a_bcd(anho);
DS1305_escribe_bloque(DS1305_REGISTRO_CALENDARIO, &valores, sizeof(struct DS1305_estructura));
}
void DS1305_obtener_fecha(BYTE *wdia, BYTE *mdia, BYTE *mes, BYTE *anho)
{
struct DS1305_estructura *valores;
DS1305_lee_bloque(DS1305_REGISTRO_CALENDARIO, &valores, sizeof(struct DS1305_estructura));
*wdia = bcd_a_binario(*valores->wdia);
*mdia = bcd_a_binario(*valores->mdia);
*mes = bcd_a_binario(*valores->mes);
*anho = bcd_a_binario(*valores->anho);
}
Con la funcion poner_en_hora lo que pretendo es pasando los valores que me interesan configurar, asignarselos a una variable de la estructura anterior y a partir de esta poder escribirlos en la memoria del reloj, este ultimo paso lo hace la funcion escribe_bloque(...)
Con la funcion obtener_fecha lo que pretendo es obtener 4valores que me interesan, para ello los paso como parametros por referencia con el fin de poder acceder a ellos en el programa principal, para ello lo que hago es leer los valores que hay en memoria del reloj y pasarlos a una variable de tipo estructura (lo hace la funcion lee_bloque(...)) y a partir de aki obtener los valores que yo kiero.
En el main
void main()
{
BYTE seg, min, hor, wdia, mdia, mes, anho;
set_tris_a(0x00);
set_tris_b(0x00);
set_tris_c(0x80); //entrada RX //salida TX
set_tris_d(0x00);
set_tris_e(0x00);
setup_spi(SPI_MASTER | SPI_H_TO_L | SPI_CLK_DIV_16);
//Initializes the Serial Port Interface (SPI). This is used for 2 or 3 wire serial devices that follow a common clock/data protocol
LCD_borrar(); //borra el display
LCD_inicio();
DS1305_inicio();
DS1305_poner_en_hora(9,3,1,26,4,5);
DS1305_obtener_fecha(&wdia, &mdia, &mes, &anho);
LCD_posicion(14,1);
LCD_entero(anho);
LCD_posicion(10,1);
LCD_entero(mes);
LCD_posicion(6,1);
LCD_entero(mdia);
LCD_posicion(2,1);
LCD_entero(wdia);
}
El resultado que me ofrece el lcd es todo ceros. Creo que mi problema principal esta en el uso de los punteros, es que no son mi fuerte. A ver si alguien me puede exar una manita para desatascarme de aki.
1Saludo y muxas gracias a tos