# ¿Configurar pic16f84a para que un push boton funcione para encendido y apagado?



## renx92 (Mar 24, 2012)

Hola, necesito ayuda para configurar el pic16f84a usando una sola entrada (RA0), en este caso un push botón; el cual cuando sea accionado me encienda un led, y si vuelve ser accionado este mismo debe apagarlo, el lenguaje que necesito debe de ser en Microcode o Mplab, ayúdenme para mi proyecto.


----------



## Meta (Mar 24, 2012)

Hola:

Apagar o encender los LEd.


```
LIST     p=16f887    ; Procesador.     #INCLUDE             ; Directivas del procesador.        __CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF &  _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON &  _WDT_OFF & _XT_OSC     __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V   ;**********************************************************************     ORG     0x000 Inicio     clrf    PORTA     clrf    PORTB     clrf    PORTC     clrf    PORTD     clrf    PORTE                          bsf     STATUS,RP0     bsf     STATUS,RP1     clrf    ANSEL     clrf    ANSELH     bcf     STATUS,RP1     clrf    TRISA     clrf    TRISB     movlw   b'11111111'     movwf   TRISC     clrf    TRISD     clrf    TRISE     bcf     STATUS,RP0   Principal     movf    PORTC,W    ; Lee las entradas del puerto C.     movwf    PORTB     ; Las mismas entradas se pasan en la salida del puerto B.     goto    Principal       END
```

Si aún quieres el PIC16F84A es igual, solo cambias la palabra de configuración. Aún así si te interesa, te lo paso en PIC16F84A. En este caso en cada puerto que encienda, un led enciende.

Un saludo.


----------



## renx92 (Mar 24, 2012)

Muchas gracias, de hecho me interesa mucho , el codigo que necesito es para el circuito en adjunto , que el push botón encienda y apague a la vez , gracias.


----------



## Meta (Mar 24, 2012)

¿Apague y encienda a la vez?

¿Alto y bajo a la vez?

¿Noche y día a la vez?

¿Gordo y flaco a la vez?

No tengo instalado el proteus.


----------



## Gerson strauss (Mar 24, 2012)

Aqui esta para el 16f84a, push button en RA0 y el led se enciende o apaga en RB0. Pero lo puedes adaptar a lo que quieres, simplemente copias en orden desde la figura 1 a la 3.


----------



## D@rkbytes (Mar 24, 2012)

renx92 dijo:


> ola necesito ayuda para configurar el pic16f84a usando una sola entrada (RA0), en este caso un push boton; el cual cuando sea accionado me encienda un led, y si vuelve ser accionado este mismo debe apagarlo...
> el lenguaje que necesito debe de ser en microcode o mplab
> ayudenme es urgente para mi proyecto


Saludos.
Aqui un ejemplo para PBP usando MicroCode Studio.
Con tres formas diferentes de lograr lo que quieres.

PD. Incluye simulación en ISIS de PROTEUS

Suerte y hasta luego.


----------



## Meta (Mar 25, 2012)

Un ejemplo del PIC16F886.

*ASM:*

```
List    p=16F886        ;Tipo de procesador
        include    "P16F886.INC"    ;Definiciones de registros internos

;Ajusta los valores de las palabras de configuración durante el ensamblado.Los bits no empleados
;adquieren el valor por defecto.Estos y otros valores se pueden modificar según las necesidades

        __config    _CONFIG1, _LVP_OFF&_PWRTE_ON&_WDT_OFF&_EC_OSC&_FCMEN_OFF&_BOR_OFF     ;Palabra 1 de configuración
        __config    _CONFIG2, _WRT_OFF                                    ;Palabra 2 de configuración

            org        0x00
            goto    Inicio        ;Vector de reset
            org        0x05

Inicio        clrf     PORTB        ;Borra los latch de salida
            bsf        STATUS,RP0
            bsf        STATUS,RP1    ;Selecciona banco 3
            clrf    ANSEL        ;Puerta A digital
            clrf    ANSELH        ;Puerta B digital
            bcf        STATUS,RP1    ;Selecciona banco 1
            clrf    TRISB        ;RB7:RB0 se configuran como salida
            movlw    b'00111111'        
            movwf    TRISA        ;RA5:RA0 se configuran como entrada
            bcf        STATUS,RP0    ;Selecciona banco 0

Loop        btfsc    PORTA,0        ;RA0 = 1 ??
            goto    RA0_es_1    ;Si
            bcf        PORTB,0        ;No, desconecta RB0
            bsf        PORTB,1        ;Conecta RB1
            goto    Loop        ;Buble sin fin

RA0_es_1    bsf        PORTB,0        ;Activa RB0
            bcf        PORTB,1        ;Activa RB1
            goto    Loop        ;Bucle sin fin

            end                    ;Fin del programa fuente
```
*
C:*

```
/*
                                EJEMPLO 3-2
                        Autor: Mikel Etxebarria
                        Orozko-Bizkaia, Julio 2010

Entradas/salidas digitales

Control de los leds conectados a RB0 y RB1 desde el interruptor RA0. 
RB0 refleja el estado de RA0, RB1 el complemento de RA0 */

#include <16f886.h>

/* Ajusta los valores de las palabras de configuración durante el ensamblado.Los bits no empleados
adquieren el valor por defecto.Estos y otros valores se pueden modificar según las necesidades */

#fuses     NOLVP,PUT,NOWDT,EC_IO,NOFCMEN,NOBROWNOUT    //Palabra 1 de configuración
#fuses    NOWRT,BORV40                                //Palabra 2 de configuración

/* Con estas directivas las funciones "input" y "output_bit" no reprograman
 el pin de la puerta cada vez que son utilizadas. Si no se indica el
modo fast_io se asume por defecto standard_io el cual reprograma el pin
siempre antes de ser utilizadas estas funciones. */

#use fast_io(A)
#use fast_io(B)

main()
{
    setup_adc_ports(NO_ANALOGS);    //Puertas A y B digitales
      set_tris_a(0b00111111);          // RA0 se configura como entradas
      set_tris_b(0b11111100);         // RB0 y RB1 se configuran como salidas

     while(1)
    {
    if(input(PIN_A0))                 // Leer RA0 y preguntar por su valor
    {                                 // RA0 es 1
      output_high(PIN_B0);             // Poner RB0 a 1
      output_low(PIN_B1);             // Poner RB1 a 0
    }
    else
    {                               // RA0 es 0
      output_low(PIN_B0);             // Poner RB0 a 0
      output_high(PIN_B1);             // Poner RB1 a 1
    }
    }        
}
```


----------



## joseleop (Oct 20, 2012)

pero yo necesito el mismo programa solo que en mikrobasic como seria de antemano gracias:buenpost:


----------



## Nayelli (Oct 26, 2012)

Hola chicos, estuve revisando los programas, pero no entiendo muy bien... Qué es lo que hace que el programa detecte el pulso del push button... Alguien me podría explicar si no es mucha molestia??


----------



## gustavo (Oct 26, 2012)

Nayelli dijo:


> Hola chicos, estuve revisando los programas, pero no entiendo muy bien... Qué es lo que hace que el programa detecte el pulso del push button... Alguien me podría explicar si no es mucha molestia??



Suponete que vos conectas el pulsador al puerto RA0 del pic. Cuando lo presionas lo que haces es enviar un "1" al puerto RA0.
La instrccion "if" es un si condicional, consulta si el pin RA0 esta a "1" que es cuando presionas el pulsador.

Uso el ejemplo de Meta:

if(input(PIN_A0))                 // Pregunta si el pulsador conectado a RA0 esta presionado

{                                      // Si RA0 es 1 (Si el pulsador esta presionado)
      output_high(PIN_B0);     // Entonces pone RB0 a 1 (Enciende el led)
}
else                                  //Si no esta presionado
{
      output_low(PIN_B0);      //Pone RB0 a 0 (Deja el led apagado)
}

------------------------------------------------------------------------

Si (Pulsador=1)

{
    Encender led
}
Si no
{
   Apagar led
}


----------



## Nayelli (Oct 28, 2012)

Gracias por tu respuesta Gustavo, me pareció como C o Visual, es el mismo procedimiento para MPLAB??

Creo que ando revolviendo los programas, disculpa las molestias y gracias por tu tiempo


----------



## gustavo (Oct 28, 2012)

Nayelli dijo:


> Gracias por tu respuesta Gustavo, me pareció como C o Visual, es el mismo procedimiento para MPLAB??
> 
> Creo que ando revolviendo los programas, disculpa las molestias y gracias por tu tiempo




El lenguaje que ultilizas con MPLAB es el Ensamblador pero podes descargarte otros ides como CCS y programas en MPLAB pero en C


----------



## castro (Nov 10, 2012)

renx92 dijo:


> ola necesito ayuda para configurar el pic16f84a  usando una sola entrada (RA0), en este caso un push boton; el cual  cuando sea accionado me encienda un led, y si vuelve ser accionado este  mismo debe apagarlo...
> 
> el lenguaje que necesito debe de ser en microcode o mplab
> 
> ...



Cómo solo vas a usar un pulsador para encender y apagar el led ; entonces necesitas un registro lógico que lo modificas cada vez que oprimes el pulsador de 1 para encendido y 0 para apagado, luego preguntas por el estado de este registro , así sabrá el pic si debe encender o pagar el led.


----------



## electronica001 (Ene 8, 2013)

Hola, tengo este circuito que lo adjunto con el un pulsante arranca el motor y con el otro detiene, eso está bien, lo que necesito es que el pulsante de lo detiene lo haga lentamente, disminuyendo su velocidad hasta llegar a cero, que no apague el motor enseguida, espero que me puedan ayudar, gracias, la programación está echa en ccs.


----------



## zxoxxswyieeowuwubf@g (Abr 6, 2022)

Oigan yo también necesito ayuda necesito un programa para el pic 16f84a que al precionar un botón (on) colocado en cualquier lugar del pic genere números en un display del 0 al 9 será cíclica

Y al precionar otro Botton para que pare se va a quedar el número en dónde se quedó


----------



## Scooter (Abr 6, 2022)

¿Y que llevas hecho, investigado hasta ahora?

Has resucitado un hilo de hace 9 años


----------



## ricbevi (Abr 6, 2022)

zxoxxswyieeowuwubf@g dijo:


> Oigan yo también necesito ayuda necesito un programa para el pic 16f84a que al precionar un botón (on) colocado en cualquier lugar del pic genere números en un display del 0 al 9 será cíclica
> 
> Y al precionar otro Botton para que pare se va a quedar el número en dónde se quedó


A parte de lo ya dicho por Scooter ,te adelanto que en cualquier lugar del PIC no se puede colocar el/los botón/s, solo en los pines del puerto A o B que previamente fueron definidos como entrada.


----------

