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:
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
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.