Autor Tema: Uso de banderas de Control  (Leído 1650 veces)

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

Desconectado F4yCk3r

  • PIC10
  • *
  • Mensajes: 1
Uso de banderas de Control
« en: 12 de Octubre de 2012, 15:26:37 »
hola que tal alguien podria hechar la mano con el uso de las banderas.?
Lo que tengo que hacer es lo siguiente, cuando conecto el uC al la corriente tiene que desplegar el numero 7 y cuando pulso un boton muestra el numero 4, si lo vuelvo a pulsar muestra el numero 7 de nuevo y si lo vuelvo a pulsar muestra el numero 4 de nuevo y asi sucesivamente
Es como un set y un reset. Se que tengo que usar banderas pero aun no logro entender bien como usarlas. Adjunto lo que llevo de codigo. De inicio en proteus me muestra el 7 y cuando pulso el boton me muestra el 4 pero al pulsar de nuevo el boton ya no hace nada =(, alguien que me heche una manita, de antemano gracias.

Código: [Seleccionar]
trisb=0         
numero VAR BYTE      ;crea la variable número con valor 255
bot VAR portc.0  ;nombre para el puerto C.4
flag VAR BIT    ;creamos la variable flag de un bit
flag1 var bit


display:
      IF bot=0 THEN nueve r     
 pAUSE 80          ; pause para estabilizar el rebote de la tecla
      if bot=1 then seis
 pause 80
Flag=0     ;cargar la variable con cero
flag1=0
    GOTO display                  ;ir a display


nueve:
   IF  flag= 1 THEN GOTO display ;pregunta si la variable es uno
      flag = 1     ;cargar la variable con uno
      flag1=0
  portb=$66
   GOTO display                   ;ir a display
   
seis:
if flag1=0 then goto display
flag=0
flag1=1
portb=$07
goto display



END

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Uso de banderas de Control
« Respuesta #1 en: 13 de Octubre de 2012, 09:22:49 »
Creo que las banderas (flags, semáforos o bit de control de flujo) no tienen nada que explicar, porque su uso es muy simple, pues su función es la de modificar la repuesta de una rutina, creo que en lo que hay que hacer hincapié es en estudiar el funcionamiento de la instrucción IF-THEN-ELSE-ENDIF y por ultimo el GOTO no se utiliza, porque crea un código raro y difícil de entender y que suele llevar a errores. En Basic el Goto solo se suele utilizar una sola vez para crear el bucle infinito de la rutina principal. Pero para llegar a esto primero hay que tener claro en las partes que se divide un programa.

'Titulo, autor, fecha, lenguaje, etc ****************************
'Microcontrolador ***********************************************
'Simulado o probado en la realidad ******************************
'Versión y resumen de lo que hace el programa *******************
'Definición de Bit **********************************************
'Definición de los Mhz de trabajo del sistema *******************

'Definición de como trabajan los modulos y estado ***************
AllDigital
TRISA = 255
TRISB = 0

'Declaración de simbolos y variables generales ******************
Symbol bot = PORTA.0  'Nombre para el bit del puerto RA0
Dim flag As Bit  'Flag control dato PortB

flag = 0  'Habilita PORTB = 7

'Rutina o bucle principal ***************************************
main:
   If bot = 1 Then Gosub tecla_0  'Control de la tecla
   If flag = 0 Then Gosub siete  'Hace PORTB = 7
   If flag = 1 Then Gosub cuatro  'Hace PORTB = 4
Goto main
End                                              
'Sub-rutinas *****************************************************
'Control tecla
tecla_0:
   If flag = 0 Then  'Habilita PORTB = 4
      flag = 1
   Else
      If flag = 1 Then flag = 0  'Habilita PORTB = 7
   Endif
   WaitMs 80  'Real 300, pause para estabilizar el rebote de la tecla
Return                                            
'PORTB = 4
cuatro:
   PORTB = 4
Return                                            
'PORTB = 7
siete:
   PORTB = 7
Return                                            
'End **************************************************************
« Última modificación: 13 de Octubre de 2012, 09:32:16 por dogflu66 »
Saludos desde Granada, España.