jueves, 3 de mayo de 2012

Instrucciones de microcontroladores clásicos

Esta entrada la había olvidado publicar, se que ahora es tiempo para Arduino :)


Instrucciones de microcontroladores clásicos


Clasificación de instrucciones

En la entrada pasada de procesadores digitales de señales, hable sobre los MCU que son los microcontroladores clásicos estos se diferencian de los DSP (Procesadores Digitales de Señales), en que los MCU ejecutan en varios ciclos instrucciones aritméticas complejas en varios ciclos mientras que los DSP hacen esto en una misma instrucción. Los DSP tiene conversores AD rápidos y precisos, además se pueden programar con lenguajes de alto nivel, como C. La velocidad y rendimiento de los DSP es muy superior que la de los MCU.

Los DSC (Controladores Digitales de señales), combinan las instrucciones típicas de los microcontroladores, llamadas instrucciones MCU, con las especializadas en resolver algoritmos matemáicos para el procesamiento de señales llamadas DSP.

Los DSC cuentan con 84 intrucciones, que se pueden agrupar en 10 categorías, y que se distinguen por las funciones que realizan:

  • Instrucciones de movimiento
  • Instrucciones lógicas
  • Instrucciones matemáticas
  • Instrucciones de rotación y mantenimiento
  • Instrucciones de bit
  • Instrucciones de comparación y brinco
  • Instrucciones de control de flujo de programa
  • Instrucciones de pila y registros sombra
  • Instrucciones de control
  • Intrucciones DSP


Las primaras son las intrucciones de los MCU mientras que la última son las instrucciones DSP de las que pienso hablar en otra entrada.

Instrucciones de movimiento

La instrucción MOV es una de las más usadas en la mayoría de los programas. En lenguaje ensamblador se editan las instrucciones. Explicaré las instrucciones más usadas.
Cuando se especifica el operando {,WREG}, el destino en las instrucciones es WREG (W0), pero si no se específica el operando destino, actúa como tal la dirección de la memoria de datos F.
Las instrucciones EXCH intercambia el contenido de los registros a los que afecta y se ejecuta en una sola instrucción.
La instrucción SWAP intercambia las dos mitades de la palabra de trabajo depositadas en Wn (es el parámetro de entrada), también ejecuta la instrucción en un solo ciclo.

Instrucciones lógicas

Estas instrucciones estan encargadas de hacer operaciones lógicas bit a bit entre los operandos fuente, depositando el operando en el destino. Incluye las operaciones AND, OR y EXOR.
La instruccion con el nemónico COM se refiere al complemento a 1 del operando fuente dejandolo en el destino.
NEG es el complemento a 2.
CLR borra o pone a 0 el operando al que afecta.
SETM pone a 1 los bits del operando sobre el que actúa. Todos esas operaciones se ejecutan en un solo ciclo.

Instrucciones matemáticas

Soporta las operaciones aritméticas principales como son la suma (ADD), la resta (SUB), la multiplicación (MUL) y la división (DIV).
Hay algunas variantes que además de la suma o resta permiten participar el acarreo o la llevada como ADDC y SUBB.
También hay instrucciones simples que incrementan o decrementan los operandos como INC y DEC.
DAW.B Hace un ajuste decimal del byte de menos peso del registro Wn, dando un resultado BCD.
SE Extiende el signo del byte que esta depositado en Ws y el resultado de 16 bits lo carga en Wnd.
ZE Extiende con 0 el byte de menos peso del registro de trabajo duente Ws y el resultado de 16 bits lo deposita en el destino Wnd.

Instrucciones de rotación y desplazamiento

Este grupo contiene las instrucciones que realizan el desplazamiento aritmético o lógico, a la derecha como a la izquierda, con un máximo de 15 posiciones.
La instrucción ASR Wb, Wns, Wnd produce un desplazamiento aritmético a la derecha del contenido del registro Wb un número de posiciones que esta determinado por los 4 bits de menos peso de Wns de máximo 15, depositando el resultado en el registro Wnd.
La rotación ala izquierda o a la derecha se pueden ejecutar a través del acarreo (RLC y RRC), o sin tener en cuenta el acarro (RLNC y RRNC).
Las instrucciones con nemónico LSR, produce un desplazamiento lógico a la derecha y SL hacia la izquiera, aquí el bit de más peso del operando fuente al desplazarse pasa a ocupar el bit señalizador de acarreo, escribiendo un cero en el bit de menor peso del operando.

Instrucciones de bit

Estas instrucciones hacen una operación sobre un bit concreto de una posición de la memoria de datos direccionada pro F, de un registro de trabajo Ws.
La instruccion BCLR Ws, #bit4 pone en 0 el bit de registro Ws que esta determinado por el valor del #bit4, que es un valor que esta comprendido entre 0 y 15.
La instruccion BCLR f, #bit4, pone en 0 el bit específicado por #bit4 en el contenido de la posición de memoria de datos con la dirección f.
Con el nemónico BSET pone a 1 el bir especificado.
BSW.C Ws, Wb escribe el valor de acarreo C en el bit de registro Ws que se especifíca por los 4 bits de menos peso del registro Wb.
BSW.Z Ws, Wb hace una operación muy parecida a la anterior solo que escribe el valor de señalización Z negado. Las operaciones con nemónico BTG invierte el valor del bit especificado en el operando.
BTST testea un bit de un registro Ws o de una posición de memoria F y lo guarda en el señalizador C cuando tienen la extensión .C, pero si es la extensión Z se carga en Z el valor del bit testado. Entre otras.

Instrucciones de comparación y brinco

Estas son instrucciones que comprueban una condición o que comparan un valor de un bit concreto y según su valor binario se brinca o no. El brinco consiste en un salto pequeño, se salta ala instrucción siguiente. Cuando no se cumple la condición impuesta al bit a comparar se ejecuta normalmente la siguiente instruccion.


Referencias

Angulo Usategui, José María, Susana Romero Yesa, and Ignacio Angulo Martínez. Microcontroladores PIC, Diseño práctico de aplicaciones 2da parte, McGraw-Hill, 2006.


1 comentario: