|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
A15 |
A14 |
A13 |
A12 |
A11 |
A10 |
A9 |
A8 |
A7 |
A6 |
A5 |
A4 |
A3 |
A2 |
A1 |
A0 |
Hex |
RAM |
Startadresse |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0000h |
Endadresse |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
7FFFh |
|
EEPROM |
Startadresse |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
8000h |
Endadresse |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
FFFFh |
Der Zugriff auf den externen RAM erfolgt mit dem MOVX-Befehl.
Dabei kann der komplette 64k-Adressraum mit dem Datapointer (DPTR)
adressiert werden. Um den Externen RAM nutzen zu können, muss
das interne XRAM deaktiviert und der externe Daten- und Adressbus
aktiviert werden. Dazu wird Bit EXTRAM im Spezial Funktionen Register
AUXR auf 1 gesetzt:
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
AUXR Auxiliary Register (8Eh) |
DPU |
- |
M0 |
XRS2 |
XRS1 |
XRS0 |
EXTRAM |
AO |
Resetwert: 0X00 1010b (nicht bitadressierbar) |
|
Res |
|
XRAM Size |
|
ALE Output Bit |
|||
External RAM Bit |
||||||||
0 |
0 |
0 |
256 Bytes |
|||||
0 |
0 |
1 |
512 Bytes |
|||||
0 |
1 |
0 |
768 Bytes (default) |
|||||
0 |
1 |
1 |
1024 Bytes |
|||||
1 |
0 |
0 |
1792 Bytes |
|||||
Pulse lenght |
||||||||
Disable Weak Pull-Up |
Nachfolgend sind
Code-Beispiele für das Lesen und Schreiben von Daten im externen RAM/EEPROM gezeigt.
Für den parallelen
Anschluss externer Peripheriebausteine (zB. 8255) an den Daten-
und Adressbus des Controllers werden meist nur die Adresssignale
A0...A7 benötigt. Es können damit 256 Adressen erzeugt
werden. Die Adresssignale A8...A15 können dann als I/O-Ports
frei verwendet werden. Bei der Programmierung werden die Befehle
movx a,@Rn zum Lesen vom
Datenbus und movx @Rn,a zum Schreiben verwendet.
Über den Datenpointer (dptr) darf nicht adressiert werden,
da sonst die höherwertigen Adressleitungen benutzt werden.
In der Schaltung unten werden mit Hilfe des Bausteins 74HC138 die
Baustein-Auswahlsignale (Chip-Select) erzeugt. Dazu werden die höherwertigsten
3 Adressbits A7, A6 und A5 verwendet. Dies ergibt 23
= 8 gleich große Adressbereiche mit je 32 Adressen
(=256:8).
Die Tabelle zeigt die
einzelnen Adressbereiche mit dem jeweiligen Bausteinauswahlsignal:
Chip-Select-Signal |
CS0/ |
CS1/ |
CS2/ |
CS3/ |
CS4/ |
CS5/ |
CS6/ |
CS7/ |
Adressbereiche |
00h - 1Fh |
20h - 3Fh |
40h –5Fh |
60h –7Fh |
80h – 9Fh |
A0h –BFh |
C0h –DFh |
EFh – FFh |
Manche Bausteine haben selbst nur 2 Adresssignale, so dass
damit 4 interne Register adressiert werden können. Dann entstehen
sogenannte Foldback-Bereiche
Bsp.: IO-Port Expander-Baustein 8255
Im Adressbereich zwischen 40h und 5Fh treten die Adresssignale
(A0, A1) jeweils 8 mal in gleicher Kombination auf. Damit ergeben
sich für jedes der vier Register des 8255 acht mögliche
Adressen in acht Foldback-Bereichen. Für Port A sind das zum
Beispiel:
40h,
44h, 48h, 4Ch, 50h, 54h, 58h und 5Ch
Durch Verwenden weiterer Adresssignale für die Chip-Select-Logik, könnten solche doppelten Adressen zwar vermieden werden, meist ist der Aufwand jedoch nicht gerechtfertigt.
Die
Ausgabe eines Bytes auf das Port A-Register des 8255 erfolgt
mit dem movx-Befehl und registerindirekter Adressierung:
mov R0,#40h ; R0 wird mit der Startadresse des Peripheriebausteins
geladen!
mov a,#'A' ; Der Peripheriebaustein soll Ascii-'A' erhalten
movx
@R0,a ; Adresse 40h wird auf den Adressbus
gelegt.
; Dadurch wird CS2/ aktiviert (nullaktiv)!
Manchmal ist es sinnvoll nicht den internen Flash-Programmspeicher
des Controllers zu verwenden, sondern ein externes EPROM. Beispielsweise
können Firmware-Updates durch Tauschen des EPROM durchgeführt
werden.Um den externen Programmspeicher zu nutzen muß der
Pin EA/ des Controllers auf GND gelegt werden. Damit ist der interne
Flash-Speicher deaktiviert. Der Controller holt sich die Befehlsbytes
über den externen Adress- und Datenbus. Ebenso werden alle
movc-Befehle zum externen Programmspeicher geleitet. Als Lesesignal
wird die Steuerleitung PSEN/ verwendet.
Schaltung:
Timing auf den Port- und Steuerleitungen:
Übungen:
Zeitgeber- oder Zählerbausteine werden in der Mikrocomputertechnik für viele Anwendungs-zwecke benötigt. Insbesondere dort wo quarzgenaue Zeiten benötigt, oder externe Ereignisse gezählt werden müssen.
Der
Timer 2 des AT89C51..
ist ein 16-Bit Zähler, der aus zwei 8-Bit Zählerstufen
(TL2 und TH2) besteht. Durch zwei unabhängige Relaod/Capture-Register
(RCAP2L und RCAP2H) kann der Timer 2 sehr flexibel konfiguriert
und an die unterschiedlichsten Aufgabenstellungen angepasst werden.
Folgende Timer 2-Betriebsarten sind möglich:
|
= Einfangen von Zählerständen |
|
= freilaufender Zähler/Zeitgeber |
|
= freilaufender auf/abwärts Zähler |
|
= Baudraten Generator für serielle Schnittstelle |
|
= Programmierbarer Frequenzgenerator |
Die Steuerung und Abfrage von Statuswerten von Timer 2 erfolgt über
die beiden Register T2CON und T2MOD.
Bsp:
Frequenzgenerator
fclk equ 12000000
fT2 equ 50
;Hz
ReloadHigh
equ high(10000h-fclk/(4*fT2))
ReloadLow
equ low(10000h-fclk/(4*fT2))
init: xrl
T2MOD,#00000010b
clr
CT2
mov RCAP2H,#ReloadHigh
mov RCAP2L,#ReloadLow
mov TH2,#ReloadHigh
mov TL2,#ReloadLow
setb TR2
Übungen
Das Programmable Counter Array besteht aus fünf PCA-Modulen,
die einen gemeinsamen 16-Bit Timer/Counter als Zeitbasis verwenden.
Der PCA-Zähler (CH
und CL) zählt die Impulse von einer der
vier Quellen: 1 MHz / 3 MHz / Timer 0 Überlauf / P1.2
Bei Überlauf wird das Überlauf-Flag gesetzt und/oder ein
PCA-Interrupt ausgelöst. Die
Konfiguration erfolgt über die Register CMOD
und CCON.
Jedes PCA-Modul verfügt über zwei 8-Bit Compare/Capture Register. Damit lassen sich 2 grundsätzliche Betriebszustände eines PCA-Moduls erreichen:
1.3.2009 |
|