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