estou fazendo um projeto e preciso de data e hora estou usando um DS1307
mas a data e hora sai assim 45/25/165 45:85:85
logo ao ligar o pic mando gravar 05/09/09 12:00:00 e ao ler sai aquela data errada
Moderadores: andre_luis, 51, guest2003, Renie
#use i2c ( MASTER , SLOW /*, NOFLOAT_HIGH , FORCE_HW */ , SDA=I2C_SDA , SCL=I2C_SCL )
////////////////////////////////////////////////////////////////////////
void init_I2C ( void )
{
output_float( I2C_SCL ) ;
output_float( I2C_SDA ) ;
}
////////////////////////////////////////////////////////////////////////
int1 i2c_ready ( unsigned int8 address )
{
int1 ack ;
i2c_start() ; // If the write command is acknowledged,
ack = i2c_write( address ) ; // then the device is ready.
i2c_stop() ;
return ( !ack ) ;
}
////////////////////////////////////////////////////////////////////////
void ds1307_send_time( void )
{
delay_us ( 10 ) ; /* Solucao Empirica */
i2c_start() ; /* START CONDITION */
i2c_write( SELECT_DS1307 | ESCRITA ) ; /* SLAVE ADDRESS -> WRITE */
i2c_write( MINUTES ) ; /* WORD ADDRESS */
i2c_write( Minuto_ds1307_digitos ) ; /* WRITE DATA */
i2c_write( Hora_ds1307_digitos ) ; /* WRITE DATA */
i2c_write( Semana_ds1307_digitos ) ; /* WRITE DATA */
i2c_write( Dia_ds1307_digitos ) ; /* WRITE DATA */
i2c_write( Mes_ds1307_digitos ) ; /* WRITE DATA */
i2c_write( Ano_ds1307_digitos ) ; /* WRITE DATA */
i2c_stop() ; /* STOP CONDITION */
delay_ms ( 50 ) ; /* Solucao Empirica */
}
////////////////////////////////////////////////////////////////////////
void ds1307_get_time( void )
{
i2c_start() ;
i2c_write( SELECT_DS1307 | ESCRITA ) ;
i2c_write( MINUTES ) ;
i2c_start() ;
i2c_write( SELECT_DS1307 | LEITURA ) ;
Minuto_ds1307_digitos = i2c_read() ;
Hora_ds1307_digitos = i2c_read() ;
Semana_ds1307_digitos = i2c_read() ;
Dia_ds1307_digitos = i2c_read() ;
Mes_ds1307_digitos = i2c_read() ;
Ano_ds1307_digitos = i2c_read() ;
i2c_stop() ;
}
////////////////////////////////////////////////////////////////////////
void clock_initiate( void )
{
unsigned int8 Time[] = __time__ ;
unsigned int8 HoraDecimal ;
unsigned int8 MinutoDecimal ;
unsigned int8 HoraDezena ;
unsigned int8 HoraUnidade ;
unsigned int8 MinutoDezena ;
unsigned int8 MinutoUnidade ;
unsigned int8 Data[] = __date__ ;
unsigned int8 DiaDecimal ;
unsigned int8 MesDecimal ;
unsigned int8 AnoDecimal ;
unsigned int8 DiaDezena ;
unsigned int8 DiaUnidade ;
unsigned int8 MesDezena ;
unsigned int8 MesUnidade ;
unsigned int8 AnoDezena ;
unsigned int8 AnoUnidade ;
HoraDecimal = ( ( ( Time[0]-'0' ) * 10 ) + ( Time[1]-'0' ) ) ;
MinutoDecimal = ( ( ( Time[3]-'0' ) * 10 ) + ( Time[4]-'0' ) ) ;
HoraDezena = ( HoraDecimal / 10 ) ;
HoraUnidade = ( HoraDecimal % 10 ) ;
MinutoDezena = ( MinutoDecimal / 10 ) ;
MinutoUnidade = ( MinutoDecimal % 10 ) ;
DiaDecimal = ( ( ( Data[0]-'0' ) * 10 ) + ( Data[1]-'0' ) ) ;
AnoDecimal = ( ( ( Data[7]-'0' ) * 10 ) + ( Data[8]-'0' ) ) ;
DiaDezena = ( DiaDecimal / 10 ) ;
DiaUnidade = ( DiaDecimal % 10 ) ;
AnoDezena = ( AnoDecimal / 10 ) ;
AnoUnidade = ( AnoDecimal % 10 ) ;
switch ( Data[3] )
{
case 'J' :
case 'j' :
if ( ( Data[4] == 'A' ) || ( Data[4] == 'a' ) )
{
MesDezena = 0 ;
MesUnidade = 1 ;
}
else
{
if ( ( Data[5] == 'N' ) || ( Data[5] == 'n' ) )
{
MesDezena = 0 ;
MesUnidade = 6 ;
}
else
{
MesDezena = 0 ;
MesUnidade = 7 ;
}
}
break ;
///////////////////
case 'F' :
case 'f' :
MesDezena = 0 ;
MesUnidade = 2 ;
break ;
///////////////////
case 'M' :
case 'm' :
switch ( Data[5] )
{
case 'R' :
case 'r' :
MesDezena = 0 ;
MesUnidade = 3 ;
break ;
case 'I' :
case 'i' :
MesDezena = 0 ;
MesUnidade = 5 ;
break ;
}
break ;
///////////////////
case 'A' :
case 'a' :
switch ( Data[4] )
{
case 'B' :
case 'b' :
MesDezena = 0 ;
MesUnidade = 4 ;
break ;
case 'G' :
case 'g' :
MesDezena = 0 ;
MesUnidade = 8 ;
break ;
}
break ;
///////////////////
case 'S' :
case 's' :
MesDezena = 0 ;
MesUnidade = 9 ;
break ;
///////////////////
case 'O' :
case 'o' :
MesDezena = 1 ;
MesUnidade = 0 ;
break ;
///////////////////
case 'N' :
case 'n' :
MesDezena = 1 ;
MesUnidade = 1 ;
break ;
///////////////////
case 'D' :
case 'd' :
MesDezena = 1 ;
MesUnidade = 2 ;
break ;
}
ds1307_send_byte( CONTROL, CONTROL_WORD );
ds1307_send_byte( SECONDS , ( CH | 0 ) ) ;
ds1307_send_byte( MINUTES , ( ( MinutoDezena << 4 ) | MinutoUnidade ) ) ;
ds1307_send_byte( HOURS , ( ( HoraDezena << 4 ) | HoraUnidade ) ) ;
ds1307_send_byte( DAY , INIT_DAY ) ;
ds1307_send_byte( DATE , ( ( DiaDezena << 4 ) | DiaUnidade ) ) ;
ds1307_send_byte( MONTH , ( ( MesDezena << 4 ) | MesUnidade ) ) ;
ds1307_send_byte( YEAR , ( ( AnoDezena << 4 ) | AnoUnidade ) ) ;
}
////////////////////////////////////////////////////////////////
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante