Autor Tema: ¿Cómo funcionan los señalizadores?  (Leído 6897 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado loren

  • PIC10
  • *
  • Mensajes: 24
¿Cómo funcionan los señalizadores?
« en: 30 de Mayo de 2006, 15:05:11 »
Hola, me gustaría saber como funcionan los señalizadores z,c, y dc. Aunque tengo una idea de como lo hacen quisera saber si hay algo por ahí, con ejemplos si es posible.
Gracias y saludos.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: ¿Cómo funcionan los señalizadores?
« Respuesta #1 en: 30 de Mayo de 2006, 19:20:33 »

bueno loren los señalizadores son los elementos mas utilizados para indagar los resultados en las operaciones aritmeticas  de  un programa.
el señalizador z es usada para indagar si la oparacion es 0 .
el carri se activa si la operacion es negativa o positiva.
5-4 la oparacion es positiva y el carri es 1
4-5 la oparacion es negativa y el carri es 0
cuando hay un conteo de mas de 255 el carris se activa

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: ¿Cómo funcionan los señalizadores?
« Respuesta #2 en: 30 de Mayo de 2006, 20:59:14 »
Hola loren, como ha mencionado el amigo microcom los señalizadores sirven para verificar el resultado de las operaciones aritmeticas que suceden dentro del programa principal. Las instrucciones que afectan a estos bits del registro STATUS especificamente no tiene que ser aquellas que realicen una operacion aritmetica.

La imagen que pongo es la de Set de instrucciones allí aparecen las instrucciones y los bits que se afectan en el registro STATUS al usar estas (estan marcadas de amarillo).

Las instrucciones que afectan al bit C del registro STATUS son las siguentes:

ADDWF, ADDLW, SUBLW, SUBWF

Las que afectan el bit DC del registro STATUS son exactamente las mismas.

Saludos LabPIC  :mrgreen:
¡¡¡Viva México cabrones!!!

Desconectado loren

  • PIC10
  • *
  • Mensajes: 24
Re: ¿Cómo funcionan los señalizadores?
« Respuesta #3 en: 04 de Junio de 2006, 17:54:34 »
Me podrias poner algún ejemplo de instrucción para el señalizador Z, que es el que me interesa saber utilizar, ya que quiero hacer un archivo que solamente cuando introduzca por la puerta A un número en binario y coincide con el acordado se pueda encender un led.
Gracias y saludos.

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: ¿Cómo funcionan los señalizadores?
« Respuesta #4 en: 04 de Junio de 2006, 18:20:16 »
una manera de realizar esto es lo siguiente:

Esto es simplemente un ejemplo

PREGUNTAR     btfss     STATUS,Z;¿es 0 o no la operacion aritmetica?
                    goto      PREGUNTAR;Si no es 0 el resultado de la operacion regresa a preguntar
                    movlw    b'00000001';si es 0 entonces prende un bit del puerto B
                    movwf    PORTB;

Claro que este es simplemente una parte que llevaría el programa y como mencione mas arriba esto es un simple ejemplo. Espero y te sea de ayuda. :)

Saludos LabPIC
« Última modificación: 04 de Junio de 2006, 18:38:37 por LabPIC »
¡¡¡Viva México cabrones!!!

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: ¿Cómo funcionan los señalizadores?
« Respuesta #5 en: 04 de Junio de 2006, 18:55:11 »
De igual manera puedes hacer lo siguiente

PREGUNTAR     btfsc     STATUS,Z;
                    call        ENC_LED; si es 0 la operación aritmetica llama rutina de encerder LED
                    goto       PREGUNTAR; si no es 0 el resultado de la operacion aritmetica, PREGUNTAR

ENC_LED        movlw     b'00000001';
                    movwf     PORTB;

Saludos LabPIC  :mrgreen:
¡¡¡Viva México cabrones!!!

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: ¿Cómo funcionan los señalizadores?
« Respuesta #6 en: 07 de Junio de 2006, 20:33:20 »


   ee      movf  porta,0
            xorlw   b'0000'
            btfsc   status,z
            goto    ee
           bsf    portb,0      ;si el puertoa cambia de estado en cualquier pin se debe
                                   ;encender un led en rb0
           

Desconectado loren

  • PIC10
  • *
  • Mensajes: 24
Re: ¿Cómo funcionan los señalizadores?
« Respuesta #7 en: 10 de Junio de 2006, 07:24:25 »
Hola, tengo claro, como se activan los señalizadores, pero ahora quiero saber cuándo se desactivan, si lo hacen de una mera automática o hay que hacerlo manual, ya que veo que cuando hay un retorno de subrutina se bajan automaticamente.
Gracias y saludos.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: ¿Cómo funcionan los señalizadores?
« Respuesta #8 en: 10 de Junio de 2006, 10:12:09 »
Hola, tengo claro, como se activan los señalizadores, pero ahora quiero saber cuándo se desactivan, si lo hacen de una mera automática o hay que hacerlo manual, ya que veo que cuando hay un retorno de subrutina se bajan automaticamente.
Gracias y saludos.

Se hacen manualmente.  Un retorno de subrutina no habilita los flags o señalizadores automáticamente.

En el código de una subrutina lo que se suele hacer es dos cosas, guardar el contexto (STATUS, WREG, PCLATH, FSR ) al ingresar a la subrutina y restaurarlo al salir.  (Un vector de interrupción es también una subrutina y por eso se hace lo mismo). 

Si los flags estaban 'bajos' antes de ingresar a la subrutina, pues seguirán estandolo al salir de ella.  Al menos es así si uno programa de cierta forma organizada. 

Si posteas un código de ejemplo donde quieras analizar su funcionamiento te invito a que lo hagas.

Saludos



- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado loren

  • PIC10
  • *
  • Mensajes: 24
Re: ¿Cómo funcionan los señalizadores?
« Respuesta #9 en: 13 de Junio de 2006, 14:41:47 »
Hola, cuando un señalizador se activa por acarreo, cuando hago un retorno con retlw, automaticamente veo que se vuelve a bajar, y se vuelve a cero. Una cosita, cuando la orden sublw, ¿El acarreo que se produce cuando pasa de cero a FF? Yo estoy utilizando un 16f84a, con la orden addlw el bit C se activa al pasar de FF a 00.
Gracias y saludos.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: ¿Cómo funcionan los señalizadores?
« Respuesta #10 en: 13 de Junio de 2006, 15:18:28 »
Hola.
La instruccion RETLW NO AFECTA NINGUN FLAG. Busca el datasheet del pic que estes usando, y fijate en la seccion Instruction Set Summary que veras cada instruccion detallada.

En el caso de la SUBLW o SUBWF:
El flag Z se pone en alto si la resta da como resultado cero.Si no se pone en bajo.
El flag C se pone en alto si la resta da mayor o igual a cero. Si no se pone en bajo.

En el caso de la ADDLW o ADDWF:
El flag Z se pone en alto si la suma da como resultado cero.Si no se pone en bajo.
El flag C se pone en alto si la suma da mayor a 0xFF. Si no se pone en bajo.

Saludos.
« Última modificación: 13 de Junio de 2006, 15:20:48 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado loren

  • PIC10
  • *
  • Mensajes: 24
Re: ¿Cómo funcionan los señalizadores?
« Respuesta #11 en: 14 de Junio de 2006, 17:05:42 »
Hola, ya he hecho dos o tres programas utilizando los señalizadores y ya tengo claro de como funcionan y que registros les afecta, pero veo que los señalizadores también se baja automaticamente:

   movf    PUERTAA,W   
   addlw   b'11110110'

al ser el valor de A en la primera instrucción cero el señalizador Z se activa, y en el momento de ejecutar la segunda instrucción automaticamente el señalizador Z vuelve a cero, lo estoy simulando con el Mplab. A esto es a lo que me refería al no ser el valor de W cero, automáticamente se vuelve a bajar el señalizador, por lo que según veo cuando deja de ser cero o uno, los señalizadores se bajan automaticamente.
Gracias y saludos.

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: ¿Cómo funcionan los señalizadores?
« Respuesta #12 en: 14 de Junio de 2006, 18:20:11 »
Hola loren un saludo, solo para comentarte que de igual manera yo no limpio las banderas que se activan cuando sucede un evento que solicita interrupcion, a consideracion de las que especificamente el data sheet dice que debe de ser limpiado por software, y pues los programas que he realizado no he tenido algun problema.

Saludos LabPIC
¡¡¡Viva México cabrones!!!

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: ¿Cómo funcionan los señalizadores?
« Respuesta #13 en: 15 de Junio de 2006, 08:59:47 »
Otra pistita:

movf PRUEBA,W ; Si la variable PRUEBA contiene 00h el simple hecho de moverla al acumulador te pondrá el flag Z a 1
btfss STATUS,Z
goto no_es_00
goto es_00
« Última modificación: 15 de Junio de 2006, 09:02:16 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"


 

anything