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.
