Buenos dias, es mi primera vez en el foro y no se donde colocar este tema.
Estoy haciendo un proyecto de puente levadizo, se nos requirió ponerle un paro en caso de emergencia.
Lo quise hacer con un WHILE de manera que al activarse un push se deje de cumplir la condición "WHILE Wrng=0", pero se presiona el push y el programa sigue corriendo.
No sé si estoy mal colocando el WHILE o si existe un limite en el número de declaraciones entre el WHILE-WEND.
Lo estoy simulando en Proteus 8
Aquí está mi código.
Estoy haciendo un proyecto de puente levadizo, se nos requirió ponerle un paro en caso de emergencia.
Lo quise hacer con un WHILE de manera que al activarse un push se deje de cumplir la condición "WHILE Wrng=0", pero se presiona el push y el programa sigue corriendo.
No sé si estoy mal colocando el WHILE o si existe un limite en el número de declaraciones entre el WHILE-WEND.
Lo estoy simulando en Proteus 8
Aquí está mi código.
Código:
'****************************************************************
'* Name : Puente levadizo *
'* Date : 02/07/2014 *
'* Notes : Proyecto 3er cuatrimestre mecatrónica *
'****************************************************************
@ DEVICE pic16F628A, MCLR_OFF ;Master Clear (Internal)
@ DEVICE pic16F628A, WDT_ON ;Watch Dog Timer
OSC4
CMCON=7
OPTION_REG.7=0
trisa=%11111111
trisb=%00000000
portb=0
S1 var porta.0 ;S1, S2 y S3, Entradas preparadas para los sensores infrarrojos
S2 var porta.1
Rst var porta.2 ;Boton preparado para el reinicio del sistema despues de un paro de emergencia
H1U var porta.3 ;H1U y H1D, Entradas preparadas para los sensores indicadores de posicion de la hoja 1
H1D var porta.4
H2U var porta.5 ;H2U y H2D, Entradas preparadas para los sensores indicadores de posicion de la hoja 2
H2D var porta.6
Wrng var porta.7 ;Paro de emergencia
K1U Var portb.0 ;K's 1 salidas que controlan los relevadores del puente h de la hoja 1
K1D var portb.1
K2U var portb.2 ;K's 2 salidas que controlan los relevadores del puente h de la hoja 2
K2D var portb.3
Green var portb.4 ;Controla el led "Verde"
Yell var portb.5 ;Controla el led "Amarillo"
Red Var portb.6 ;Controla el led "Rojo"
Conteo var byte
Conteo=0
While wrng=0
Inicio:
low k1u:low k2u
high k1d:high k2d:high red
Acomodar: ;Programa de inicio que baja las hojas del puente
high yell
pause 250
if h1d=1 then low k1d
if h2d=1 then low k2d
low yell
pause 250
if h1d=1 and h2d=1 then goto libre
goto acomodar
Libre: ;Mantiene el paso de vehiculos mientras no se encuentre una embarcacion en paso
low red:high yell
pause 1000
low yell
Libre2:
high green
If S1=0 then call LadoA
If S2=0 then call LadoB ;Rutina ejecutable en caso de que una embarcacion se acerque desde el lado del sensor 2
goto libre2
LadoA: ;Rutina ejecutable en caso de que una embarcacion se acerque desde el lado del sensor 1
high yell
pause 250
low yell
pause 250
high yell
pause 250
low yell:low green
pause 500
high red
pause 1000 ;Se empieza a abrir el puente
high k1u:high k2u
Abrir: ;Secuencia que permanece activa mientras el puente se esta abriendo, una vez abierto es finalizada
High yell
pause 300
if h1u=1 then Low k1u
if h2u=1 then low k2u
low yell
pause 300
if s2=0 and s1=1 and h1u=1 and h2u=1 then goto inicio
goto abrir
LadoB: ;Rutina ejecutable en caso de que una embarcacion se acerque desde el lado del sensor 2
high yell
pause 250
low yell
pause 250
high yell
pause 250
low yell:low green
pause 500
high red
pause 1000 ;Se empieza a abrir el puente
high k1u:high k2u
Abrir2: ;Secuencia que permanece activa mientras el puente se esta abriendo, una vez abierto es finalizada
High yell
pause 300
if h1u=1 then Low k1u
if h2u=1 then low k2u
low yell
pause 300
if s1=0 and s2=1 and h1u=1 and h2u=1 then goto inicio
goto abrir2
wend
Paro: ;Se activa en caso de necesitar un paro de emergencia del sistema
Portb=%01000000
goto paro
goto inicio
End
Adjuntos
Última edición por un moderador: