# Motorola 68HC11

La familia Motorola 68HC11 (abreviado HC11 o 6811) es una familia de microcontroladores de Motorola, derivada del microprocesador Motorola 6800. Los microcontroladores 68HC11 son más potentes y costosos que los de la familia 68HC05 y se utilizan en múltiples sistemas embebidos.
Siguen la Arquitectura de von Neumann, en la que la memoria de programa, de datos y de entrada/salida se direcciona en un único mapa de memoria.
Internamente, el conjunto de instrucciones de la familia 68HC11 es compatible con la del Motorola 6801 y el Motorola 6809, con el añadido de un registro Y (que puede ser empleado por las mismas instrucciones que el registro X). La familia 68HC11 emplea instrucciones de longitud variable y se considera que emplea una arquitectura CISC. Tienen dos acumuladores de ocho bits (A y B), cuenta con un acumulador virtual D, que no es más que la unión de A y B (16 bits), dos registros índice de 16 bits (X e Y), un registro de banderas, un puntero de pila y un contador de programa.
El microcontrolador Freescale 68HC12 es una versión mejorada de 16 bits del 68HC11.
El microcontrolador Freescale 68HC16 es una versión de 16 bits mayoritariamente compatible software del 68HC11.
El controlador robótico Handy Board de Fred Martin se basa en el 68HC11.
Los 68HC11 tienen cinco puertos externos (A, B, C, D y E), cada uno de ocho bits excepto el D, que es generalmente de seis bits.
El puerto A se emplea en captura de eventos, salida comparada, acumulador de pulsos y otras funciones de reloj; el puerto D para E/S serie y el puerto E como conversor analógico-digital.
La familia 68HC11 puede funcionar tanto con memoria interna o externa. En caso de emplear memoria externa, los puertos B y C funcionan como bus de datos y direcciones respectivamente.

## Puertas

Hay que decir que los puertos pueden funcionar como terminales de entrada-salida digital de propósito general. Sin embargo, se pueden configurar para que realicen una función específica, asociada a cada puerto. A continuación se detalla la función alternativa de cada puerto. (Los bits se numeran comenzando en el cero).
PUERTO A (Funciones de reloj y temporización).
Consta de 8 pines, los cuales tres son de entrada (bits 0-2), cuatro de salida (bits 3-6) y uno bidireccional (bit 7).
Bits 0-2: Capturadores de entrada. Cada vez que se produzca el evento programado en uno de estos tres pines, el contenido del registro TCNT se copia a otro registro TICx, donde x será 1,2 o 3, según el pin que tratemos. El evento a registrar se puede configurar y puede ser flanco de subida, de bajada o pulso a nivel alto.
Bits 3-6: Comparadores de salida. Se sirve de una serie de registros (denominados TOCx) en los cuales escribimos un valor numérico. Cuando este valor coincida con el del registro TCNT, se producirá un evento en el pin correspondiente del puerto. También es configurable y se puede programar para que conmute, cambie a nivel bajo, o cambie a nivel alto.
Bit 7: Comparador/Acumulador. Como se ha dicho, este pin es bidireccional, de forma que cuando se configura como salida toma funciones de comparador de salida, pero esta vez puede actuar también sobre los demás pines de salida (bits 3-6). Si se configura como entrada, funciona como un contador de pulsos. Mediante registros, puede programarse para que cuente cada vez que produzcan ciertos sucesos, como flanco de bajada, subida, nivel alto o nivel bajo.
PUERTOS B y C (Bus de expansión).
El 68HC11 dispone de un mapa de memoria constituido por las memorias que lleva internas. Sin embargo, de todo el rango de direcciones posibles, la mayor parte está desocupado. El microcontrolador se puede configurar en un modo especial (expanded) el cual usa los puertos B y C para direccionar todas las posiciones de memoria posibles (concretamente 16 bits de direcciones <-> 65535 posiciones).
El puerto B se usa para colocar los bits más significativos de las direcciones (Bits 8-15).
El puerto C tiene doble uso: bits menos significativos del bus de direcciones (0-7) y bus de datos (8 bits). Para ello, se emplea una señal denominada AS, que cuando se activa nos indica que el puerto C está poniendo una dirección válida. Después cambia, y coloca los bits de datos. Para poder hacer esto, hay que añadir un circuito externo, concretamente un registro de 8 bits con habilitación, para que capture la dirección cuando AS esté activa y la mantenga cuando se desactive. Normalmente suele ser el 74HC573.
PUERTO D (Comunicación serie).
Se pueden establecer protocolos de comunicación serie síncrona y asíncrona.
Puerto serie asíncrono (SCI). Existen dos dispositivos, donde la salida de uno se conecta con la entrada del otro, y viceversa. La señal de reloj tiene la misma frecuencia para los dos dispositivos, pero no es compartida por estos.
Bit 0 Recepción (Rx). Entrada de los bits de datos.
Bit 1 Transmisión (Tx). Salida para los bits de datos.
La comunicación serie asíncrona se suele emplear en sistemas que están distanciados varios metros. Debido a que el transmisor puede enviar bits en cualquier momento, es necesario el uso de un protocolo que permita conocer dónde está el comienzo de los datos y dónde su final (btis de comienzo, final...). La velocidad de transmisión es medida en Baudios (Baud), siendo normal un valor de 9600 Baudios. Todos estos parámetros son configurables por medio de registros en el 68HC11.
Puerto serie síncrono (SPI). En este tipo de comunicación hay un dispositivo que se comporta como maestro y uno o varios que están sujetos a éste y que se llaman esclavos. Se usa una señal de reloj que será la misma para todos los dispositivos. Se usan cuatro bits:
Bit 2 MISO (en inglés, entrada maestro-salida esclavo). Salida de datos desde un esclavo hacia la entrada del maestro.
Bit 3 MOSI (en inglés, salida maestro-entrada esclavo). Salida de datos desde el maestro hacia el/los esclavo/s.
Bit 4 SCK, señal de reloj.
Bit 5 /SS, permite seleccionar con qué esclavo desea comunicarse el maestro.
Esta comunicación es típica de periféricos que requieren de altas velocidades de transmisión, si bien estos sólo pueden separarse varios centímetros. Al ser la señal de reloj compartida, no es necesario añadir bits adicionales de comienzo o final, y la tasa de transferencia aumenta. La configuración del reloj, maestros, esclavos, etc. se hace mediante programación de registros.
PUERTO E (Conversión analógica-digital, CAD).
El 68HC11 consta de un convertidor analógico/digital, el cual recibe una tensión comprendida entre 0 y 5 voltios; y devuelve, por medio de registros internos, valores de 8 bits (del 0 al 255), que son proporcionales a la entrada. Estos valores pueden ser utilizados en el programa para hacer cálculos, por ejemplo.
Si el modelo de HC11 es de 52 pines, el puerto tendrá ocho entradas al convertidor, mientras que si es el modelo de 48, este puerto sólo tendrá cuatro entradas.
Existen varias formas de trabajar con el CAD. Una es realizar conversiones de: o bien los cuatro bits menos significativos del puerto (bits 0-3), o bien de los cuatro bits más significativos (bits 4-7). Otra forma es seleccionar un solo pin y trabajar con él.
Además, el CAD se puede configurar de forma que convierta una sola vez, o que realice conversiones continuas.