Hi Moyin, ya entiendo lo que quieres hacer.
Bueno el
select case sirve para evitar usar tantos
IF's, el select lee los valores de una variable o de un puerto, solo se ejecutan los
case's si la variable o el puerto cumple con el
"case" que has elegido.
Es como una sentencia switch en C (para pc).
Un ejemplo para una variable seria:
"la variable puede tomar valores 1 y 2 por programa"
select case A
case 1
portb.0=1
case 2
portb.=0
end select
Lo que hace es ver el estado o el valor de la variable A si es 1 prende el RB0, si es 2 lo apaga cualquier otro valor no hace nada.
ahora como en tu caso leamos un puerto:
el puerto A de entrada (todo)
select case PORTA
case 0 'o todos los puertos apagados 00000 lo k es cada valor para cada RA0-RA4
gosub nada
case 1 'solo RB0 encendido 00001
gosub prende1B
case 2 ' solo RB1 encendido 00010
gosub x
case 3 ' Rb0 y Rb1 00011
..............
y asi te la llevas para cada que quieras leer algo puedes usar 1 o 0, es decir puedes leer el estado alto o el estado bajo eso tu lo implementas. Es mas versatil usar un select case mas que ifs aunque no siempre se puede.
Un ejemplo rapido de tu proyecto seria enciendes el programa y ningun swtich esta activado lo que hace avanzar tu banda, si llega a tope se activa un switch y va de regreso. seria algo asi.
sub procedure Avanza()
portb.X=1
portb.X=0
end sub
sub procedure Regresa()
delay_ms(1000)
portb.X=0
portb.X=1
end sub
sub procedure detente()
Deley_ms(1000)
portb.X=0
portb.X=0
end sub
TRISA=31
main:
select case PORTA
case 0 "'ningun switch activado"
Avanza()
case 1 "'switch activado - tope de carrera"
Regresa()
case 2 "'switch activado- inicio"
detente()
end select
goto main
Bueno espero te sirva de algo y te des una idea