# 68HC08

Der 68HC08 ist ein 8-Bit-Mikrocontroller (MCU) der Firma Freescale Semiconductor. Freescale Semiconductor ist die Halbleitersparte von Motorola, sie wurde 2004 ausgegliedert. Neben dem ursprünglichen 68HC08 Mikrocontroller sind weitere Varianten entstanden, sodass man inzwischen von einer HC08-Familie spricht.
Der Programmcode seiner Vorgänger der 68HC05-Familie ist aufwärtskompatibel zum HC08, was eine Migration erleichtert.

## Architektur

Der 68HC08 ist nach der Von-Neumann-Architektur aufgebaut. Bei der Von-Neumann-Architektur ist, anders als bei der Harvard-Architektur, der Speicherbereich nicht nach Programmcode und Daten getrennt. Es werden deshalb keine getrennten Busse benötigt, allerdings ist die Von-Neumann-Architektur langsamer im Vergleich zu Harvard-Architektur, da nicht gleichzeitig auf Programmcode und Daten zugegriffen werden kann.

## Die CPU

Der HC08 hat als Kern den 6800-Mikroprozessor (CPU), nicht zu verwechseln mit der 68000-CPU, die den Kern für die 32-Bit-Mikrocontroller-Familie von Freescale bildet.

### Arithmetikbefehle

* Addition mit (ADC) und ohne Übertrag (ADD)
* Subtraktion mit (SBC) und ohne Übertrag (SUB)
* schnelle 16×8 unsigned Division (DIV)
* schnelle 8×8 unsigned Multiplikation (MUL)

### BCD-Arithmetik

Um Binary-Coded-Decimal Arithmetikanwendungen auszuführen, gibt es den Decimal Adjust Accumulator(DAA) und den Nibble Swap Accumulator (NSA) -Befehl.

### Hochsprachenunterstützung

Das Index-Register, der Stack-Pointer, die 8-Bit Sprunganweisungen und die dazugehörenden Befehle ermöglichen die Benutzung von Hochsprachencompilern. Man ist nicht mehr gezwungen, den Mikrocontroller über Assemblersprache zu programmieren.

### Low-Power Unterstützung

Um die Leistungsaufnahme der CPU zu verringern, können der WAIT- und der STOP-Befehl eingesetzt werden. Mit dem WAIT-Befehl wird der Taktgenerator der CPU angehalten, mit dem STOP-Befehl können zusätzliche periphere Taktgeneratoren gestoppt werden.

## Die CPU-Register
### Index-Register

Das Index-Register ist 16 Bit breit und erlaubt die Adressierung von bis zu 64 KByte Speicher, das zusammengesetzte Register trägt die Bezeichnung H:X, wobei das untere Byte die Bezeichnung X trägt und das obere Byte die Bezeichnung H. Das H:X ist nur dann identisch zum I:X-Register der M6805-Familie, wenn H=O ist und sich keine Befehle auf das obere Byte auswirken. Für die Adressierung können 16 verschiedene Methoden verwendet werden. Das Index-Register kann auch kurzfristig als Datenspeicher verwendet werden.

### Statusregister CCR

Das 8 Bit Statusregister CCR. Im Statusregister sind die Zustände der Interrupt Maske und des Overflow-, Half-Carry-, Negative-, Zero- und des Carry-Borrow-Flags hinterlegt.

### Weitere CPU-Register

* 8-Bit Akkumulator A
* 16-Bit Befehlszähler PC
* 16-Bit Stack-Pointer SP

## Betriebsspannungen

Die HC08 Mikrocontroller können mit verschiedenen Betriebsspannungen betrieben werden, allerdings verringert sich mit der Spannung auch die Bustaktung. Bei einer Betriebsspannung von 5 V arbeitet der Bus mit einem Takt von 8 MHz, bei einer 3 V Betriebsspannung nur mit 4 MHz. Die Mikrocontroller der HCS08-Unterfamilie arbeiten mit einer Betriebsspannung von 1,8 V.

## Varianten des 68HC08

Mikrocontroller der HC08-Familie sind in einer breiten Palette verfügbar. Bei den Gehäusen reicht die Auswahl von einem 8-Pin DIP-Gehäuse bis zu einem 64-Pin LQFP-Gehäuse, der Nutzer kann daneben zwischen verschiedenen Typen und Anzahl der Analog/Digital-Wandler oder unterschiedlichen Möglichkeiten der Peripheriekommunikation auswählen. Die untenstehende Tabelle zeigt einige Eigenschaften von aktuell verfügbaren HC08-Untergruppen (Stand: September 2010).
| Untergruppe | Internal Flash (kB) | Internal RAM (kB) | Interfacetypen | A/D-Bitbreite | A/D-Wandler-Kanäle |
| HC08AB | 32 | 1; 0,512 | SCI, SPI | 8 | 8 |
| HC08AP | 32; 16; 8 | 2; 1 | IRSCI, SPI, I2C | 10 | 8 |
| HC08BD | 48 | 1; 0,512 | USB 1.0, I2C | 8 | 6 |
| HC08JB/JT/JW | 32; 16; 12; 8 | 1; 0,384; 0,256; 0,128 | USB 1.0, USB 2.0, SCI, SPI, IRSCI, SCI | 0 | 0 |
| HC08JK/JL | 16; 8; 4; 1,5 | 0,512; 0,256; 0,128 | SCI | 0 | 0 |
| HC08LD | 60 | 2; 1 | I2C, USB 1.0 | 8 | 6 |
| HC08LV | 8 | 0,512 | IRSCI, SPI, I2C | 10 | 6 |
Daneben gibt es die RS08-Familie, die im Prinzip auf einem abgespeckten HC08 beruhen. Die RS08-MCU können keine Adressstapel verarbeiten und das Statusregister verfügt lediglich über Carry- und Zeroflagbits. Sein Speicherbereich ist auf 16 kB begrenzt. Die bereits erwähnte Weiterentwicklung HCS08 hat ihren Schwerpunkt in einer geringen Leistungsaufnahme, so verfügt er über verschiedene Modi zur Verbrauchseinsparung.

## Verfügbarkeit

Von den Mikrocontrollern der HC08-Familie sind trotz ihres Alters immer noch viele Varianten verfügbar, da sie, vor allem, in industriellen Anwendungen kostengünstig eingesetzt werden können. Einige Varianten sind aber vonseiten des Herstellers bereits abgekündigt, und es wird davon abgeraten, diese Varianten in der Großserienproduktion zu verwenden.

## Hitachi HD6301

Hitachi verfügte mit den HD6301 und HD6303 über Mikrocontroller, die auf dem Design der 6800 CPU beruhten und als Second-source-Produkte eingesetzt werden konnten. Der Befehlssatz der Hitachi-Mikrocontroller ist um einige Befehle erweitert worden, was die Funktionalität vergrößerte. Inzwischen sind diese Mikrocontroller aber weder bei Hitachi noch bei der inzwischen ausgegliederten Halbleitersparte Renesas Electronics verfügbar.

## Nachfolger

Nachfolger ist der kompatible Freescale S08, der einen erweiterten Instruktionssatz, insbesondere die zur Implementierung von Hochsprachen wichtige Stapelzeiger-relative Adressierung aufweist. Daneben gibt es den stark vereinfachten Freescale RS08.

## Softwareentwicklung

Für die Softwareentwicklung steht neben der proprietären CodeWarrior IDE auch der Small Device C Compiler mit dem SDCC-UCSIM-Simulator zur Verfügung. Inzwischen ist mit dem Helium-OS auch ein Echtzeit-Betriebssystem für den HCS08 im Einsatz.