LIST P = 18F4550
INCLUDE <P18F4550.INC>

CONFIG FOSC = INTOSC_XT 
CONFIG PWRT = ON
CONFIG BOR = OFF
CONFIG WDT = OFF
CONFIG MCLRE = ON
CONFIG PBADEN = OFF
CONFIG LVP = OFF
CONFIG DEBUG = OFF
CONFIG XINST = OFF

cblock
     SecuenC 
endc
 
ORG 0x00     
 
    movlw 0x60    
    movwf OSCCON  
 
    clrf PORTD    ;Borra posibles valores en PORTD
    clrf PORTB    ;Borra posibles valores en PORTB
 
    movlw 0x03    ;Configurar RD0 y RD1 como entradas
    movwf TRISD   ;TRISD <- W
    movlw 0xF0
	movwf TRISB
	clrf TRISB    ;Configurar PORTB como salida
    clrf SecuenC  ;Estado de Posición a 0x00
 
INICIO
    movf SecuenC, W
    call MotorPosition
    movwf PORTB
    call Retardo200ms
 
ButtonRight         ;TEST DE BOTÓN DERECHO
    btfss PORTD, 0  ;Verificar RB0 == 1, R == ON
    bra ButtonLeft  ;RB0 == 0, R == OFF
    btfsc PORTD, 1  ;Verificar RB1 == 0, L == OFF
    bra INICIO      ;AMBOS ESTÁN PRESIONADOS
    bra MoveRight   ;Entradas RB0 == 1, RB1 == 0
ButtonLeft          ;HACER TEST DE BOTÓN IZQ
    btfss PORTD, 1  ;R == OFF ahora Verificar RB1 == 0, L == ON
    bra INICIO      ;NINGUNO ESTÁ SIENDO PRESIONADO
    bra MoveLeft
 
MoveRight           ;Aumentar indice para la tabla
    movf SecuenC, W
    xorlw 0x06      
    btfss STATUS, Z ;Salta si Z == 1, SecuenC = Indice Max
    bra Continue1
    clrf SecuenC
    bra INICIO
Continue1
    incf SecuenC, F
    incf SecuenC, F
    bra INICIO
 
MoveLeft
    movf SecuenC, W ;SecuenC -> W
    xorlw 0x00      ;Comprobar si W == 0
    btfss STATUS, Z ;Salta si Z == 1, SecuenC = Indice Min
    bra Continue2   ;Secuence =/= 0
    movlw 0x06      
    movwf SecuenC   ;Asignar Indice Max a SecuenC
    bra INICIO
Continue2
    decf SecuenC, F
    decf SecuenC, F
    bra INICIO
 
MotorPosition
    addwf PCL, F
    retlw 0x0A     ;Configuración de primer paso    0000 1010
    retlw 0x09     ;Configuración de segundo paso   0000 1001
    retlw 0x05     ;Configuración de de tercer paso 0000 0101
    retlw 0x06     ;Configuración de de cuarto paso 0000 0110
 
    include "Retardo.inc"   ;Se agrega la librería Retardo.inc
 
END ;Fin de Programa