//¡¡¡ Con CCS no funciona bien el direccionamiento indirecto, dá error !!!
//Se usan dos registros FSR0 y FSR1 donde estaran contenidos secuencialmente
//en RSR0 las salidas y en FSR1 los indices
#include <18F4550.h>
#byte TRISB=0xF93
#byte PORTB=0xF81
#byte FSR0L=0xFE9
#byte FSR1L=0xFE1
#byte salida1=0x20
#byte salida2=0x21
#byte salida3=0x22
#byte salida4=0x23
#byte salida5=0x24
#byte salida6=0x25
#byte salida7=0x26
#byte salida8=0x27
#byte indice1=0x30
#byte indice2=0x31
#byte indice3=0x32
#byte indice4=0x33
#byte indice5=0x34
#byte indice6=0x35
#byte indice7=0x36
#byte indice8=0x37
#byte contador=0x40
main()
{
#asm
movlw 0x00
movwf TRISB
//movlw b'11111100' ;RB0
movlw 0xFC //RB0
movwf salida1
movlw 0x01 ;Apuntaría a RB2
;movlw 0x02 ;Apuntaría a RB3
;movlw 0x03 ;Apuntaría a RB4
;movlw 0x04 ;Apuntaría a RB5
movwf indice1
//movlw b'11111101' ;RB1
movlw 0xFD ;RB1
movwf salida2
movlw 0x00
movwf indice2
//movlw b'11111011' ;RB2
movlw 0xFB ;RB2
movwf salida3
movlw 0x00
movwf indice3
//movlw b'11100111' ;RB3
movlw 0xE7 ;RB3
movwf salida4
movlw 0x01 ;Apuntaría a RB5
movwf indice4
//movlw b'11101111' ;RB4
movlw 0xEF ;RB4
movwf salida5
movlw 0x00
movwf indice5
//movlw b'11011111' ;RB5
movlw 0xDF ;RB5
movwf salida6
movlw 0x00
movwf indice6
//movlw b'10111111' ;RB6
movlw 0xBF ;RB6
movwf salida7
movlw 0x00
movwf indice7
//movlw b'01111111' ;RB7
movlw 0x7F ;RB7
movwf salida8
movlw 0x00
movwf indice8
Inicio: movlw 0xFF
movwf PORTB
movlw 0x20
movwf FSR0L
movlw 0x30
movwf FSR1L
Bucle: movf INDF0,w ;Mueve el contenido del FSR0 (salidas) al W
andwf PORT
incf FSR0L
movf INDF1,w ;Mueve el contenido del FSR1 (índices) al W
incf FSR1L
addwf FSR0L,1 ;FSR0=FSR0+indice(FSR1)
addwf FSR1L,1 ;FSR1=FSR1+indice(FSR1)
btfsc PORTB,7
goto Bucle
goto Inicio
#endasm
}