Freescale 68HC08
68HC08 (Motorola 68HC08, M68HC08) je rodina 8bitových mikrokontrolérů původně firmy Motorola, nyní produkované firmou Freescale Semiconductor.
Řada 68HC08 osmibitových mikrokontrolérů je pokročilou modifikací řady 68HC05 na bázi mikroprocesoru Motorola 6800 (je kompatibilní na bázi zdrojového kódu - směrem vzhůru). Procesory mají von Neumanovu architekturu, instrukční sadu typu CISC a patří do skupiny tzv. big-endian. Vyrábí je mnoho výrobců. Typické využití nalézají v nenáročných vestavěných systémech.
Charakteristika
[editovat | editovat zdroj]Periferie jsou mapovány do paměťového prostoru. Procesor obsahuje minimum registrů (A
, HX
, SP
, PC
a CCR
) a vyznačuje se rychlým (jednocyklovým) přístupem do paměti jedním ze 16 adresovacích módů.
Programovací model
[editovat | editovat zdroj]- 8bitový střadač
A
- 16bitový index-registr
HX
(tvořen spojením dvou 8bitových registrůH
aX
) - 16bitový ukazatel zásobníku
SP
- 16bitový programový čítač
PC
- 8bitový stavový registr s příznaky
CCR
Protože programový čítač je 16bitový, může CPU adresovat 64 KB paměťového prostoru s následujícími segmenty:
- blok periferních a řídících registrů od adresy
$0000
do adresy$003F
(64 bajtů) - paměť RWM-RAM od adresy
$0040
do adresy$023F
(512 bajtů) - pro data - paměť FLASH od adresy
$8000
do adresy$FDFF
(32 KB) - ROM, pro program - monitor ROM od adresy
$FE20
do adresy$FF52
(307 bajtů) - blok vektorů přerušení od adresy
$FFDC
do adresy$FFFF
(36 bajtů)
Pozn.: Tato mapa paměti je pro mikrokontrolér HC908GP32, u jiných modelů se může mírně lišit.
Instrukční sada
[editovat | editovat zdroj]Každá strojová instrukce má svůj opkód o velikosti jednoho bajtu. U většiny instrukcí za operačním kódem následuje další bajty nebo bajty identifikující operandy.
Příklad programu v asembleru HC08 (program vynuluje bajty pole o velikosti N začínajícího na adrese ADDR):
XDEF Entry ; exportuj 'Entry' symbol ABSENTRY Entry ; zacatek programu je na 'Entry' INCLUDE 'derivative.inc' N EQU 4 ; velikost pole ; oblast dat ORG RAMStart ADDR DS N ; rezervuj N bytu pro pole ; oblast kodu ORG ROMStart Entry: LDHX #RAMEnd+1 TXS ; inicializace SP CLI ; povol preruseni CLRH ; nuluj registry H, X, A CLRX CLRA Nuluj: STA ADDR, X ; nuluj ADDR[0], ..., ADDR[N-1] INCX CPX #N BNE Nuluj