(ASM - PIC16f84a) Encender y apagar led con el mismo pulsador

download (ASM - PIC16f84a) Encender y apagar led con el mismo pulsador

of 2

description

Programa para encender y apagar un led con el mismo pulsador en ensamblador en un pic16f84a.07 de frebrero del 2016 -- 20:51 hrs

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