Autor Tema: Duda con switch y case  (Leído 1794 veces)

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

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Duda con switch y case
« 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:
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Duda con switch y case
« Respuesta #1 en: 09 de Diciembre de 2009, 14:53:15 »
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.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Duda con switch y case
« Respuesta #2 en: 09 de Diciembre de 2009, 15:31:18 »
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
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Duda con switch y case
« Respuesta #3 en: 09 de Diciembre de 2009, 18:28:44 »
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.

Desconectado Miquel_S

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1251
Re: Duda con switch y case
« Respuesta #4 en: 09 de Diciembre de 2009, 18:45:09 »
De acuerdo ya lo entiendo
Muchas gracias
Miquel_S
PD: Ya he aprendido algo mas. :-/ :-/ :-/
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.