Autor Tema: IF Problemas  (Leído 2361 veces)

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

Desconectado tomasgrosso

  • PIC10
  • *
  • Mensajes: 11
IF Problemas
« en: 26 de Octubre de 2010, 13:47:17 »
Colegas.
Toy empesando a programar, en basic, he armado varias cosas sensilla.
Tengo una duda sobre los IF. Por ejemplo quiero hacer el siguiente programa:
'///////////////////// Configuro puertos/////////////////////////   
define osc 4
TRISA = %11111
TRISB = %00000000   
PORTB = 0   
'//////////////////////////////////////////////////////////////

inicio1:
        input porta.0
        if porta.0 = 1 then
        goto luz1
        else
        goto inicio1
        endif
inicio2:
        input porta.1
        if porta.1 = 1 then
        goto luz2
        else
        goto inicio2
        endif       
   
Luz1:
    PORTB.0 = 1
    pause 10
    goto LUZ1   
Luz2:
    PORTB.1 = 1         
    pause 10
    goto luz2
    end

Este ejemplo son dos pulsadores, que con el RA0, es = 1 si se cumple esa condicion salta a luz1.
Hasta ahi anda, bien pero cuando voy a pulsar el otroo, no me responde o sea no salta a la etiqueta luz2.
Este ejemplo no tiene mucho sentido, pero es para saber, nomas bien como se maneja. con esa base puedo hacer varias cosas...
saludos espero sus respuestas...

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: IF Problemas
« Respuesta #1 en: 26 de Octubre de 2010, 19:03:44 »
Hola, el principal fallo lo tienes en la estructura del programa, al usar gotos se hace muy difícil de seguir y es fácil cometer errores. El salto GOTO no se utiliza en los lenguajes de alto nivel, al principio es mejor utilizar el salto GOSUB/RETURN porque es más fácil saber donde tiene que continuar el programa. Esto hace que se cometan menos errores y el código es más fácil de interpretar. Normalmente se crea en nuestro programa una rutina o lazo infinito que comprueba los eventos (main: eventos goto main end), en este caso entradas, y salta a las sub-rutinas y vuelve siempre de la misma a la siguiente línea después del salto.

Código: vb.net
  1. Define CONF_WORD = 0x2f50
  2. Define CONF_WORD_2 = 0x3ffd
  3. Define CLOCK_FREQUENCY = 4  'define osc 4
  4. 'PIC16F88
  5. '///////////////////// Configuro puertos/////////////////////////
  6. AllDigital
  7. TRISA = %11111
  8. TRISB = %00000000
  9. PORTB = 0
  10. '//////////////////////////////////////////////////////////////
  11.  
  12. main:
  13.         'inicio1:
  14.         'Input PORTA.0
  15.         If PORTA.0 = 1 Then Gosub luz1
  16. 'Else
  17. 'Goto inicio1
  18. 'Endif
  19.  
  20.         'inicio2:
  21.         'Input PORTA.1
  22.         If PORTA.1 = 1 Then Gosub luz2
  23. 'Else
  24. 'Goto inicio2
  25. 'Endif
  26. Goto main
  27. End                                              
  28. 'Sub-rutinas
  29. luz1:
  30.         PORTB.0 = 1
  31.         WaitMs 10  'pause 10
  32. Return  'goto luz1                                
  33. luz2:
  34.         PORTB.1 = 1
  35.         WaitMs 10  'pause 10
  36. Return  'goto luz2                                
  37. 'End
  38.  
  39. 'este ejemplo son dos pulsadores, que con el RA0, es = 1 si se cumple esa condicion salta a luz1.
  40. 'hasta ahi anda, bien pero cuando voy a pulsar el otroo, no me responde o sea no salta a la etiqueta luz2.
« Última modificación: 26 de Octubre de 2010, 19:08:17 por dogflu66 »
Saludos desde Granada, España.

Desconectado tomasgrosso

  • PIC10
  • *
  • Mensajes: 11
Re: IF Problemas
« Respuesta #2 en: 26 de Octubre de 2010, 23:30:12 »
tengo otra duda.
Si tengo esta duda. con el goto no anda, osea quisiera ser un oscilador, manejado con 2 pulsadore, yo le puese los famosos goto pero no hace, el bucle cerrado...
Gracias

define osc 4
TRISA = %11111
TRISB = %00000000
PORTB = 0

Main:
        IF PORTA.0 = 1 THEN GOSUB LUZ1

        IF PORTA.1 = 1 THEN GOSUB LUZ2
GOTO MAIN
end
' Sub Rutinas
LUZ1:
    PORTB.0 = 1
    pause 1000
    PORTB.0 = 0
    RETURN
LUZ2:
    PORTB.1 = 1
    PAUSE 1000
    PORTB.1 = 0
     
    RETURN