;Programa que mediante el uso de dos push button realiza un conteo ascendente y
descendete respectivamente,
;esto se ve reflejado en 4 leds a la salida representando numeros binarios.
;Rafael Medellín García 2001626
list p=16f628a
include "[Link]"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC & _LVP_OFF
org 0 ; Dirección de inicio
goto Inicio ; Saltar a la configuración inicial
; ============================
; Configuración de Puertos
Inicio:
bsf STATUS, RP0 ; Cambiar a Banco 1
movlw b'00110000' ; RB4 y RB5 como entradas (1), RB0-RB3 como salidas (0)
movwf PORTB ; Configurar PORTB
bcf STATUS, RP0 ; Regresar a Banco 0 (Acceder a PORTB)
clrf PORTB ; Limpiar Puerto B
clrf Contador ; Inicializar contador en 0
; ============================
; Bucle principal
Bucle:
btfsc PORTB, 4 ; Verifica si RB4 está presionado (Cuenta Ascendente)
call Incrementar ; Llama a la rutina de incremento
btfsc PORTB, 5 ; Verifica si RB5 está presionado (Cuenta Descendente)
call Decrementar ; Llama a la rutina de decremento
movf Contador, W ; Mueve el valor del contador a W
movwf PORTB ; Actualiza las salidas RB0-RB3 con el valor del contador
goto Bucle ; Repite el bucle
; ============================
; Rutina para Incrementar
Incrementar:
movlw 0x0F ; Valor máximo 15 (0b00001111)
subwf Contador, W ; Comparar W - Contador
btfsc STATUS, Z ; Si Contador = 15, no incrementar
return
incf Contador, F ; Incrementar el contador
call Retardo ; Espera para evitar rebotes
return
; ============================
; Rutina para Decrementar
Decrementar:
movf Contador, F ; Comprobar si Contador es 0
btfsc STATUS, Z ; Si es 0, regresa sin decrementar
return
decf Contador, F ; Decrementar el contador
call Retardo ; Espera para evitar rebotes
return
; ============================
; Rutina de Retardo (Anti-rebote)
Retardo:
movlw 0xFF ; Valor alto para el retardo
movwf Tiempo1
Retardo1:
movlw 0xFF
movwf Tiempo2
Retardo2:
decfsz Tiempo2, F
goto Retardo2
decfsz Tiempo1, F
goto Retardo1
return
; ============================
; Variables
Contador equ 0x20 ; Dirección en RAM para el contador
Tiempo1 equ 0x21 ; Variable para retardo
Tiempo2 equ 0x22 ; Variable para retardo
end
;Programa mediante el cual se controla el encendido y la dirección de un motor DC
;Rafael Medellín García
list p=16f628a
include "[Link]"
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC & _LVP_OFF
#DEFINE INM PORTB,5 ; Define INM como alias del pin RB5
#DEFINE INS PORTB,4 ; Define INS como alias del pin RB4
org 0 ; Dirección de inicio
; ============================
; Configuración de Puertos
bsf STATUS, RP0 ; Cambiar a Banco 1
bsf INM ; Configura RB5 como entrada (pone a 1 PORTB,5)
bsf INS ; Configura RB4 como entrada (pone a 1 PORTB,4)
clrf PORTA ; Limpia el puerto A (pone todos los pines en 0)
bcf STATUS, RP0 ; Regresa al Banco 0
; ============================
; Bucle principal
Bucle:
clrw ; Limpia el registro W (W = 0)
btfsc INM ; Si RB5 está en 1 (presionado), salta la siguiente instrucción
goto ActS ; Si RB5 está presionado, salta a ActS (PORTA = 0)
movlw b'00011000' ; Si RB5 no está presionado, carga en W con 00011000
btfsc INS ; Si RB4 está en 1 (presionado), salta la siguiente instrucción
movlw b'00010100' ; Si RB4 está presionado, carga W con 00010100
ActS:
movwf PORTA ; Mueve el contenido de W al puerto A (enciende los pines según W)
goto Bucle ; Vuelve al inicio del bucle para seguir verificando entradas
end