; Palabra de configuración: (PBP3)
#Config
    __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON
#EndConfig
;*******************************************************************************
Define OSC 4                    ; Definir que se trabajará con 4MHz.
Inicio:
    TRISB = 0
    PORTB = 0
    a Var Byte
    Bandera_Act Var Bit         ; Bandera de activación.
    Bandera_Sec Var Bit         ; Bandera para cambio de secuencia.
    Veces Var Word              ; Variable para establecer el tiempo.
    Contador Var Byte           ; Variable de conteo para establecer los tiempos.
    Bandera_Act = 0
    Bandera_Sec = 0
    Veces = 500                 ; Tiempo inicial por defecto = 500 mS.
    Contador = 1
    
    
Programa:
    GoSub Leer_Pulsadores
 ; Secuencia hacia la izquierda.
    While Bandera_Act = 1 And Bandera_Sec = 0
        GoSub Leer_Pulsadores
        PORTB = 1
        GoSub Delay
        For a = 1 To 7
            PORTB = PORTB << 1
            GoSub Delay
        Next a
        PORTB = 0
        GoSub Delay
    Wend
    
 ; Secuencia hacia la derecha.
    While Bandera_Act = 1 And Bandera_Sec = 1
        GoSub Leer_Pulsadores
        PORTB = $80
        GoSub Delay
        For a = 7 To 1 Step - 1
            PORTB = PORTB >> 1
            GoSub Delay
        Next a
        PORTB = 0
        GoSub Delay
    Wend
 
    GoTo Programa
    
Leer_Pulsadores:
    Btn1 Var Byte
    Btn2 Var Byte
    
    Button PORTA.0,1,255,255,Btn1,0,P2
        If Bandera_Sec = 1 Then
            Bandera_Sec = 0
        Else
            Bandera_Sec = 1
        EndIf
        
        Bandera_Act = 1
P2:   
    Button PORTA.1,1,255,255,Btn2,0,Salir
        If Bandera_Act = 1 Then ; Sólo se incrementará la variable "Contador"
                                ; si la "Bandera_Act" está en 1.
            Contador = Contador + 1
        EndIf
        ; No permitir que la variable "Contador" supere el valor de 3.
        If Contador > 3 Then Contador = 1
        
        Select Case Contador
            ; Se establecen los tiempos en mS. (Para la subrutina "Delay")
            Case 1
                Veces = 500
            Case 2
                Veces = 100
            Case 3
                Veces = 50
        End Select  
Salir:    
    Return
    
Delay:
    x Var Word
    
    For x = 1 To Veces
        GoSub Leer_Pulsadores
        Pause 1
    Next x
    Return 
    
    End