Buenas, gracias por contestarme
La libreria del lcd es la siguiente, no te la mando toda, solo lo que interesa, si necesitas alguna parte mas tb te la mando
// //
// Coloca el cursor en las coordenadas deseadas //
// x = columna (1-16) //
// y = columna (1-2) //
void LCD_posicion(int x, int y) //
{ //
int direccion; //
//
if (y != 1) //segun el valor de y coloca la //
// correspondiente direccion //
direccion = LCD_LINEA2; //
else //
direccion = LCD_LINEA1; //
direccion = direccion + (x-1); //xq pos(1,1) se //
// corresponde con la direccion 00 y la pos(7,1)//
// se corresponde con la direccion 06 //
LCD_enviar(LCD_COMANDO,LCD_DDRAM | direccion); //
// direccion los ultimos 7bits //
} //
// //
//----------------------------------------------------//
// //
// Inicializar los puertos E y D y los bits de control//
void LCD_preparar() //
{ //
set_tris_e(0xF8); // pone los 3bits de control como//
// salidas //
set_tris_d(0x00); // pone el puertoB como salida //
//
output_low(LCD_EN); // inicializa a 0 los bits de //
// control //
output_low(LCD_RW); //
output_low(LCD_RS); //
delay_ms(20); //
} //
// //
//----------------------------------------------------//
// //
//Iniciar el lcd con las caracteristicas propias del //
// modelo y en la funcion deseada //
void LCD_inicio() //
{ //
int i; //
//
LCD_preparar(); //
//
for(i=0; i<3; i++) //
{ //
LCD_enviar(LCD_COMANDO,LCD_CONFIGURAC); //
delay_ms(5); //
} //
LCD_encender_display(); //
LCD_borrar(); //
LCD_enviar(LCD_COMANDO,LCD_INCREM_NO_DESPLAZ); //
} //
// //
//----------------------------------------------------//
A ver si encuentras tu el fallo. Y respecto al ds1305 como compruebo si ocurre un desbordamiento en la variable que guarda el resultado de la lectura?
La libreria es:
void DS1305_escribe_byte(BYTE contenido)
{
int i;
for(i = 0; i <= 7; i++)
{
output_bit(DS1305_SDO, shift_right(&contenido,1,0));
// desplaza 8 bits y los saca por el Patilla_sdo; primero sale el LSB
output_high(DS1305_SCLK);
output_low(DS1305_SCLK); //probar si funciona bien
}
}
void DS1305_escribe(BYTE direccion, BYTE dato)
{
output_high(DS1305_CS); //activacion
DS1305_escribe_byte(direccion);
DS1305_escribe_byte(dato);
output_low(DS1305_CS); //desactivacion
}
BYTE DS1305_lee(BYTE contenido)
{
int i;
BYTE dato;
output_high(DS1305_CS);
DS1305_escribe_byte(contenido);
for(i = 0; i <= 7; i++)
{
shift_right(&dato,1,input(DS1305_SDI));
output_high(DS1305_SCLK);
delay_us(2);
output_low(DS1305_SCLK); //probar
delay_us(2);
}
output_low(DS1305_CS);
return(dato);
}
void DS1305_inicio()
{
BYTE x;
output_low(DS1305_CS); //seleccionamos el dispositivo
delay_us(2);
output_low(DS1305_SCLK);
DS1305_escribe(DS1305_REGISTRO_CONTROL_ESCRITURA,0); //deshabilita proteccion escritura
DS1305_escribe(DS1305_REGISTRO_TRICKLE_ESCRITURA,0xA6);
//TCS = 1010 (solo este codigo permite charger)
//DS = 01 (seleccionamos un diodo)
//RS = 10 (seleccionamos resistencia R1 = 2k)
x = DS1305_lee(DS1305_REGISTRO_CONTROL_LECTURA);
if (bit_test(x,7) != 0) //(x & 0x80) != 0) comprobamos el valor del bit +significativo
//bit de puesta en marcha
//si esta a 1 esta parado
DS1305_escribe(DS1305_REGISTRO_CONTROL_ESCRITURA,0);
//pone en marcha el reloj
//creo que no haria falta xq ya lo ago en la 4linea codigo funcion
}
A ver si me pudieses echar una mano. Gracias
1saludo