; RAM-Variable
MODE equ 0x10
; Program
Org 0x0000
LADR_0x0000
CLRF PORTB
MOVLW 0x0F ;RA0 a RA3 como entradas
TRIS PORTA
MOVLW 0x80 ;RB7 como entrada
TRIS PORTB
CLRF PORTB ; PORTB = 0
LADR_0x0008
BSF PORTB,3 ;RB3=1
BSF PORTB,3 ;RB3=1
LADR_0x000D
BCF PORTB,2 ;RB2=0
MOVLW 0xF8 ;PORTB = '11111000'
MOVWF PORTB
LADR_0x0019
MOVLW 0xF8 ;PORTB = '11111000'
MOVWF PORTB
MOVLW 0x0C ; b'00001100' d'012'
ANDWF PORTA,W ; Aca deja solo RA2 y RA3
XORLW 0x08 ; Cambia el estado de RA3
BTFSS STATUS,Z ; ¿RA2 = 0 y RA3 = 1 ?
GOTO LADR_0x0019 ; No hace nada si RA2 = 1 o RA3 = 0
BTFSC PORTA,0 ; Si RA2 = 0 y RA3 = 1 entonces pregunta por lo demas
GOTO LADR_0x002A ; RA0 = 1? Ejecuto esto
BTFSS PORTA,1
GOTO LADR_0x0019 ; RA1= 0? Ejecuto esto
GOTO LADR_0x0039 ; RA1= 1? Ejecuto esto
LADR_0x002A ; RA0 = 1, RA1 = 0, RA2 = 0, RA3 = 1
BTFSC PORTA,1 ; Si RA1 = 1 entonces salgo, hay un problema
GOTO LADR_0x0019
BSF PORTB,2 ;RB2 = 1
MOVLW 0x02 ; 0x10 <- 2, modo FW
MOVWF MODE
BCF PORTB,0 ;RB0 = 0 y RB1 = 1
BSF PORTB,1
LADR_0x0031
BCF PORTB,3 ; RB3 = 0
MOVF PORTA,W ; 0x13 <- PORTA (guardo el PORTA)
LADR_0x0039 ; RA0 = 0, RA1 = 1, RA2 = 0, RA3 = 1
BSF PORTB,2
MOVLW 0x01 ; 0x10 <- 1 modo REV
MOVWF MODE
BSF PORTB,0 ; RB0=1
BCF PORTB,1 ; RB1=0
GOTO LADR_0x0031
LADR_0x0048
BTFSC PORTB,7 ; RB7 = 0?
GOTO LADR_0x005B ; No, voy a otro lado
BTFSS PORTB,7 ; RB7 = 1?
GOTO LADR_0x000D ; No -> Comienzo todo de nuevo
LADR_0x005B
BTFSS MODE,0 ; ¿Modo FW?
GOTO LADR_0x0060 ; No -> Voy a 0x0060
BTFSC PORTA,0 ; SI -> RA0 = 0?
GOTO LADR_0x0008 ; No -> 0x0008
GOTO LADR_0x0048 ; Si -> Pregunto de nuevo por RB7
LADR_0x0060
BTFSC PORTA,1 ; RA1 = 0?
GOTO LADR_0x0008 ; No, comienzo de nuevo
BTFSC MODE,1 ; ¿Modo REV?
GOTO LADR_0x0048 ; No -> Voy a 0x0048
GOTO LADR_0x0008 ; Si -> Voy a 0x0008