Autor Tema: INVOCAR SUBRUTINA CON RETARDO  (Leído 1458 veces)

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

Desconectado picraul

  • PIC10
  • *
  • Mensajes: 4
INVOCAR SUBRUTINA CON RETARDO
« en: 26 de Octubre de 2005, 20:01:00 »
Hola foro,

Tengo un pequeño problema con mi código, pretendo que al comenzar el programa
me muestre de forma permanente el menaje "LISTO" y si presiono por 5 segundos
portb.7 me lleve a la rutina reset y me muestre el mensaje "calibrar" en este
momento si presiono portb.0 se enciende un led en portb.1 si dejo de presionar portb.0 por un
tiempo de 20 segundos me regrese a "LISTO" .

En el espacio de la rutina del led puede ir otra funcion especifica puse esta como ejemplo,
la idea es que si presiono portb.0 varias veces permanezca en esta rutina pero que al dejar
de hacerlo este vuelva a inicio.

No he logrado hasta el momento hacerlo y si alguno me puede dar una luz seria estupendo.


Cualquier ayuda sera bienvenida


saludos

picraul

Codigo:
Asm DEVICE WDT_OFF , BOD_ON , XT_OSC , PWRT_ON , CPD_OFF , LVP_OFF  endasm

"-----CONFIGURACION DEL LCD
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTA
DEFINE LCD_EBIT 0
"----DEFINICION DEL VALOR DE OSCILADOR A UTILIZAR
define OSC 4

ADCON1=7
TRISA=%111111
TRISB=%10000000


Segundos var BYTE       "para los segundos
tiempofuera var WORD

main:

            LCDOut $FE,1,"LISTO"

If PORTB.7=1 then       "si oprimo comienza el conteo de los 5 segundos
pause 5000
gosub reset             "una vez terminados invoca a reset
endif
goto main


reset:

tiempofuera=0           "arranco tiempo desde cero
lCDOut $FE,1,"Calibrar: "

if portb.0=0 then
high portb.1
pause 200
low portb.1
pause 200


tiempofuera=tiempofuera+1
If tiempofuera>200 then goto main
Pause 100
gosub main
goto reset
return






Desconectado Artifox

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 455
    • Quadbot
RE: INVOCAR SUBRUTINA CON RETARDO
« Respuesta #1 en: 27 de Octubre de 2005, 08:59:00 »
Hola encontre un par de errores en tu codigo, estos se encuentran al final del codigo:

...... " Codigo Anterior
Pause 100
gosub main  " ERROR: main no es una subrutina pues no tiene un "return" por lo
                    " tanto no puedes llamarlo con un GOSUB
goto reset   " ERROR: El goto es una salida sin retorno, por ello nunca terminara
                    " de hacer la primera llamada...
return         " Nunca llegara a este punto

Lo que te recomiendo es que plantees mejor tu codigo y esas llamadas que haces al final, lo hagas fuera de reset y de calibrar....
No he revisado al 100% tu codigo, pero a primera vista vi esos errores, espero los puedas corregir. Un abrazo.....
Video Quadbot
Saludos desde mi querido Perú.
Si realmente queremos que el mundo cambie debemos empezar por nosotros mismos... ;)

Desconectado morfeus

  • PIC12
  • **
  • Mensajes: 78
RE: INVOCAR SUBRUTINA CON RETARDO
« Respuesta #2 en: 29 de Octubre de 2005, 16:26:00 »
Hola,

A ver si te entiendo, tu quieres crear una especie de ejecución especial dentro de tu programa?... al oprimir el pulsador por 5 seg te muestre un menu y mientras estes en el ejecutando alguna rutina no se "salga" y si dejas de hacer algo por mas de 20 seg en este menu te "saque" al menu principal.


si es asi voy a subir el codigo y me cuentas que te pareceGiño

chao

Desconectado picraul

  • PIC10
  • *
  • Mensajes: 4
RE: INVOCAR SUBRUTINA CON RETARDO
« Respuesta #3 en: 30 de Octubre de 2005, 10:55:00 »
Hola pana morfeus,

Muchas gracias por tu ayuda ya ensaye el codigo y funciono muy bien, me diste otra luz de como hacerlo, que  bueno contar con los integrantes de este foro.


RebotadoRebotado

Desconectado morfeus

  • PIC12
  • **
  • Mensajes: 78
RE: INVOCAR SUBRUTINA CON RETARDO
« Respuesta #4 en: 30 de Octubre de 2005, 16:12:00 »
Que tal picraul,

Pues me alegro que te haya servido el código, ya sabes que el foro esta abierto para cualquier inquietud y si podemos ayudar lo hacemos con mucho gusto.


SaludosMuchas risas

morfeus


 

anything