; 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