Encendido de un led mediante pulsador pic basic pro

#41
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
 
#42
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:
#43
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:
#44
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.
 
#45
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: