(ASM - PIC16f84a) Encender y apagar led con el mismo pulsador
description
Transcript of (ASM - PIC16f84a) Encender y apagar led con el mismo pulsador
-
1
;******************************************************************
;* Nombre : ON_OFF_LED_Pulsador.ASM *
;* Autor : JeysonMG *
;* Notas : - Se enciende y apaga un led (RA0) con el mismo *
;* pulsador(RA4) en un pic 16f84a *
;* - Oscilador tipo XT (4MHZ) *
;* *
;* - Configuracion Pull-Up *
;* *
;* O +5v *
;* | *
;* < *
;* R = 1Kohm > *
;* < *
;* | *
;* |----------------o RA4 *
;* | *
;* | o *
;* Pulsador |-| *
;* | o *
;* | *
;*
;*
OBS: *
Bajo esta configuracin, cuando es *
;* _ pulsado, envia un 0 lgico al PIC *
;* *
;******************************************************************
config _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
list p=16f84a
#include
cblock 0x0C ; A partir de esta direccion es la memoria RAM del
usuario
Variable_usada_para_retardo0
Variable_usada_para_retardo1
endc
#define Pulsador PORTA,4 ; Pulsador en RA4
#define LED PORTA,0 ; Led conectado en RA0
ORG 0x00
Inicio bsf STATUS,RP0 ; Se accede a banco de memoria 1
bcf TRISA,.0 ; Configuramos RA0 como salida (OBS:
0=salida )
1=entrada)
bsf TRISA,.4 ; Configuramos RA4 como entrada (
bcf STATUS,RP0 ; Se accede a banco de memoria 0
bcf LED ; LED empieza apagado (RA0 en 0 lgico)
Principal btfsc Pulsador ; Pulsador=0?
goto Principal ; Falso. Entonces, vuelvo a preguntar
; Si pulsador=0, hago un retardo de 100ms y vuelvo a
preguntar
; con el fin de eliminar los "rebotes"
call Retardo_100ms
btfsc Pulsador ; Pulsador=0?
goto Principal
-
2
; Ahora bien, eliminado el rebote, debemos asegurarnos que ha soltado
el pulsador
Preguntar btfss Pulsador ; Pulsador=1?
goto Preguntar ; Falso. Significa que no he soltado el
pulsador
; entonces vuelvo a preguntar.
; Si pulsador=1 significa que ya solte el pulsador, y
procedo a encender
; o apagar el led, segun su estado actual.
btfss LED ; LED = 1 ? (1=encendido) goto Encender ; Falso, entonces vamos a etiqueta
"Encender" bcf LED ; Era verdad?, entonces apago led, goto Principal ; y luego regreso a Principal Encender bsf LED ; Si era falso, encendemos led y
goto Principal ; regresamos a Principal
; Subrutina de Retardo_100ms:
Retardo_100ms:
movlw .110
movwf Variable_usada_para_retardo0
movlw .181
movwf Variable_usada_para_retardo1
goto $+1
decfsz Variable_usada_para_retardo1, 1
goto $-2
decfsz Variable_usada_para_retardo0, 1
goto $-6
goto $+1
goto $+1
goto $+1
return
programa
END ; Directiva para indicar que termina el
; Lo que est despues no forma parte
del programa