Autor Tema: C18 y los desplazamientos ">>" y "<<"  (Leído 2361 veces)

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

Desconectado SiO2

  • PIC10
  • *
  • Mensajes: 6
C18 y los desplazamientos ">>" y "<<"
« en: 24 de Mayo de 2009, 20:15:45 »
Hola a todos.

   Después de leer el hilo "cursillo de C18" he empezado a programar un pic18f4525 para mostrar datos en una pantalla de leds. se trata de placas que me regalaron después de cerrar una empresa (cosas de la crisis). Lleva registros de desplazamiento de 16 bits que actúan como drivers también. Al principio no funcionaba nada hasta que cambien la instrucción de desplazamiento de bits para la variable "mascara" por la de multiplicación

mascara=1;
for(contador=0; contador<16; contador++){
if((dato&mascara)==1) dato(1);
else dato(0);
mascara<<=1;
}

por esta otra

mascara=1;
for(contador=0; contador<16; contador++){
if((dato&mascara)==1) dato(1);
else dato(0);
mascara*=2;
}

Estoy usando la versión: MPLAB C18 v3.20 Upgrade.
¿Porque no funciona "<<"?. Necesito utilizarlas para otras funciones ya que creo que son más eficaces que la segunda opción. ¿Podría ser problema de la versión del upgrade del mplab?. También he probado la macro Rlcf(f,dest,access) y nada.


gracias por vuestras respuestas.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: C18 y los desplazamientos ">>" y "<<"
« Respuesta #1 en: 24 de Mayo de 2009, 21:09:30 »
Hola, ¿cómo están declaradas las variables mascara, dato y contador?

Una cosa que puedes hacer para ver porqué se comportan diferente es ver su compilación equivalente en ensamblador.
« Última modificación: 24 de Mayo de 2009, 21:11:42 por migsantiago »

Desconectado SiO2

  • PIC10
  • *
  • Mensajes: 6
Re: C18 y los desplazamientos ">>" y "<<"
« Respuesta #2 en: 25 de Mayo de 2009, 17:57:28 »
Gracias por responder migsantiago.

hay un error en el código, debería ser: for(contador=0; contador<8; contador++){ ya que escribo 2 bytes en cada registro, así que todas la variables son "unsigned char". La función se repite dos veces para cada registro. En "dato" cogemos un byte de la matriz donde guardo los datos a representar para pasarlo al registro del driver. miraré la compilación.

Saludos.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: C18 y los desplazamientos ">>" y "<<"
« Respuesta #3 en: 25 de Mayo de 2009, 18:01:56 »
Por favor pon el programa completo, con todo y declaración de las variables para ver la última versión corregida. Solo se me ocurre que sea error de tamaño de las variables.

Si pones enteros o char por favor ponles el tamaño en bits. Es que los int no son del mismo tamaño en todos los compiladores.

Desconectado SiO2

  • PIC10
  • *
  • Mensajes: 6
Re: C18 y los desplazamientos ">>" y "<<"
« Respuesta #4 en: 27 de Mayo de 2009, 15:05:25 »
Asunto solucionado. No coincidian los tipos de datos.

Saludos.


 

anything