Encendido de un led mediante pulsador pic basic pro

Tengo este programa, pero quiero hacer que cuando pul=0 e int=0, prenda el led, pero sigo presionado y después de unos segundos se apague el led, y si siguen presionados los dos pulsadores que no se vuelva a encender hasta volver a soltar y presionar otra vez los dos pulsadores.
Algo me hace este programa que hice, pero se detiene y no se vuelve activar mas, hay que quitarle el voltaje y conectarlo para que vuelva a funcionar.
Código:
symbol int=portb.0
symbol pul=portb.1
symbol led=portb.2
symbol led1=portb.3
trisb.0=1
trisb.1=1
trisb.2=0
trisb.3=0


 led=0
 led1=0
 
 
inicio:
if int=0 and pul=0 then
toggle led
pause 1000
high led





else
low led
high led1
pause 100
low led1
pause 100
endif

goto inicio
 
Si es que entendí el planteamiento, el siguiente programa debe hacer lo que deseas:
PHP:
inicio:
    Symbol  pulsador1   = PORTB.0
    Symbol  pulsador2   = PORTB.1
    Symbol  led         = PORTB.2
    
    contador    Var Word

    OPTION_REG.7 = 0
    TRISB = %11110011
    PORTB = 0
    
programa:
    If pulsador1 = 0 And pulsador2 = 0 Then
        High led
        
        While pulsador1 = 0 And pulsador2 = 0
        
            contador = contador + 1
        
            Pause 1
        
            If contador > 2000 Then
                
                Low led
                
                While pulsador1 = 0 And pulsador2 = 0
                    @ NOP
                Wend
            EndIf
        Wend

        Low led
        
        contador = 0
        
    EndIf
    
    GoTo programa
    
    End
Saludos.
 
Última edición:
gracias por su repuesta pero lo probe y no funiona.. aver explico mejor...

cuando pulsador1=0 and pulsador2=0 enciende el led por 1 segundo y se apaga pero sin dejar de aplastar los p1 y p2, cuando suelte los pulsadores no haga nada asta volver aplastar y se vuelva a encerder el led por 1 seg



perdon si hace lo que quiero muchas gracias de verdad

y a eso hay como adicionar si p1=0 y p1=1 prenda el led por 1 segundo y se apague y vuelva a funcionar con el p1= y p2=0 gracias por tu ayuda de verdad que no sabia como salir de este rollo ...



perdon me hice bola
a ver explico mejor

si p1=0 and p2=0 prenda el led por 1 segundo
si p1=1 and p2=1 prenda el leds por 1 segundo
y esto repita siempre ahora si me explique bien gracias por su ayuda



si pasa esto p1=0 and p2=1 no enciende nada
si p1=1 and p2=0 no enciende nada


sera posible hacerlo
 
Última edición:
Si es posible, ya tienes la base de cómo se puede hacer.
Nada más elige bien tus comparaciones y haz que reaccione ante lo que procede.
 
Gracias. Si, ya me dí cuenta de la falla, muchas gracias.



Disculpen otra vez mi molestia. Estoy haciendo un cronometro, ya lo tengo casi listo pero necesito poner pausa con un pulsador y al volver a pulsarlo que empiece a contar otra vez y la verdad que no sé cómo.

Disculpen mi curiosidad, pero esto de los pic se pone más interesante cada vez.

Aquí está mi programa:
PHP:
unid VAR BYTE ;variable unidades
dece VAR BYTE ;variable decenas
cent VAR BYTE ;variable centenas
mile VAR BYTE ;variable miles
actual var byte
cuenta var byte
chicha VAR porta.0 ;pin de la chicharra
pulsoreloj VAR porta.2 ;pulso segundos
resetear VAR porta.1 ;regresa a cero
activar VAR BIT ;bandera para la tecla contar
trisb=0 ;todo el puerto b es de salida
cmcon=7 ;Todo el puerto A en modo digital
pito:
high chicha
pause 200
low chicha

encerar:
 


unid=0 ;carga la variable unid con cero
dece=0 ;carga la variable dece con cero
cent=0 ;carga la variable cent con cero
mile=0 ;carga la variable mile con cero
actual=1
cuenta=0







;setea TMR0 de interrupción cada 32768 microsegundos
OPTION_REG = %1010110 ;setea TMR0 configurando y habilita PORTB pullups
INTCON = %10100000 ;hablilita TMR0 interrupción interna
ON INTERRUPT GOTO interrup
     
     
     

display:

portb= 224+unid ;224 %11100000, activa las unidades
PAUSE 3
portb= 208+dece ;208 %11010000, activa las decenas
PAUSE 3
portb= 176+cent ;176 %10110000, activa las centenas
PAUSE 3
portb= 112+mile ;112 %01110000, activa los miles
PAUSE 3
gosub interrup

GOTO display





;************** Handler de interrupciones para incrementar contador ***************
DISABLE ;deshabilita interrupciones durante el proceso
interrup:
if resetear=0 then pito 
high pulsoreloj
cuenta = cuenta + 1 ;cuenta las interrupciones del TMR0

TMR0=4 ;resta 4 al contador de 256 del TMR0
IF cuenta < 31 THEN reset ;31 cuentas (32256ms = 999936uS)
cuenta = 0
low pulsoreloj




unid = unid + 1
IF unid >= 10 THEN
unid = 0

dece = dece + 1
IF dece >= 6 THEN
dece = 0
cent = cent + 1
IF cent>= 10 THEN
cent = 0
mile = mile + 1
IF mile>= 6 THEN
cent = 0
ENDIF
ENDIF
ENDIF
endif
reset:


INTCON.2 = 0 ;resetea la bandera de interrupción del TMR0

RESUME
 
Última edición por un moderador:
Atrás
Arriba