16 Ago

Microcontrolador

Un microcontrolador es un sistema cerrado, lo que quiere decir que en un solo circuito integrado se encierra un sistema digital programable completo. Se destina a gobernar una sola tarea que no se puede modificar y disponen de CPU, memoria de datos y de programa, reloj, periféricos de entrada/salida, etc.

Arquitectura Interna del PIC16F84A

  • Memoria de programa tipo ROM Flash
  • Memoria de datos dividida en 2 áreas (RAM y EEPROM)
  • ALU de 8 bits y registro de trabajo W
  • Dos puertos para la comunicación con el exterior: PORTA de 5 bits y PORTB de 8 bits
  • Contador de programa de 13 bits, permitiendo teóricamente direccionar 4k de palabras de memoria
  • Arquitectura Harvard
  • Procesador segmentado y tipo RISC
  • Formato de las instrucciones ortogonal
  • Arquitectura basada en bancos de registros

Organización de la Memoria

Memoria de Programa

Contiene el programa con las instrucciones que gobiernan la aplicación. Es del tipo no volátil, es decir, que se mantiene aunque desaparezca la alimentación.

Memoria de Datos RAM

Guarda las variables y los datos. Es volátil, por lo que los datos son borrados al desaparecer la alimentación.

Memoria EEPROM

Área de memoria de datos y escritura no volátil, por lo que la información estará disponible al reinicializarse el programa. Realiza operaciones de lectura y de escritura o grabación.

El Contador de Programa

Es un registro interno que se utiliza para direccionar las instrucciones del programa de control que están almacenadas en la memoria de programa. Este registro contiene la próxima instrucción a ejecutar y se incrementa automáticamente de manera que la secuencia natural de ejecución del programa es lineal.

Memoria de Datos

La memoria RAM está dividida en dos partes:

  • Registros de Funciones Especiales (SFR): son los primeros registros, cada uno cumple un propósito especial en el control del microcontrolador.
  • Registros de Propósito General (GPR): son registros de uso general que se pueden usar para guardar los datos temporales del programa que se esté ejecutando.

La memoria de datos cuenta con dos bancos de memoria, banco 0 y banco 1:

  • Los registros del SFR están agrupados entre las direcciones 00h a 0Bh para el banco 0 y entre 80h hasta 8Bh para el banco 1.
  • Los registros del GPR está formado por 68 posiciones del banco 0, ya que las del banco 1 se mapean sobre el banco 0.

Registros Relacionados con los Puertos

PORTA

En posición 05h del banco 0. Puerto de entrada y salida de 5 bits (RA4:RA0). Puede leerse o escribirse como un registro cualquiera. El sentido de sus pines es controlado por el registro TRISA.

PORTB

En posición 06h del banco 0. Puerto de entrada y salida de 8 bits (RB7:RB0). Puede leerse o escribirse como un registro cualquiera. El sentido de sus pines es controlado por TRISB.

TRISA

Posición 85h del banco 1. Registro de configuración de líneas del puerto A. Un 0 en el pin lo configura como salida, y un 1 como entrada.

TRISB

Posición 86h. Registro de configuración de las líneas del puerto B. Un 0 en el pin lo configura como salida, y un 1 como entrada.

Registro de Trabajo W

Es el registro principal y participa en la mayoría de las instrucciones. Se localiza dentro de la CPU.

Registro de Estado o STATUS

Ocupa la posición 03h del banco 0 o la 83h del banco 1 y es uno de los registros más importantes. Los bits de este registro indican el estado de la última operación aritmética o lógica, la causa de reset y los bits de selección de banco 0 para la memoria de datos. A los bits del registro de estado se les llama flags o banderas.

Lenguaje Máquina

Es el único lenguaje que entienden los microcontroladores y está formado por ceros y unos del sistema binario.

Lenguaje Ensamblador

Debido a la dificultad de uso del lenguaje máquina, se usa el lenguaje ensamblador, que usa nemónicos que son grupos de caracteres alfanuméricos que simbolizan las órdenes y tareas a realizar con cada instrucción.

Programa Ensamblador

Es un software que se encarga de traducir los nemónicos y alfanuméricos del programa escrito en ensamblador por el usuario a código máquina, para ser ejecutado por el microcontrolador.

Código de Operación

Es la segunda columna, que especifica la tarea a realizar por el microcontrolador. Suele ser una instrucción del microcontrolador que es directamente traducida a código máquina por el ensamblador.

Operandos

Es la tercera columna y contiene los operandos para el campo de instrucciones. Puede contener uno o más operandos separados por comas, y dependiendo de la instrucción son números o etiquetas que representan constantes o direcciones.

Directivas del Ensamblador

EQU

Es una directiva de asignación. Las asignaciones con EQU van al principio del programa.

ORG

Esta directiva indica al programa ensamblador la dirección en memoria a partir de la cual deben ensamblarse las instrucciones del código fuente. Es decir, la dirección de la memoria de programa donde se van a almacenar esas instrucciones es la fijada por la expresión de la directiva.

CONFIG

Esta directiva indica la configuración elegida para el proceso de grabación del microcontrolador. En este caso no hay protección de código, no se habilita el perro guardián, se habilita el reset por Power-Up y se utiliza el oscilador por cristal de cuarzo.

Ciclo Máquina

Es la unidad básica de tiempo que utiliza el microcontrolador. Para el PIC16F84 equivale a 4 ciclos de reloj, por lo tanto, el tiempo que tarda en producirse un ciclo máquina es igual a cuatro veces el periodo del oscilador. Las instrucciones necesitan un ciclo máquina para ejecutarse, excepto las de salto que necesitan dos.

Retardos

Muchas veces con microcontroladores es necesario generar tiempos de espera, llamados retardos. Pueden conseguirse mediante una subrutina de retardo, basada en la repetición de instrucciones tantas veces como sea necesario. Como el tiempo de ejecución de cada instrucción es conocido, lo único que hay que hacer es calcular el valor inicial del registro R_ContA. Para ello se usa la fórmula T=4xToscxPrescx(256-Vtmr0).

Reset

Provoca la reinicialización del funcionamiento, comenzando desde cero. En este estado, la mayoría de los dispositivos internos del microcontrolador toman un estado conocido. En los microcontroladores es necesario un pin de reset para reiniciar el sistema, denominado Master Clear, reseteado al aplicársele un nivel lógico bajo.

Call y Return

  • La instrucción call provoca que la ejecución se transfiera a la subrutina.
  • La instrucción return provoca el retorno al programa principal, debiendo recordar la localización de la instrucción que sigue al call.

Subrutinas

Es un conjunto de instrucciones al que se tiene acceso desde cualquier punto del programa principal. Es un subprograma al que recurre el principal cuando lo necesita. Presentan ventajas como dar al programa carácter modular, reducir el tiempo de programación y la detección de errores, código más fácil de interpretar. Incluso es frecuente necesitar más de una subrutina, disponiendo así de bibliotecas de subrutinas llamadas librerías.

Instrucciones de Suma

  • addlw k: Suma el contenido del registro W con el literal k. Almacena el resultado en W. Si se produce acarreo, el flag C se pone a 1.
  • addwf f,d: Suma el contenido del registro W al contenido del registro f. Almacena el resultado en W si d=0 y en el registro f si d=1. Si se produce acarreo, el flag C se pone a 1.

Instrucciones de Resta

  • sublw k: Resta en complemento a 2 el contenido de la constante k menos el contenido del registro W y almacena el resultado en W.
  • subwf f,d: Resta en complemento a 2 el contenido del registro f menos el contenido del registro W. Almacena el resultado en W si d=0 y en f si d=1.

Incrementar y Decrementar

  • decf f,d: El contenido del registro f se decrementa en una unidad. Almacena el resultado en W si d=0 y en el registro f si d=1. El flag Z se activa a 1 si el resultado de la operación es 0.
  • incf f,d: El contenido del registro f se incrementa en una unidad. Almacena el resultado en W si d=0 y en el registro f si d=1. El flag Z se activa a 1 si el resultado de la operación es 0.

Instrucciones Lógicas

  • andlw k: Efectúa la operación AND lógica entre el contenido del registro W y la constante k. Almacena el resultado en W. El flag Z se activa a 1 si el resultado de la operación es 0.
  • andwf f,d: Efectúa la operación AND lógica entre el contenido del registro W y el contenido del registro f. Almacena el resultado en W si d=0 y en el registro f si d=1. El flag Z se activa a 1 si el resultado de la operación es 0.
  • swapf f,d: Los cuatro bits de más peso del registro f se intercambian con los 4 bits de menos peso del mismo registro f. Si d=0, el resultado se almacena en W, y si es d=1, en f.
  • xorlw k: Realiza la función OR exclusiva entre el contenido del registro W y la constante k de 8 bits. El resultado se almacena en W, y el flag Z se activa a 1 si el resultado de la operación es 0.
  • xorwf f,d: Realiza la función OR exclusiva entre el contenido del registro W y el contenido del registro f. Almacena el resultado en f si d=1 y en W si d=0. El flag Z se activa a 1 si el resultado de la operación es 0.

Sleep

Para ahorrar energía, los PIC disponen de la instrucción sleep que les pasa al estado de reposo o bajo consumo. Se detiene el reloj principal y se congelan sus circuitos asociados.

Instrucciones de Salto Condicional

  • btfsc f,b: Esta instrucción puede actuar de dos formas: Si el bit número b del registro f es 1, la instrucción que sigue a ésta se ejecuta normalmente; Si el bit número b del registro f es 0, la instrucción que sigue a ésta se ignora y se salta.
  • btfss f,b: Esta instrucción actúa de forma contraria a la anterior: Si el bit número b del registro f es 0, la instrucción que sigue a ésta se ejecuta normalmente; Si el bit número b del registro f es 1, la instrucción que sigue a ésta se ignora y se salta.

Lazos o Bucles

Fragmentos de programa que se repiten un número finito o infinito de veces.

Bucle Infinito

Es un salto incondicional a una posición anterior del programa, conformando un lazo de repetición infinita.

La Pila

Es una zona de memoria que se encuentra separada tanto de la memoria de programa como de la de datos dentro del microcontrolador. Su estructura es del tipo LIFO, por lo que el último dato que se guarda es el primero que sale.

Programación Estructurada

División del programa principal en módulos o procedimientos que realizan una determinada tarea dentro del programa y que se ejecutan uno detrás de otro, de forma lineal y con una cantidad mínima de saltos.

El Timer0

Un timer se implementa por medio de un contador que determina un tiempo preciso entre el momento en que el valor es cargado y el instante en que se produce su desbordamiento.

  • Como contador: su misión es contar el número de acontecimientos externos representados por los impulsos.
  • Como temporizador: se usa para determinar intervalos de tiempo concretos. Estos impulsos tienen una duración de un ciclo máquina.

Divisor de Frecuencia (Prescaler)

A veces es necesario controlar tiempos largos y aumentar la duración de los impulsos que incrementan el TMR0. Para ello se usa el Prescaler, un circuito programable que divide la frecuencia utilizada. El PIC dispone de dos temporizadores, el Timer0 (principal) y el Watchdog que vigila que no se cuelgue el programa.

Registros Asociados al Timer0

INTCON

Es un registro localizado en la dirección 0BH del banco 0 y duplicado en la 8Bh del banco 1.

OPTION

Registro que gobierna el comportamiento del Timer0.

Watchdog

Es un temporizador de 8 bits cuyo objetivo es generar un reset general cuando se desborda su cuenta. Su control de tiempo es independiente del oscilador principal del microcontrolador y se basa en una red RC interna que fija un periodo de oscilación de 18 ms. Este periodo puede ampliarse haciendo uso del Prescaler.

Polling

Técnica utilizada para la lectura de entradas al microcontrolador que comprueba cíclicamente el estado de las entradas correspondientes.

Interrupciones

Es un mecanismo por el cual un evento puede interrumpir la ejecución de un programa en cualquier momento. A partir de entonces se produce un salto a una subrutina de atención a la interrupción que atiende inmediatamente el evento y retoma la ejecución del programa. Para producir una interrupción con el Timer0, deben estar los bits TOIE y GIE del registro INTCON a 1.

Deja un comentario