Het CONFIG register
In dit register, dat is uitgevoerd in EEPROM cellen, kan worden
geprogrammeerd welke subsystemen van de micro-controller aktief zijn. Zo
is er een bit (ROMON) dat bepaalt of de interne ROM geadresseerd moet kunnen worden.
Wanneer dit bit op '0' staat, is de interne ROM niet aangesloten.
Met een tweede bit (EEON) kan worden gekozen of de interne EEPROM
aangesloten is, of losgekoppeld. Wanneer dit bit op '0' staat, is de
interne EEPROM niet langer te gebruiken. Het derde bit (COPON) bepaalt of
de interne 'watchdog' aan staat, of is uitgeschakeld. Standaard staat de
watchdog uit. Wanneer U de watchdog wilt gebruiken moet dit bit op '1'
gezet worden.
Programmeren en wissen van dit register gaat hetzelfde als het
programmeren van een gewone EEPROM locatie.
Ook dit register is beschermd tegen ongewild wissen en programmeren, en
wel door het PTCON bit in het BPROT register. Wanneer dit bit op '1' staat
is wissen of programmeren van het CONFIG register niet mogelijk.
Een routine waarmee het CONFIG register geprogrammeerd kan worden is
hieronder gegeven.
* zet het byte in (B) in het config register
confwrite equ $
ldaa #((byte)or(erase)or(eelat))
staa pprog |kies wissen per byte
stab config |adresseer het te wissen byte
oraa #eepgm |en start het wissen
staa pprog
bsr dly10 |wissen duurt 10ms
clr pprog |stop daarna het wissen
ldaa #eelat
staa pprog |kies programmeren van een byte
stab config |schrijf het byte naar het config register
ldaa #(eelat+eepgm)
staa pprog |en start het programmeren
bsr dly10 |dit duurt 10 ms
clr pprog |stop daarna het programmeren
rts
Het config register:
CONFIG $103F
|
EE3
|
EE2
|
EE1
|
EE0
|
nosec
|
nocop
|
romon
|
eeon
|
Het INIT register
Nadat de micro-controller is opgestart, is de indeling van het geheugen
als hier weergegeven.
Het grootste deel van de geheugen decodering ligt vast, onder meer door de
programmering van de PSD833 chip. Via het INIT register in de 68HC11 kan
wel met de plaats van de I/O registers en de plaats van het interne RAM
geschoven worden. Dit heeft alleen in uitzonderlijke gevallen zin, meestal
voldoet de standaard plaats uitstekend.
Het is mogelijk de geheugenindeling te veranderen door middel van het
INIT register. In dit register kan worden aangegeven waar het beginadres
van het interne RAM moet zijn, en waar het beginadres van de bank met I/O
registers moet zijn. Standaard is de indeling zoals aangegeven, maar door het INIT register te wijzigen kan de indeling veranderd
worden.
In sommige toepassingen kan het handig zijn om de registerbank te laten
beginnen op adres 0. De registers kunnen dan geadresseerd worden in de
'direct' adresseer mode, en daardoor kunnen de bit-clear, de bit-set en de
bit-test instructies gebruikt worden met directe addressering. Wanneer de
registers niet op adres 0 beginnen, kunnen deze instructies alleen
gebruikt worden wanneer U geïndexeerd adresseert, en dus één van de
indexregisters op het beginadres van de registerbank laat wijzen.
Wanneer U zowel het RAM als de registerbank op adres 0 laat beginnen,
zullen de onderste 64 bytes uit de geheugenmap gereserveerd zijn voor de
registers. Hierboven zal het RAM weer gewoon beschikbaar zijn (dus van $40
tot $1FF.) Een stukje van het RAM wordt hiermee dus ontoegankelijk. Zowel
de registers als (een gedeelte van) het RAM ligt dan in de onderste $100
bytes van het geheugen, en is daarmee direct adresseerbaar.
Met de bits RAM3..RAM0 kan het RAM geplaatst worden op adres $0000
(alle bits op '0') t/m adres $F000 (alle bits op '1'), in stappen van
$1000 bytes.
Met de bits REG3..REG0 kan de registerbank geplaatst worden op adres
$0000 (alle bits op '0') t/m adres $F000 (alle bits op '1'), in stappen
van $1000 bytes.
De bits in het INIT register:
INIT $103D
|
ram3
|
ram2
|
ram1
|
ram0
|
reg3
|
reg2
|
reg1
|
reg0
|
|