Portada » Informática » Introducción a la Arquitectura de Microcontroladores PIC
Un programa es un conjunto de instrucciones u órdenes que indica al microcomputador qué debe realizar instante por instante.
Una instrucción es una orden que indica a la máquina qué debe realizar. Esta instrucción está dividida en dos partes:
Los microcomputadores basados en microprocesador constan fundamentalmente de las siguientes partes:
Es el cerebro del microcomputador, donde se realizan todas las operaciones aritméticas, lógicas y de traslado de información, además de controlar el sistema mediante un programa.
Puede estar compuesta por memorias RAM, ROM, PROM, EPROM, etc., o por combinaciones de estos dispositivos. Su función fundamental es almacenar el programa y los datos con los que trabaja el microcomputador.
Son elementos que permiten al usuario ingresar datos al computador, como por ejemplo el teclado.
Son dispositivos o equipos que permiten sacar los datos desde el computador hacia el usuario, como por ejemplo el monitor.
Son circuitos que permiten conectar los dispositivos periféricos con el microprocesador y/o memoria principal. Estos dispositivos contienen por lo menos compuertas de Tri-estados y registros.
Son líneas paralelas o conexiones eléctricas comunes que permiten unir a la CPU con algún otro dispositivo.
Permite transportar la palabra de datos con la que se está trabajando (normalmente son múltiplos de 8, es decir, 8; 16; 32; etc.) y permiten comunicar a la CPU con la memoria principal y/o interfaz. Estas líneas son bidireccionales, es decir, pueden ingresar o sacar datos con la CPU.
Estas líneas permiten seleccionar una celda dentro de la memoria principal y también se utiliza para seleccionar algún registro dentro de la interfaz de entrada o salida. La dirección es principalmente controlada por la CPU, por tanto estas líneas son solamente de entrada para los dispositivos externos a la CPU.
Estas líneas permiten controlar al microcomputador, por ejemplo, está la línea que permite llevar los voltajes de alimentación; las señales de interrupción y arranque del microcomputador.
Las funciones básicas de un microcomputador basado en microprocesador son:
Esto es, poder guardar durante algún tiempo los datos que serán ocupados. Esta función requiere a su vez de un almacenamiento de los datos, el cual consiste en tomar el dato y desplazarlo a través de los buses de datos (ya sean internos o externos del microprocesador) hacia la memoria donde se almacenará temporalmente.
Esto implica la realización de las operaciones lógicas, aritméticas o de desplazamiento con los datos, de acuerdo a la instrucción requerida por el usuario. Para ello, el dato recibido desde la memoria ingresará al decodificador de instrucción inicialmente y dependiendo de su valor binario (también denominado código de instrucción) entregará a la unidad de control.
El resultado de los datos es enviado mediante la interfaz de salida hacia los dispositivos periféricos a través de los buses de datos. En este caso, el bus de dirección solo es utilizado como parte del circuito de control interno del microcomputador para seleccionar la interfaz adecuada.
La arquitectura tradicional de computadoras y microprocesadores se basa en el esquema propuesto por John Von Neumann, en el cual la unidad central de proceso, o CPU, está conectada a una memoria única que contiene las instrucciones del programa y los datos. El tamaño de los datos o instrucciones está fijado por el ancho del bus de la memoria o bus de datos. Es decir que un microprocesador de 8 bits, que tiene además un bus de datos de 8 bits que lo conecta con la memoria, deberá manejar datos e instrucciones de una o más unidades de 8 bits (bytes) de longitud.
La arquitectura conocida como Harvard, consiste simplemente en un esquema en el que el CPU está conectado a dos memorias por intermedio de dos buses separados. Una de las memorias contiene solamente las instrucciones del programa, y es llamada Memoria de Programa. La otra memoria solo almacena los datos y es llamada Memoria de Datos.
Deben poseer instrucciones especiales para acceder a tablas de valores constantes que pueda ser necesario incluir en los programas, ya que estas tablas se encontrarán físicamente en la memoria de programa (por ejemplo en la EPROM de un microprocesador).
Los microcontroladores contienen básicamente todos los elementos requeridos por un microcomputador en un solo circuito integrado, esto es, además de una unidad procesadora contienen memoria (que pueden ser RAM, EPROM o una combinación de ambas), poseen interfaces de entrada y/o salida, etc.
Los microcontroladores PIC 16xxx están compuestos de una arquitectura tipo Harvard y al registro acumulador se les llama registro de trabajo o simplemente registro w.
La gran ventaja que presentan estos microcontroladores, obedece a su bajo costo y gran facilidad de implementación, sin embargo, el hecho de tener todo integrado en un mismo Chip restringe la cantidad de información a ingresar, la longitud del programa y el número de instrucciones que pueda tener definido cada microcontrolador, por tal motivo, su utilización se da en el ámbito de controlar procesos muy específicos y acotados.
Como se mencionó, la memoria interna se divide en dos grandes grupos llamado Memoria de programa y Memoria de datos.
La arquitectura de los PIC de gama media, permite contener hasta 8.192 instrucciones de 14 bits cada una dividida en páginas de 2.048 posiciones cada una. Para direccionar 8K posiciones, se necesitan 13 bits que ocupa el registro contador de programa PC. Para el caso del PIC 16F84 o similar, tiene solo 1K de direcciones (desde la dirección 0000h hasta la dirección 03FFh), luego, las tres posiciones de más valor del registro PC se ignoran. La primera dirección corresponde al vector de interrupción Reset y representa un direccionamiento indirecto, por tanto, esta posición de memoria debe contener la dirección de inicio del programa de aplicación. La dirección 04h contiene también un vector de interrupción, por tanto, es ideal que la dirección de inicio del programa de aplicación comience en la dirección 05h.
La memoria de datos, también llamada archivo de registros (register file), está dividida en dos grupos: los registros especiales, y los registros de propósito general. Los primeros ocupan las primeras posiciones y los segundos las posiciones que siguen. Entre los registros especiales se encuentran el registro de estado (STATUS); los registros Tri-estado de los puertos de entrada / salida; los Puertos de E/S como el puerto A, Puerto B, Puerto C, etc.), los 8 bits menos significativos del program counter (PC), el contador de tiempo real o Real Time Clock/Counter (RTCC) y un registro puntero llamado File Select Register (FSR). La posición 00 no contiene ningún registro en especial y es utilizada en el mecanismo de direccionamiento indirecto.
Este registro, normalmente denominado PC, es totalmente equivalente al de todos los microprocesadores y contiene la dirección de la próxima instrucción a ejecutar. Se incrementa automáticamente al ejecutar cada instrucción, de manera que la secuencia natural de ejecución del programa es lineal, una instrucción después de la otra. Algunas instrucciones que llamaremos de control, cambian el contenido del PC alterando la secuencia lineal de ejecución. Dentro de estas instrucciones se encuentran el GOTO y el CALL que permiten cargar en forma directa un valor constante en el PC haciendo que el programa salte a cualquier posición de la memoria.
En los microcontroladores PIC el stack es una memoria interna dedicada, de tamaño limitado, separada de las memorias de datos y de programa, inaccesible al programador, y organizada en forma de pila, que es utilizada solamente, y en forma automática, para guardar las direcciones de retorno de subrutinas e interrupciones. Cada posición es del tamaño adecuado para guardar una copia completa del PC. Como en toda memoria tipo pila, los datos son accedidos de manera tal que el primero que entra es el último que sale.
La palabra de estado del procesador contiene los tres bits de estado de la ALU (C, DC y Z), y otros bits que por comodidad se incluyeron en este registro.
Indica acarreo del bit más significativo (bit 7) del resultado de la última operación de suma. En el caso de la resta se comporta a la inversa, C resulta 1 si no hubo pedido de préstamo. El bit C es usado además en las operaciones de rotación derecha o izquierda como un paso intermedio entre el bit 0 y el bit 7.
(Digit Carry) Indica acarreo del cuarto bit (bit 3) del resultado de la última operación de suma o resta, con un comportamiento análogo al del bit C, y es útil para operar en BCD (para sumar o restar números en código BCD empaquetado).
Indica que el resultado de la última operación fue CERO.
(POWER DOWN) o bit de bajo consumo, sirve para detectar si la alimentación fue apagada y encendida nuevamente, tiene que ver con la secuencia de inicialización, el watch dog timer y la instrucción sleep que coloca en cero el bit. 1 = Funcionamiento normal 0 = Función en modo Bajo consumo
(TIME-OUT) sirve para detectar si una condición de reset fue producida por el watch dog timer, está relacionado con los mismos elementos que el bit anterior y Se coloca en 0 cuando el circuito de vigilancia Watch dog finaliza la temporización.
Es un selector de página por direccionamiento directo (OPCODE) y se utilizan en las instrucciones de salto directo como GOTO y CALL:
En realidad en el 16C54 estos bits no se usan y sirven para propósitos generales. En el 16C57 el PA0 si se usa pero los otros dos no. En el 16C55 se utilizan PA0 y PA1. PA2 está reservado para uso futuro y solamente RP0 se utiliza en el PIC 16F84. RP1 se puede utilizar como un bit de propósito general.
Es un selector de página para direccionamiento indirecto (FSR). Sí IRP = 0 indica Activo el banco 00 ó el banco 01. Sí IRP = 1 indica activo el banco 10 ó el 11. Este bit no se utiliza efectivamente en el PIC 16F84, por lo que también se puede utilizar como un bit de propósito general.
Los microcontroladores PIC 16C5X, 16CXX y 17CXX poseen arquitectura Harvard, con una memoria de datos de 8 bits, y una memoria de programa que, según el modelo, puede ser de 12 bits para los 16C5X.