Autor Tema: ayuda con detector de pulsadores  (Leído 2478 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado austro

  • PIC10
  • *
  • Mensajes: 1
ayuda con detector de pulsadores
« en: 05 de Septiembre de 2010, 02:30:47 »
Hola, mi problema es el siguiente, tengo un contador que debe comensar a contar cuando se presione y luego suelte el pulsador (en mi caso es S1 y esta conectado a RA0), me explico, si presiono el pulsador (en mi caso genero un cero) no debe pasar nada pero al soltarlo (volviendo el pulsador a uno) comienza el conteo de 8 LEDs conecados al Pto B, esta cuenta no debe parar, salvo que nuevamente se presione el mismo pulsador, pero aquí debe pasar lo mismo que antes, si se mantiene presionado el conteo continua pero al soltarlo debe parar la cuenta, y así sucesivamente, si se presiona y suelta cuenta, si se presiona y suelta para, etc, además con otro pulsador se debe resetear la cuenta, pero con la misma logica de los otros pulsadores osea si se presiona no pasa nada pero al soltarlo resetea y queda a la espera de detectar S1 y volver a contar.

Yo realice lo siguiente, pero que cuenta al presionar S1 y para al liberarlo y resetea con S0:

;Enciendo LEDs colocados en Puerto B cada vez que se presiona un pulsador colocado
;en RA1. Se visualiza un conteo en binario. Se resetea la salida por medio de un pulsador en RA0
   LIST p=16F877A
   INCLUDE<P16F877A.INC>

;Inicialización PIC
   org   0x00
   bsf   STATUS, RP0   ; Selecciona Banco 1
   clrf   PORTB      ; Limpia Puerto B
   clrf   PORTA       ; Limpia Puerto B
; Inicialización del puerto A:
   movlw   0x06       ; Configura todos los pines
   movwf   ADCON1       ; como digitales
   movlw   0x03       ; Valor usado paraconfigurar
   movwf   TRISA       ; los pines RA<1:0> como entradas
   bcf   STATUS,RP0   ; Selecciona el Banco 0
;=========================================

START
   clrf   PORTB      ;PORTD=00 (Apago todos los LEDs)
REPITE
   btfsc   PORTA,0      ;Es RB1=0? (Se presionó el pulsador reset?)
   goto   REP1      ;NO -> Salta a REP1
   goto   START      ;SI -> Resetea los led
REP1
   btfsc   PORTA,1      ;Es RB0=0? (Se presionó el pulsador contador?)
   goto   REPITE      ;NO -> Salta a Repite, conteo detenido
   incf   PORTB,1      ;SI -> PORTD=PORTD+1 (comienza el conteo)
   call   RETA
   goto   REPITE      ;salta a REPITE, y verifica el estado de los pulsadores


RETA
   movlw   0xFF
   movwf   0x20
LOOP2
   movlw   0xFF
   movwf   0x21
LOOP1
   decfsz   0x21,1
   goto   LOOP1
   decfsz   0x20,1
   goto   LOOP2
   return
   
   END               ;Fin de Programa.


Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: ayuda con detector de pulsadores
« Respuesta #1 en: 05 de Septiembre de 2010, 18:19:02 »
Hola, esto lo tienes que realizar empleando banderas, ó empleando interrupciones....
Es decir, tienes que realizar un "antirrebote", primero verificas si se pulso (esta en cero?) si: entonces una pequeña demora y verificas nuevamente si esta pulsado...  si:  entonces verificas si "soltó", y quedas en un loop esperando a que suelte...
al soltar, marcas una bandera, o incrementas un contador, mirando si es par o impar (testeas el bit cero de dicho contador), si esta en uno, pulsaron para iniciar la cuenta, si está en cero, la han detenido...
espero se entienda  :mrgreen:
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...