Autor Tema: Duda sobre RB0 como interrupción externa 16f877a  (Leído 5018 veces)

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

Desconectado Jorge555

  • PIC18
  • ****
  • Mensajes: 496
    • JMN
Re: Duda sobre RB0 como interrupción externa 16f877a
« Respuesta #15 en: 24 de Octubre de 2007, 00:58:03 »
Pues yo creo que el problema debe de estar en la segunda parte de código que he pegado, el valor de tiempo solo influye el umbral que pongas, da igual que pase 0.9 ms o 1.2 será un cero, hasta que no pasen más de 1.7 no lo considerara un uno, así que recibir recibe bien los 16 unos o ceros del envio del mando. Lo que hace que cada vez que cambia el RB0, mira si es cero (flanco de bajada) y si lo es mira el valor de tictac para saltar a almacenar_cero, almacenar_uno, o a condición de inicio (que no hace nada) o a error si el pulso es muy bajo, y luego resetea tictac y este sigue incrementandose en pasos de 0.1 ms por el camino de subir_tic hasta que ocurre el siguiente flanco de bajada, está parte creo que funciona correctamente.

La rutina de convertir un registro de 8 bits a decimal tb funciona bien, si caro el 245 en binario en w y le doy a convertir me saca bien el valor en decimal en centenas decenas y unidades por el lcd, así que esta parte está bien.

La verdad que no tengo ni idea de por donde se va esa unidad, he comprobado unos siete botones del mando y en todos hace lo mismo, no sé será cualquier cosa que no veo, pero vamos tampoco tiene mucha importancia ya que la solución es fácil, es casi más por saber que esta fallando, mañana le dare otro repaso. Saludos.

Desconectado Jorge555

  • PIC18
  • ****
  • Mensajes: 496
    • JMN
Re: Duda sobre RB0 como interrupción externa 16f877a
« Respuesta #16 en: 24 de Octubre de 2007, 01:53:36 »
Bueno pues pensando un poco creo que el problema puede estar en que no limpio el bit del carry, al hacer la rotación rota con el carry, si el carry tiene un cero el programa lo hace como yo quiero, pero si tiene un uno lo complicaría todo ya que no lo he tenido en cuenta, seguro que por ahí anda el fallo, voy a limpiar el bit del carry antes de hacer la rotación.

Pues efectivamente ese era el problema, que no había considerado la opción de tener el carry con un 1, y por casualidad me salia el mismo resultado menos uno, poniendo BCF STATUS,C delante ed cada instrucción de rotación problema solucionado  :-/

Ahora ya funciona todo como debe. Gracias por todo. Saludos
« Última modificación: 24 de Octubre de 2007, 02:03:47 por Jorge555 »