Autor Tema: Ayuda para ingresar una clave  (Leído 1741 veces)

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

Desconectado ale2006

  • PIC10
  • *
  • Mensajes: 6
Ayuda para ingresar una clave
« en: 07 de Marzo de 2014, 00:29:49 »
Hola, buenas noches, mi nombre es Alejandro. Recien estoy arrancando con el mundo de la programacion. La verdad que es increible e interminable, Empece realmente hace poco y lo que aprendi fue con manuales y tutoriales que encontre por la web. Mi problema, es que estoy haciendo un ejercicio en el que se debe accionar un relay despues de ingresar una "clave" a travez de 3 pulsadores. Despues de una semana de volverme loco y de probar varias forma de hacer el prograa, llegue a una que deberia funcionar. El tema es que la simulo en proteus y no funciona como deberia. Quisiera saber si es que estoy errandole a algo en el programa, si mi problema son los antirebotes o si soy yo, jajaja. Dejo el programa para ver si alguno me puede dar alguna ayuda. para probar use como clave 111 para facilitar la prueba y en la simulacion para los switch use capacitores de 1uf para ver si con eso amortiguaba los rebotes, en caso de que necesiten subo tmb el archivo de proteus.  Desde ya muchisimas gracias

cmcon=7
trisb=0
a var byte           'primer valor ingresado
b var byte           'segundo valor ingresado
c var byte           'tercer valor agregado
x var byte            'repeticiones de error
pul1 var porta.1     
pul2 var porta.2
pul3 var porta.3
relay var portb.5
led var portb.6
flag1 var bit         'bandera para el primer digito pulsado
flag2 var bit         '   "      "   " segundo "      "
flag3 var bit         '   "      "   " tercer  "      "
flag4 var bit
flag1=0 and flag2=0 and flag3=0 and flag4=0

inicio:
gosub ingresado
if flag1=1 then gosub ingresado2
if flag2=1 then gosub ingresado3
if flag3=1 then gosub compara
goto inicio

ingresado:
if pul1=0 then a=1 
pause 50
if pul2=0 then a=2
pause 50
if pul3=0 then a=3
pause 50
if a > 0 then flag1=1
return

ingresado2:
if pul1=0 then b=1 
pause 50
if pul2=0 then b=2
pause 50
if pul3=0 then b=3
pause 50
if b > 0 then flag2=1
return

ingresado3:
if pul1=0 then c=1 
pause 50
if pul2=0 then c=2
pause 50
if pul3=0 then c=3
pause 50
if c > 0 then flag3=1
return

compara:
high led
pause 200
if a= 1 and b= 1 and c= 1 then gosub abrir
if flag4=0 then gosub error
a=0 and b=0 and c=0
return

abrir:
high relay
pause 1000
low relay
pause 1000
flag4=1
flag1=0 and flag2=0 and flag3=0
return

Error:
for x= 1 to 3
high led : pause 200
low led : pause 200
flag1=0 and flag2=0 and flag3=0 and flag4=0
next
return

end

Desconectado ricb

  • PIC10
  • *
  • Mensajes: 7
Re: Ayuda para ingresar una clave
« Respuesta #1 en: 31 de Marzo de 2014, 17:27:41 »
Hola...Hay muchas formas de hacer un "anti-rebote" por software...
Un ejemplo posible es:

if pul1=0 then ' Si se pulso
  Repeat        ' Espero
    pause 50  ' 50 ms
  until pul1=1 ' o hasta que se suelte
endif            ' fin de la condicion

Saludos.

Ric.