# 68HC11

La sigla 68HC11 identifica una famiglia di microcontrollori ad 8 bit introdotti da Motorola a partire dal 1985. Prodotto da Freescale, la sua CPU, ad architettura CISC, è un'evoluzione del Motorola 6800. Realizzato con la tecnologia High Speed C-MOS (HCMOS), è stato il primo microcontrollore ad incorporare un banco di EEPROM (dalla versione A8).
La produzione è iniziata con la versione A0 (MC68HC11A0), che poteva funzionare con un clock massimo di 2 MHz. Nel tempo sono state realizzate numerose versioni, con più o meno risorse, in termini di memoria e periferiche. Tutte le versioni attualmente in produzione tollerano una frequenza massima di clock di 3 MHz (tranne la versione F1, che arriva a 4 MHz), con un ciclo di bus di 333 ns minimo (250 ns per la versione F1).

## Caratteristiche generali
### CPU

Il suo set di istruzioni è compatibile in avanti con il 6800, con l'aggiunta del registro indice Y (le istruzioni che usano il registro Y hanno lo stesso codice operativo (opcode) del registro X, precedute dal byte 0x18). Dispone di 2 accumulatori ad 8 bit (registri A e B) che possono essere usati insieme come un accumulatore a 16 bit (registro D), due registri indice a 16 bit X e Y, un puntatore allo stack (SP), un registro di stato, condition code ad 8 bit (CCR) e il program counter. Può eseguire moltiplicazioni 8 x 8 bit (A x B), con 16-bit di risultato, divisioni frazionali e intere a 16 bit. Una parte di istruzioni a 16 bit utilizzano i registri A e B come un unico accumulatore a 16 bit (D) per le operazioni di confronto (in più, i registri X e Y possono essere confrontati anche con operandi a 16-bit in memoria), di addizione, di sottrazione e di spostamento, è inoltre possibile sommare l'accumulatore B ai registri indice X o Y. Sono state aggiunte operazioni di bit test and jump, eseguendo una funzione logica AND tra operandi, che modifica il condition code (CCR), ma lascia invariati gli operandi. L'architettura del 68HC11 supporta 5 modalità di indirizzamento delle istruzioni: immediato, diretto, esteso, indicizzato, inerente e relativo. Le istruzioni di Stop e Wait sospendono l'esecuzione del programma, forzando uno stato di basso consumo (low power-stand by), in attesa di reset o interrupt.

### Modi di funzionamento

Le diverse versioni del 68HC11 hanno un differente numero di porte esterne, etichettate in ordine alfabetico. La versione più comune ha cinque porte, A, B, C, D, ed E, ma alcune hanno un minimo di 3 porte (versione D3). Ogni porta è a 8 bit, tranne D, che è a 16 bit (in alcune varianti del chip, anche D è a 8 bit). Il 68HC11 può essere utilizzato con programma interno e RAM interna (da 1 a 768 byte) o una memoria esterna fino a 64 kilobyte. Con memoria esterna, B e C sono usate come bus indirizzi e dati. In questo modo, la porta C è multiplata per trasportare sia il byte inferiore del bus indirizzi che i dati. Le porte sono multifunzione, a seconda della modalità impostata. Le modalità configurabili sono 4:
* Single-chip
* Expanded-multiplexed
* Test
* Bootstrap
In modalità single-chip tutte le porte sono utilizzabili come linee di I/O e le risorse di memoria sono solo quelle interne. Nella modalità expanded-multiplexed le porte B e C assumono la funzione di bus dati/indirizzi per l'accesso a poco meno di 64 Kb di spazio esterno d'indirizzamento, altre due linee sono dedicate rispettivamente ai segnali di R/W (read/write) e AS (address strobe), quest'ultimo necessario per il multiplexing del bus dati con gli 8 bit più bassi del bus indirizzi, che condividono gli stessi pin. La modalità di test è utilizzata principalmente per scopo di test durante la produzione. La modalità di bootstrap è una variante di quella single-chip; al reset si attiva un particolare firmware che consente di caricare e avviare un programma nella Ram interna, tramite l'interfaccia seriale.

### Periferiche

Le periferiche integrate nel 68HC11 sono:
* SCI - Serial Communication Interface - asincrona, con un baud-rate impostabile da pochi baud fino a 250000 baud (versione F1).
* SPI - Serial Peripheral Interface - sincrona, con una frequenza massima di 2 MHz (versione F1).
* 16 bit System timer con 3 canali di input capture, 5 di output compare e un Pulse accumulator a 8 bit
* Circuito di Real-Time Interrupt
* Timer di COP (Computer Operating Properly) - watchdog
* Convertitore A/D a 8 bit e 8 ingressi multiplati
* 256 byte di RAM (768 nella versione E9)
* 512 byte di EEPROM (assente in alcune versioni)
* 8 Kb di ROM/EPROM (20 Kb nella versione E9, assente in alcune versioni)
* 38 linee di I/O general-purpose, di cui 15 bidirezionali, 11 solo in ingresso e 12 solo in uscita

### Interrupts

Il 68HC11 dispone di 18 vettori di interrupt e 3 di reset, questi ultimi generabili dal COP watchdog e dalla condizione di slow clock, oltre che dall'esterno; il reset generato da cause interne, viene forzato anche verso l'esterno.

### Buffalo

Dalla versione A8 è presente il firmware di un monitor (o bootloader), chiamato Buffalo (“Bit User Fast Friendly Aid to Logical Operation“ è il prompt visualizzato al suo avvio), che consente di effettuare il caricamento di programmi in Ram e il debug on-chip, tramite l'interfaccia seriale asincrona. Le sue caratteristiche sono:
* Caricamento del codice eseguibile in memoria, da porta SCI, nel formato s-record
* Avvio del codice eseguibile
* Inserimento e rimozione di breakpoints
* Esecuzione di singole istruzioni (single step)
* Ispezione e modifica di aree di memoria e registri interni
* Ispezione di parti di programma tramite un disassembler incorporato
* Scrittura o modifica di linee di programma, grazie ad un assembler incorporato.

## Applicazioni

Il 68HC11 è utilizzato per lettori di codici a barre, telefoni, macchine fotografiche, strumenti musicali, elettrodomestici, scrittori di Key Card, apparecchiature elettromedicali e di misura, robotica amatoriale, automotive e molti altri sistemi embedded. Con un ciclo macchina di 333 nSec (a 3 MHz di clock), è in grado di eseguire mezzo milione di istruzioni al secondo, consumando pochi mA. Non poche applicazioni complesse basate sul 68HC11, ricorrono alla tecnica di bank switching per aumentare la memoria programma indirizzabile.
Il suo progetto si è dimostrato talmente innovativo, da essere ancora prodotto ed utilizzato, dopo più di un quarto di secolo, il che lo colloca tra i microcontrollori più diffusi nel mondo.

## Fonti

* M68HC11 Reference Manual, su 68bits.com. URL consultato il 15 novembre 2018 (archiviato dall'url originale il 10 novembre 2017).