Autor Tema: Reloj digital con 16f84  (Leído 6411 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Reloj digital con 16f84
« Respuesta #15 en: 05 de Marzo de 2014, 15:37:33 »
Citar
Lo que yo quiero decirte es que tu idea es valida, pero la instruccion comf W,0 no es valida, al compilar tendras un error ya que comf complementa una variable, comf no puede usarse para el registro W. Por eso es que la tienes que usar con el registro indf.

Pues tienes razon, compilar si compila pero hace cosas muy muy raras.

Puse este codigo para probar:

Código: [Seleccionar]
list p=16F84A
#include P16F84A.inc

conta1 equ 0x20


PROX_DIGITO
   movf   INDF,W      ; Obtener el valor de la variable "digito" actual
   call   CODIGO_7S   ; LLamar a la rutina de conversión a código 7 segmentos
   comf   W,0      ; Realiza el complemento, cambia 0 por 1 y viceversa   
   movwf   INDF      ; Colocar en la variable "digito" el código 7 segmentos devuelto
   incf   FSR,F      ; Incremente INDF para el próximo "digito"
   decfsz   conta1,F   ; Permitir que conta1 de sólo 4 vueltas
   goto   PROX_DIGITO

CODIGO_7S

retlw 0x81

END


No se si estoy tonto, quiero decir mas de lo habitual  :lol: :lol: si es un bug de mi MPLAB. Pero hace la conversion asi:

1 vez FFH-255
2 vez 00H-00
3 vez FCH-252 y a partir de aqui da siempre FCH que es justo el doble de lo que deberia dar y a parte el programa se bloquea en la siguiente instruccion aqui:

movwf   INDF      ; Colocar en la variable "digito" el código 7 segmentos devuelto

no sigue ejecutandolo y vuelve al principio, creo que debido a que el FSR se pone en 02, ya que si lo pongo a 0 vuelve a empezar.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Reloj digital con 16f84
« Respuesta #16 en: 10 de Marzo de 2014, 13:32:18 »
El registro de trabajo W no es un registro físico en un 16F84. Esto significa que no está mapeado en memoria, por lo que intentar hacer una operación como la COMF W,0 es equivalente a hacer COMF 0,0 lo que es lo mísmo que hacer COMF INDF,W lo que no es lo deseado.

XORLW 0xFF sirve perfectamente para este caso.

Saludos
« Última modificación: 10 de Marzo de 2014, 13:41:23 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Reloj digital con 16f84
« Respuesta #17 en: 10 de Marzo de 2014, 15:21:46 »
Gracias por la aclaracion Bruno, si que funciona con XORLW 0xFF, pero hace lo mismo, a la tercera vez que corres el programa el reg FSR llega "02" y entonces al llegar a la instruccion  movwf   INDF , en vez de seguir ejecutando el programa se va al comienzo.

Citar
El registro de trabajo W no es un registro físico en un 16F84.

¿En otros de la serie 16F si funcionaria?

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Reloj digital con 16f84
« Respuesta #18 en: 10 de Marzo de 2014, 15:41:28 »
Lo de que funcione en otros 16F sí. Los 16F más modernos ya mapean al WREG en la memoria y por lo tanto WREG puede utilizarse como un registro comun más. Pero es sólo en los micros más nuevos dentro de la familia de 16F, que hasta creo incluyen un set de instrucciones más completo que las 35 famosas conocidas en los 16F.

Volviendo al asunto:

Cuando uno pasa de común ánodo a común cátodo, no sólo es importante la lógica de los segmentos, sino del control de encendido de los displays. Mostranos el circuito eléctrico que estás queriendo usar, y te puedo explicar qué necesitás modificar en el código y el por qué. A lo sumo, serán un par de líneas de assembler.

Saludos,
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Reloj digital con 16f84
« Respuesta #19 en: 11 de Marzo de 2014, 06:23:55 »
Citar
Cuando uno pasa de común ánodo a común cátodo, no sólo es importante la lógica de los segmentos, sino del control de encendido de los displays. Mostranos el circuito eléctrico que estás queriendo usar, y te puedo explicar qué necesitás modificar en el código y el por qué. A lo sumo, serán un par de líneas de assembler.

No Bruno gracias, si quien tenia el problema era cmontoya, pero creo que con lo que le dijo Elreypic2 ya lo tendra solucionado, lo que pasa es que yo estaba convencido que haciendo esto "comf W,0" se evitaba tener que cambiar la tabla, pero hay que hacer el cambio en "comf    INDF,F", siempre se aprende algo.

Desconectado cmontoya

  • PIC10
  • *
  • Mensajes: 29
Re: Reloj digital con 16f84
« Respuesta #20 en: 15 de Marzo de 2014, 00:19:50 »
Claro que mi problema ya lo resolvi con la ayuda de los consejo de elreypic2, le estoy agradecido :)

Saludos