Autor Tema: Ayuda con punteros  (Leído 1875 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado JorgitoFRyOle

  • PIC12
  • **
  • Mensajes: 79
Ayuda con punteros
« en: 26 de Abril de 2005, 20:41:00 »
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