TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Miquel_S en 09 de Diciembre de 2009, 14:51:04
-
Hola de nuevo compañeros, sigo con mis ganas de querer aprender a programar en C y dejar un poco el asm, mi duda es la siguiente: :oops:
He estado mirando el programa de VsZeNeR y su reloj-calendario con el ds1302 y el programa en si lo entiendo hasta el punto de saber que hace y el porque, pero mi duda esta en los switch y los case. Aunque se el funcionamiento de los dos, lo que no entiendo es lo que hay asociado al case y al year:
switch(year){
case 0x0A:
year=0x10;
break;
case 0x1A:
year=0x20;
break;
case 0x2A:
year=0x30;
break;
case 0x3A:
year=0x40;
break;
o sea el 0x0A, 0x1A, 0x2A, 0x3A, etc etc y luego con los años 0x10, 0x20, 0x30, 0x40, ...... 0x90, 0x00
Porque estos valores tanto en los meses como en los años o en los minutos incluso los dias etc etc.... incluso los he convertido a decimal y binario y no veo relacion alguna.
Perdonad si no me he explicado bien.
Saludos y gracias.
Miquel_S
PD:Volvere... :mrgreen:
-
Hola, es muy simple, es una conversión de hexadecimal a decimal.
En decimal cuentas... 18, 19, 20 pero en hexadecimal cuentas 18, 19, 1A. Entonces en vez de que llegue a 1A deberá pasar a 20.
-
Hola migsantiago gracias por tu respuesta, esto de la conversion lo tengo claro lo que pasa es que no relaciono estos numeros con lo que deberian representar, me explico:
switch(hour){ //Limites...
case 0x0A:
hour=0x10;
break;
case 0x1A:
hour=0x20;
break;
case 0x24:
hour=0x00;
} //...hour
El 0x0A -> 10 en decimal
El 0x1A -> 26 en decimal
El 0x24 -> 36 en decimal
El 0x10 -> 16 en decimal
El 0x20 -> 32 en decimal
¿Que relacion tienen estos numeros con las horas?
Las 10h vale pero las 26h ;-)
Perdona mi torpeza igual soy yo que no te entiendo.
Lo siento
Miquel_S
-
Es que es código BCD con el que operan los relojitos I2C.
Ellos cuentan con registros hexadecimales que cuentan en BCD de forma que su conteo de los años es:
0x18, 0x19, 0x20
Todo en hexadecimal pero con salto automático de 0x1A (que no existe en BCD) a 0x20.
-
De acuerdo ya lo entiendo
Muchas gracias
Miquel_S
PD: Ya he aprendido algo mas. :-/ :-/ :-/