TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Leon Pic en 13 de Febrero de 2008, 20:31:28

Título: ¿Bandera? ¿flag?
Publicado por: Leon Pic en 13 de Febrero de 2008, 20:31:28
Hola a todos.

Hace bastante tiempo que tengo una duda grande

1. ¿Qué es una bandera o flag?

2. ¿Cómo se utiliza?

He estado buscando información por toda la red y me confundieron más. Uno me habla de una cosa, otro de otra. Por mucho tiempo he tratado de entenderlo y no logro hacerlo, y hoy me a surgido de nuevo la duda porque tengo que migrar un programa de un pic a otro y aprovecho para hacerlo más eficiente, y de aquí es que quiero utilizar con más eficiencia los timer. Luego recordé este hilo (http://www.todopic.com.ar/foros/index.php?topic=16982.0) de PalitroqueZ, pero está en C. Lo he pasado a ASM (como explico más adelante en el hilo de pali) pero no logro entender bien esta bandera, ya que el lo utiliza de una manera y en la web no he encontrado nada parecido.

Gracias por adelantado  :-) :-) :-/ :-/

Editado Título por RedPic: Cambiado falg por flag.
Título: Re: ¿Bandera? ¿falg?
Publicado por: jfh900 en 13 de Febrero de 2008, 21:41:05
Una bandera o flag es un bit de un registro que nos indica del estado de un evento o situación.

Bandera o flag (bandera en ingles) es el bit de cero "Z" del registro de control (escribo de memoria) o el bit de interrupción (que tenemos que borrar al salir de la interrupción).

Nosotros podemos definir nuestras propias banderas para controlar el flujo del programa.

Por ejemplo podemos definir una variable para ver si tenemos caracteres en el buffer de recepción de un programa rs232 (cuando tenemos caracteres lo ponemos a "1" y cuando no hay lo ponemos a cero).

Un saludo
Título: Re: ¿Bandera? ¿falg?
Publicado por: Meta en 13 de Febrero de 2008, 21:43:53
Los flags o banderas son registros de estado. Los Z, DC, RP0 y C. Por lo que se, cambia depende del estado de una acción y te vale para ejecutar otra acción. Por ejemplo: Algo parecido a un If else. Si Z es distinto a 0, salta a goto, si es = a 0, sigue con la instrucción. Cosas así. En un libro lo tengo detallado y la verdad es mucho para escribirlo aquí.

EDIT: Voy a poner literalmente lo que dice el libro, solo un cacho.

El registro de estado o Status indica el estado de la última operación aritmética o lógica realizada, la causa de reset y los bit de selección de banco para la memoria de datos. A los bit de registro de estado se les suele denominar flags o banderas. Al conectar la alimentación su contenido STATUS = b'00011xxx'

Z (Zero). Flag de cero. Se activa  a 1 cuando el resultado de una operación aritmética o lógica es 0.
- Z = 0. El resultado de la última operación ha sido distinto de cero.
- Z = 1. El resultado de la última operación ha sido cero.

Hay más como DC, C, /PD, TO, RP0, al menos en el 16F84A

Ojalá te ayude algo, menos mal que me compré el libro que me ayuda a empezar.
Título: Re: ¿Bandera? ¿falg?
Publicado por: Leon Pic en 13 de Febrero de 2008, 22:10:16
Por ejemplo podemos definir una variable para ver si tenemos caracteres en el buffer de recepción de un programa rs232 (cuando tenemos caracteres lo ponemos a "1" y cuando no hay lo ponemos a cero).

¿A qué le llamás variable? ¿A una pocición de memoria RAM que nosotro querramos, por ejemplo 0x25? Esta es justamente la parte que no entiendo o que se me hace lio.

Yo por ejemplo a este programa que tengo que migrar utilizé una pocición de la RAM para hacerme mi propio registro al que llamé "estado" (no confundir con el registro STATUS") como tiene un ancho de 8 bit, utilizo por ejemplo el bit 0 que me indique si no realizé dicha tarea, bit0 = 1 hacer la tarea pendiente bit0 = 0 la tarea está echa. ¿esto es una bandera?
Título: Re: ¿Bandera? ¿falg?
Publicado por: jfh900 en 13 de Febrero de 2008, 22:11:40
Efectivamente eso es una bandera.

Un saludo
Título: Re: ¿Bandera? ¿flag?
Publicado por: PalitroqueZ en 14 de Febrero de 2008, 20:11:50
añadiendo, se puede decir que una bandera es la unidad de información que ocupa menos espacio y sirve en diversos procesos (programas, uControladores, en la vida cotidiana, etc)



Título: Re: ¿Bandera? ¿flag?
Publicado por: Leon Pic en 14 de Febrero de 2008, 22:08:28
Que tonto. Mucho tiempo tratar de entender eso cuando ya lo estaba utilizando  :oops: :oops: :oops:

Muchas gracias a jfh900; Meta; PalitroqueZ y A redpic por corregir mi falta de ortografía en el título.
Título: Re: ¿Bandera? ¿flag?
Publicado por: RedPic en 15 de Febrero de 2008, 03:25:13
Eso nos pasa a muchos en muchos temas, ideamos un algoritmo para ordenar una matriz (arreglo) y después descubrimos que hace treinta años que se publicó y que se llama QuickSort y que está en Wikipedia con todo lujo de detalles.  :D :D :D

Lo de las faltas en el título solo las corrijo cuando puede ser normal que se use la palabra a corregir en el buscador, así facilito a los demás amigos el que puedan encontrar lo que buscan.  :mrgreen:
Título: Re: ¿Bandera? ¿flag?
Publicado por: PalitroqueZ en 15 de Febrero de 2008, 15:58:39
cuando empecé a estudiar la programación de los uC pic, me conseguí con la frase Flag, el traductor dice que es bandera, para el que está empezando y no tiene nociones de programación, esto no significa nada, ¿una bandera? ¿para que?, solo tiene significado dentro del CONTEXTO donde se utiliza, ese es uno de los problemas cuando se está leyendo un documento en un idioma no nativo.


Título: Re: ¿Bandera? ¿flag?
Publicado por: RedPic en 15 de Febrero de 2008, 17:24:43
A mi sin embargo, incluso al principio (allá por el paleolítico), me fue muy fácil el concepto de bandera (flag), tal y como se usa en programación como indicador de que algo ha ocurrido o algo tiene que ocurrir, ya que provengo del mundo náutico y en éste es muy habitual el usar banderas para indicar exactamente eso, eventos que ocurren o deben ocurrir, mensajes, etc. Al contrario o al margen del concepto diario de bandera que se usa para representar visualmente un conjunto, como una nación o grupo o club.  :mrgreen:

Título: Re: ¿Bandera? ¿flag?
Publicado por: Meta en 15 de Febrero de 2008, 20:22:37
Bueno, pues es un buen ejemplo para entender esta parte de la programación. No entiendo de aviones pero...

Código: ASM
  1. ¿Bandera alta? Sí.
  2. EL avión no sale.  <So bruto>
  3.  
  4. ¿Bandera Alta? No.
  5. El avión ya puede empezar a despegar.
Título: Re: ¿Bandera? ¿flag?
Publicado por: Meta en 16 de Febrero de 2008, 07:08:10
Aquí te habla algo de flags

http://r-luis.xbot.es/descarga/files/Int_Temp.pdf
Título: Re: ¿Bandera? ¿flag?
Publicado por: Leon Pic en 16 de Febrero de 2008, 14:37:18
Muy buen artículo META.

Justamente, la función de la bandera (flag en ingles), es la de mostrarnos sobre un cambio, por ejemplo la grabación de la EEPROM terminada o si creamos nosotros una bandera, nos indica un trabajo pendiente.

Cuando yo decía en mi primer post:

He estado buscando información por toda la red y me confundieron más. Uno me habla de una cosa, otro de otra.

Es porque justamente, uno me hablaba de las banderas que ya tiene el PIC implementado en los registro y otros me hablaban de variables. Y me confundían más. Y son las dos cosas.