TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: lorelei en 27 de Agosto de 2013, 10:22:51
-
Hola, leyendo encontre que puedo usar subrutinas ymire muchos ejemplos pero no entiendo como utilizarlas, si alguien me puede ayudar le estaria muy agradecida.
Lo que quiero hacer son varias rutinas de leds y poder ejecutarlas sin tener que repetir todo el codigo, por ejemplo
Estoy haciendo una baliza con leds y quisiera hacer subrutinas y llamarlas para ir definiendo como deben prender
esa seria la rutina 1
PORTB = %10000001
PORTB = %01000010
PORTB = %00100100
PORTB = %00011000
PORTB = %00000000
esta seria la rutina 2
PORTB = %11000000
PORTB = %01100000
PORTB = %00110000
PORTB = %00011000
PORTB = %00001100
PORTB = %00000110
PORTB = %00000011
y asi ir agregando mas rutinas, lo que no entiendo es como hago para elegir una rutina ( la que yo quiera) y despues elegir otra rutina que yo quiera e ir eligiendo diferentes rutinas en el orden que yo quiera.
Gracias a todos por leer mi mensaje
Lorena
-
hola que tal hay muchas formas de entrar a una subrutina una puede ser llamándola mediante un pulsador o al terminar la primer rutina o al pasar cierto tiempo etc el uso y los llamados de cada subrutina dependen del programador y el uso que le quiera dar cada uno te dejo un ejemplo que me encontré de un pequeño programa con subrutina espero y te sirva y te de una buena idea de como usarlas
TRISB = 0x00
PORTB = %00000011
goleft:
WAITMS 250
PORTB = SHIFTLEFT(PORTB, 1)
IF PORTB = %11000000 THEN GOTO goright
GOTO goleft
goright:
WAITMS 250
PORTB = SHIFTRIGHT(PORTB, 1)
IF PORTB = %00000011 THEN GOTO goleft
GOTO goright
-
No te recomiendo que uses los gotos en el código, estos solo se usan en los libros que tienen más de 30años.
El uso de sub-rutinas que se llaman con Gosub/Return están tambien anticuadas pero te facilitan posteriormente el cambio de sub-rutinas a funciones.
Dejo un pequeño código:
AllDigital
TRISB = %00000011
main: 'Sbrutina principal
Dim x As Bit
While x = x 'Bucle infinito
If RB0 = 1 Then Gosub sb1 'Salta a la sbrutina llamada sb1 y cuando la termina retorna a la línea siguiente
If RB1 = 1 Then Gosub sb2 'Salta a la sbrutina llamada sb2 y cuando la termina retorna a la línea siguietne
Wend
End
'Esta es la rutina 1
sb1:
PORTB = %10000001
PORTB = %01000010
PORTB = %00100100
PORTB = %00011000
PORTB = %00000000
Return
'Esta es la rutina 2
sb2:
PORTB = %11000000
PORTB = %01100000
PORTB = %00110000
PORTB = %00011000
PORTB = %00001100
PORTB = %00000110
PORTB = %00000011
Return
-
solo lo puse como un pequeño ejemplo que encontré en una mirada rápida amigo dogflu66 en el manual del compilador para que se diera una idea el compañero lorelei
saludos
-
Gracias a los dos, me sirvieron muchisimo los 2 ejemplos...
Otra consulta
ya tengo las rutinas funcionando, va cambiando de rutina en rutina, si quisiera que el cambio de rutina fuera presionando un boton, como hago la seleccion de la rutina que deberia ser la correspondiente?
-
Si te he entendido bien, ya lo tienes en las siguientes líneas del ejemplo anterior:
If RB0 = 1 Then Gosub sb1 'Salta a la sbrutina llamada sb1 y cuando la termina retorna a la línea siguiente
If RB1 = 1 Then Gosub sb2 'Salta a la sbrutina llamada sb2 y cuando la termina retorna a la línea siguietne
RB0 y RB1 son pin de entrada, donde supuestamente se conectarian las teclas.
-
gracias!!!!! funciono a la perfeccion