Special Function Register
Der 8081 Emulator unterstützt das Special Function Register Area. Allerdings haben
für den Emulator momentan nur sehr wenige Register eine wirkliche Bedeutung:
CPU
Register | Adresse | Beschreibung |
SP | 0x81 |
Der Stack-Pointer wird durch die Befehle push und pop gesetzt
und zeigt auf das letzte gültige Byte auf dem Stack. |
DPL | 0x82 |
DPL und DPH-Register bilden zusammen den Data-Pointer (DPTR). |
DPH | 0x83 |
DPL und DPH-Register bilden zusammen den Data-Pointer (DPTR). |
DPSEL | 0x92 |
Über die unteren 3 Bit des DPSEL-Registers kann zwischen 8 Registersätzen für
das DPL- und das DPH-Register umgeschaltet werden. |
SYSCON | 0xB1 |
Über das unterste Bit des SYSCON-Registers kann der XRAM zugeschaltet werden.
Der XRAM wird in den Adreßbereich 0xFF00 bis 0xFFFF in den externen Speicher eingeblendet. |
PSW | 0xD0 |
Das Programm Status Word Register. In diesem Register werden die Flags gespeichert. |
Akku | 0xE0 |
Das Akku-Register des Prozessors. |
B | 0xF0 |
Das B-Register. Dieses Register wird bei Multiplikationen und Divisionen verwendet. |
Register |
Bit 7 | Bit 6 | Bit 5 | Bit 4 |
Bit 3 | Bit 2 | Bit 1 | Bit 0 |
DPSEL | | | | | | .2 | .1 | .0 |
SYSCON | | | | RMAP | | | | XMAP |
PSW | CY | AC | F0 | RS1 | RS0 | OV | F1 | P |
DPSEL
Über die unteren 3 Bit des DPSEL-Registers kann zwischen 8 Registersätzen für
das DPL- und das DPH-Register umgeschaltet werden. So kann praktisch mit 8 Datapointern
gearbeitet werden. Ohne diese Funktion müßten immer wieder andere Werte in DPL und DPH
geladen werden, wenn auf andere Adressen zugegriffen werden muß.
SYSCON, RMAP-Bit
Ist dieses Bit gesetzt, so wird die 2. Belegung des Adressbereiches der SFR aktiviert.
SYSCON, XMAP-Bit
Ist dieses Bit gesetzt, so wird der XRAM in den Adreßbereich 0xFF00 bis 0xFFFF des
externen Speichers eingeblendet.
PSW, CY-Flag
Das Carry-Flag wird immer dann vom Prozessor gesetzt, wenn es bei einer Addition oder Subtraktion
zu einem Übertrag (bzw. zum "Borgen" in die nächste Stelle) kam.
PSW AC-Flag
Das Auxiliary Carry-Flag wird immer dann gesetzt, wenn nach einer Addition oder Subtraktion
eine BCD-Korrektur nötig ist, falls das Ergebnis als BCD-Zahl gedeutet werden soll.
PSW, F0 und F1-Flag
Diese beiden Flags werden vom Prozessor selber nicht benutzt und können beliebig verwendet werden.
PSW, OV-Flag
Das Overflow-Flag wird nach einer Addition oder Subtraktion immer dann gesetzt, wenn das Ergebnis zweier
positiver Zahlen (vorzeichenbehaftet interpretiert) eine negative Zahl ergibt bzw. wenn die Subtraktion
einer positiven Zahl von einer negativen Zahl wieder eine positive Zahl ergibt.
PSW, P-Flag
Das Parity-Flag wird vom Prozessor immer dann gesetzt, wenn eine ungerade Zahl an Bits im Akku-Register
gesetzt sind.
Ports
Register | Adresse | Beschreibung |
P0 | 0x80 |
Das P0-Register dient zur Kommunikation mit dem externen Speicher.
Beim echten 8051 Prozessor wird das niederwertige Bytes der Adresse sowie
das Datenbyte über diesen Port übertragen. |
P1 | 0x90 |
Das P1-Register. An diesem Register ist die virtuelle Leuchtdiodenzeile angeschlossen,
außerdem dient dieses Byte als Ausgabebyte für die CAPCOM-Einheit. |
P2 | 0xA0 |
Das P2-Register. Wird über das @r0- oder das @r1-Register auf den externen Speicher
zugegriffen, so stellt dieses Register das höherwertige Bytes der 16-Bit Adresse dar.
(Ist der XRAM aktiviert, so führt ein Zugriff auf den externen Speicher über die Register
@r0 und @r1 in den XRAM und das P2-Register wird ignoriert.) |
P3 | 0xB0 |
Das P3-Register. An dieses Register können extern z.B. Schalter o.ä. angeschlossen sein.
Mit einzelnen Bits dieses Registers können Timer ein- und ausgeschaltet werden oder
der Prozessor aus dem Stromsparmodus wieder in den Normalmodus geschaltet werden. |
P4 | 0xE8 |
Das P4-Register.
Dieses Register wird zwar vom Assembler unterstützt und
zur korrekten Adresse aufgelöst, es hat aber im Emulator keine Bedeutung. |
P5 | 0xF8 |
Das P5-Register.
Dieses Register wird zwar vom Assembler unterstützt und
zur korrekten Adresse aufgelöst, es hat aber im Emulator keine Bedeutung. |
Register |
Bit 7 | Bit 6 | Bit 5 | Bit 4 |
Bit 3 | Bit 2 | Bit 1 | Bit 0 |
P1 | COUT2 | CC2 | COUT1 | CC1 | COUT0 | CC0 | | |
P3 | | | T1 | T0 | INT1 | INT0 | | |
P1
In diesem Byte werden Bits durch die CAPCOM-Einheit gesetzt oder gelöscht. Welche Byte wann
gesetzt werden hängt von der Konfiguration der CAPCOM-Einheit über die Register
CMSEL0 und CMSEL1 sowie CT1CON ab.
P3, T1
Ist Timer 1 im Zähler-Modus und aktiviert, so wird der Inhalt von Timer 1 jedesmal um eins erhöht, wenn das Bit
T1 gelöscht wird.
P3, T0
Ist Timer 0 im Zähler-Modus und aktiviert, so wird der Inhalt von Timer 0 jedesmal um eins erhöht, wenn das Bit
T0 gelöscht wird.
P3, INT1
Ist Timer 1 entsprechend konfiguriert, so ist er immer genau dann aktiv, wenn dieses Bit gesetzt ist.
P3, INT0
Ist Timer 0 entsprechend konfiguriert, so ist er immer genau dann aktiv, wenn dieses Bit gesetzt ist.
Außerdem kann der Prozessor, wenn er entsprechned konfiguriert ist, durch das Setzen dieses Bits aus
dem Stromsparmodus in den Normalmodus zurückgeschaltet werden.
Power Management
Register | Adresse | Beschreibung |
PCON | 0x87 |
Das PCON-Register. Über dieses Register kann der Prozessor in den Stromsparmodus versetzt
werden. Dies bedeutet, daß der Prozessor angehalten wird, bis ein Interrupt ausgelöst wird. |
PCON1 | 0x88 |
Das PCON1-Register. Über dieses Register kann eingestellt werden, ob der Prozessor durch das Setzen
des INT0-Bits im P3-Register aus dem Stromsparmodus in den Normalmodus zurückgeschaltet werden kann.
Achtung:
Um auf dieses Register zugreifen zu können, muß RMAP-Bit im SYSCON-Register gesetzt sein. |
Register |
Bit 7 | Bit 6 | Bit 5 | Bit 4 |
Bit 3 | Bit 2 | Bit 1 | Bit 0 |
PCON | | PDS | IDLS | | | | PDE | IDLE |
PCON1 | EWPD | | | | | | | |
PCON, PDS
(Power Down Start)
Wird dieses Bit gesetzt, so wird der Prozessor in den "Power Down"-Modus geschaltet. Er führt keine Befehle mehr aus
und die Timer werden ebenfalls angehalten. Er kann nur durch einen Interrupt oder durch das Setzen des INT0-Bits im
P3-Register (sofern das EWPD-Bit im PCON1-Register gesetzt ist) wieder reaktiviert werden.
PCON IDLS
(Idle Start)
Wird dieses Bit gesetzt, so wird der Prozessor in den "Idle"-Modus geschaltet. Er führt keine Befehle mehr aus, aber
die Timer laufen weiter. Der Prozessor kann nur durch einen Interrupt aus diesem Modus wieder reaktiviert werden.
PCON, PDE
(Power Down Enable)
Um den Prozessor über das PDS-Bit in den "Power Down"-Modus schalten zu können, muß dieses Bit gesetzt sein.
PCON, IDLE
(Idle Enable)
Um den Prozessor über das IDLS-Bit in den "Idle"-Modus schalten zu können, muß dieses Bit gesetzt sein.
PCON1, EWPD
(External Wakeup from Power Down)
Ist dieses Bit gesetzt, so kann der Prozessor durch das Setzen des INT0-Bits im P3-Register aus dem "Power Down"-Modus
wieder geweckt werden.
Interrupt-System
Register | Adresse | Beschreibung |
TCON | 0x88 |
Über dieses Register können die Timer 0 und 1 ein- und ausgeschaltet werden.
Außerdem befinden sich in diesem Register Bits, die signalisieren, daß ein
Timer-Interrupt oder ein externer Interrupt aufgetreten ist sowie
Konfigurations-Bits für die externen Interrupts. |
ITCON | 0x9A |
Über die Bits in diesem Register kann eingestellt werden, ob die externen Interrupts
ausgelöst werden, wenn INTx von 0 zu 1 übergeht oder umgekehrt. Außerdem wird in
diesem Register ein Bit gesetzt, wenn der externe Interrupt 2 ausgelöst wird. |
IEN0 | 0xA8 |
Das Interrupt-Enable-Register. Mit diesem Register kann eingestellt werden, welche Interrupts
bearbeitet werden sollen. |
IEN1 | 0xA9 |
Das Interrupt-Enable-Register. Mit diesem Register kann eingestellt werden, welche Interrupts
bearbeitet werden sollen. |
IP0 | 0xB8 |
Das Interrupt-Prioritäts-Register. Über dieses Register wird die Prioritätsstufe der
einzelnen Iterruptquellen eingestellt, d.h. welche Interrupts durch andere unterbrochen
werden drüfen. |
IP1 | 0xB9 |
Das Interrupt-Prioritäts-Register. Über dieses Register wird die Prioritätsstufe der
einzelnen Iterruptquellen eingestellt, d.h. welche Interrupts durch andere unterbrochen
werden drüfen. |
ADCON0 | 0xD8 |
In diesem Register wird ein Bit gesetzt, wenn der Interrupt des A/D-Wandlers
ausgelöst wird. |
Register |
Bit 7 | Bit 6 | Bit 5 | Bit 4 |
Bit 3 | Bit 2 | Bit 1 | Bit 0 |
TCON | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
ITCON | | IE2 | | | I1ETR | I1ETF | I0ETR | I0ETF |
IEN0 | EA | | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
IEN1 | | | ECT1 | ECCM | ECT2 | ECEM | EX2 | EADC |
IP0 | | | PT2 | PS | PT1 | PX1 | PT0 | PX0 |
IP1 | | | PCT1 | PCCM | PCT2 | PCEM | PX2 | PADC |
ADCON0 | | | IADC | | | | | |
TCON, IT0
Ist dieses Bit nicht gesetzt, so wird der externe Interrupt 0 immer dann ausgelöst, wenn sich
INT0 auf niedrigem Niveau befindet. Ist dieses Bit gesetzt, so gelten für die Auslösung des
externen Interrupts 0 die Einstellungen, die über die Bits I0ETR und I0ETF im ITCON-Register
festgelegt sind.
TCON, IE0
Dieses Bit wird immer dann von der Hardware gesetzt, wenn es zu einem Interrupt-Request des externen
Intrrupts 0 kommt und wieder vom Prozessor gelöscht, wenn die entsprechende Interrupt-Behandlungsroutine
aufgerufen wird.
TCON, IT1
Ist dieses Bit nicht gesetzt, so wird der externe Interrupt 1 immer dann ausgelöst, wenn sich
INT1 auf niedrigem Niveau befindet. Ist dieses Bit gesetzt, so gelten für die Auslösung des
externen Interrupts 1 die Einstellungen, die über die Bits I1ETR und I1ETF im ITCON-Register
festgelegt sind.
TCON, IE1
Dieses Bit wird immer dann von der Hardware gesetzt, wenn es zu einem Interrupt-Request des externen
Intrrupts 1 kommt und wieder vom Prozessor gelöscht, wenn die entsprechende Interrupt-Behandlungsroutine
aufgerufen wird.
TCON, TR0
Ist dieses bit gesetzt, so ist der Timer 0 eingeschaltet, ist es gelöscht, so ist der Timer 0 ausgeschaltet.
TCON, TF0
Dieses Bit wird immer dann vom Timer 0 gesetzt, wenn es zu einem Überlauf kam und damit der Timer 0
Interrupt ausgelöst wird. Es wird vom Prozessor wieder gelöscht, wenn die entsptechende Behandlungsroutine
für den Interrupt aufgerufen wird.
TCON, TR1
Ist dieses bit gesetzt, so ist der Timer 1 eingeschaltet, ist es gelöscht, so ist der Timer 1 ausgeschaltet.
TCON, TF1
Dieses Bit wird immer dann vom Timer 1 gesetzt, wenn es zu einem Überlauf kam und damit der Timer 1
Interrupt ausgelöst wird. Es wird vom Prozessor wieder gelöscht, wenn die entsptechende Behandlungsroutine
für den Interrupt aufgerufen wird.
ITCON, I0ETR und I1ETR
rising edge-triggered mode
Ist dieses Bit für den entsprechenden Interrupt gesetzt, so wird ein Interrupt immer dann ausgelöst,
wenn der Wert an INT0 bzw. INT1 von 0 zu 1 übergeht. (Vorausgesetzt, das IT0- bzw. IT1-Bit im
TCON-Register ist auf 1 gestellt, ansonsten wird der Interrupt immer dann ausgelöst, wenn INT0
bzw. INT1 auf 0 ist.)
ITCON, I0ETF und I1ETF
falling edge-triggered mode
Ist dieses Bit für den entsprechenden Interrupt gesetzt, so wird ein Interrupt immer dann ausgelöst,
wenn der Wert an INT0 bzw. INT1 von 1 zu 0 übergeht. (Vorausgesetzt, das IT0- bzw. IT1-Bit im
TCON-Register ist auf 1 gestellt, ansonsten wird der Interrupt immer dann ausgelöst, wenn INT0
bzw. INT1 auf 0 ist.)
ADCON0, IE2
Dieses Bit wird von der Hardware gesetzt, wenn der externe Interrupt 2 ausgelöst wird und
es wird vom Prozessor wieder gelöscht, wenn die Behandlungsroutine des Interrupts aufgerufen wird.
IEN0, EA
Dieses Bit muß gesetzt sein, damit Interrupt-Requests verarbeitet werden. Ist es nicht gesetzt, so wird kein Interrupt-Request
verarbeitet unabhängig von den folgenden Einstellungen.
IEN0 und IEN1
Über die einzelnen Bits dieser Register kann für die einzelnen Interrupts eingestellt werden,
ob Interrupt-Requests vom Prozessor verarbeitert werden sollen oder nicht.
Register | Bit | Interrupt |
IEN0 | EX0 | External 0 |
ET0 | Timer 0 |
EX1 | External 1 |
ET1 | Timer 1 |
ES | Serial port |
ET2 | Timer 2 |
IEN1 | EADC | A/D converter |
EX2 | External 2 |
ECEM | CAPCOM emergency |
ECT2 | Compare timer 2 |
ECCM | Capture / compare match |
ECT1 | Compare timer 1 |
IP0 und IP1
Über die einzelnen Bits dieser Register kann für die Priorität der einzelnen Interrupts eingestellt werden.
Interrupts können entweder low-priority oder high-priority Interrupts sein. Ist das entsprechende Bit für
einen Interrupt in IP0 oder IP1 gesetzt, so hat der Interrupt high-priority. Für die Ausführung von
Interrupts gibt: Jeder Interrupt kann den normalen Programmablauf unterbrechen (sofern er nicht über die
Register IEN0 und IEN1 deaktiviert wurde), ferner kann die Bearbeitung eines low-priority Interrupts durch
einen high-priority Interrupt unterbrochen werden.
Register | Bit | Interrupt |
IP0 | PX0 | External 0 |
PT0 | Timer 0 |
PX1 | External 1 |
PT1 | Timer 1 |
PS | Serial port |
PT2 | Timer 2 |
IP1 | PADC | A/D converter |
PX2 | External 2 |
PCEM | CAPCOM emergency |
PCT2 | Compare timer 2 |
PCCM | Capture / compare match |
PCT1 | Compare timer 1 |
ADCON0, IADC
Dieses Bit wird von der Hardware gesetzt, wenn der Interrupt des A/D-Wandlers ausgelöst wird und
es wird vom Prozessor wieder gelöscht, wenn die Behandlungsroutine des Interrupts aufgerufen wird.
Timer 0 und 1
Register | Adresse | Beschreibung |
TCON | 0x88 |
Über dieses Register können die Timer 0 und 1 ein- und ausgeschaltet werden.
Außerdem befinden sich in diesem Register Bits, die signalisieren, daß ein
Timer-Interrupt oder ein externer Interrupt aufgetreten ist sowie
Konfigurations-Bits für die externen Interrupts. |
TMOD | 0x89 |
Über dieses Register können die Timer 0 und 1 konfiguriert werden. |
TL0 | 0x8A |
Das TL0- und das TH0-Register bilden den Zähler des Timers 0. |
TH0 | 0x8C |
Das TL0- und das TH0-Register bilden den Zähler des Timers 0. |
TL1 | 0x8B |
Das TL1- und das TH1-Register bilden den Zähler des Timers 1. |
TH1 | 0x8D |
Das TL1- und das TH1-Register bilden den Zähler des Timers 1. |
Register |
Bit 7 | Bit 6 | Bit 5 | Bit 4 |
Bit 3 | Bit 2 | Bit 1 | Bit 0 |
TCON | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
TMOD | GATE1 | C/T1 | M11 | M01 | GATE0 | C/T0 | M10 | M00 |
TCON, IT0
Ist dieses Bit nicht gesetzt, so wird der externe Interrupt 0 immer dann ausgelöst, wenn sich
INT0 auf niedrigem Niveau befindet. Ist dieses Bit gesetzt, so gelten für die Auslösung des
externen Interrupts 0 die Einstellungen, die über die Bits I0ETR und I0ETF im ITCON-Register
festgelegt sind.
TCON, IE0
Dieses Bit wird immer dann von der Hardware gesetzt, wenn es zu einem Interrupt-Request des externen
Intrrupts 0 kommt und wieder vom Prozessor gelöscht, wenn die entsprechende Interrupt-Behandlungsroutine
aufgerufen wird.
TCON, IT1
Ist dieses Bit nicht gesetzt, so wird der externe Interrupt 1 immer dann ausgelöst, wenn sich
INT1 auf niedrigem Niveau befindet. Ist dieses Bit gesetzt, so gelten für die Auslösung des
externen Interrupts 1 die Einstellungen, die über die Bits I1ETR und I1ETF im ITCON-Register
festgelegt sind.
TCON, IE1
Dieses Bit wird immer dann von der Hardware gesetzt, wenn es zu einem Interrupt-Request des externen
Intrrupts 1 kommt und wieder vom Prozessor gelöscht, wenn die entsprechende Interrupt-Behandlungsroutine
aufgerufen wird.
TCON, TR0
Ist dieses bit gesetzt, so ist der Timer 0 eingeschaltet, ist es gelöscht, so ist der Timer 0 ausgeschaltet.
TCON, TF0
Dieses Bit wird immer dann vom Timer 0 gesetzt, wenn es zu einem Überlauf kam und damit der Timer 0
Interrupt ausgelöst wird. Es wird vom Prozessor wieder gelöscht, wenn die entsptechende Behandlungsroutine
für den Interrupt aufgerufen wird.
TCON, TR1
Ist dieses bit gesetzt, so ist der Timer 1 eingeschaltet, ist es gelöscht, so ist der Timer 1 ausgeschaltet.
TCON, TF1
Dieses Bit wird immer dann vom Timer 1 gesetzt, wenn es zu einem Überlauf kam und damit der Timer 1
Interrupt ausgelöst wird. Es wird vom Prozessor wieder gelöscht, wenn die entsptechende Behandlungsroutine
für den Interrupt aufgerufen wird.
TMOD
Die obere Hälfte des TMOD-Registers enthält Einstellungen für den Timer 1 und die untere Hälfte
enthält die gleichen Einstellungen für Timer 0, d.h. Bit 4 hat für Timer 1 die gleiche Bedeutung
wie Bit 0 für Timer 0 usw.
TMOD, M0 und M1
Über diese beiden Bits wird die Betriebsart des entsprechenden Timers gewählt:
M1 | M0 | Betriebsart |
0 | 0 |
13-Bit-Timer. Das TH-Register und die unteren 5-Bit des TL-Registers werden als Zähler verwendet. |
0 | 1 |
16-Bit-Timer. Die Register TH und TL werden als Zähler verwendet. |
1 | 0 |
8-Bit-Timer mit Vorgabewert. Das TL-Register wird als Zähler verwendet. Wenn es überläuft,
wird es jedoch nicht auf 0 zurück gesetzt, sondern auf den Wert, der im TH-Register steht.
|
1 | 1 |
Dieser Betriebsmodus hat für Timer 0 und Timer 1 unterschiedliche Bedeutungen:
Timer 0:
In diesem Modus werden TL0 und TH0 als zwei Eigenständige Timer hochgezählt. Während
TL0 gemäß den Einstellungen zu Timer 0 (Timer- oder Counter-Modus usw.) behandelt wird,
wird TH0 ohne Berücksichtigung dieser Einstellungen hochgezählt. Läuft TL0 über, so wird
der Timer 0 Interrupt ausgelöst. Läuft TH0 über, so wird der Timer 1 Interrupt ausgelöst.
Timer 1:
In diesem Betriebsmodus arbeitet Timer 1 nicht. Timer 1 in diesen Modus zu versetzen ist
gleichbedeutend damit, ihn auszuschalten.
|
TMOD, C/T
Ist dieses Bit gesetzt, so wird der entsprechende Timer als "Counter" angesehen, sonst gilt er als
"Timer". Im Timer-Modus wird der Zähler (TLx oder TLx und THx) mit jedem Takt um eins erhöht. Im
Counter-Modus wird der Zähler immer dann um eins gehöht, wenn das T0- bzw. T1-Bit (je nach dem
füt Timer 0 oder 1) seinen Zustand von 1 zu 0 ändert.
TMOD, GATE
Ist dieses bit gesetzt, so ist der entsprechende Timer nur aktiv, während das INT0- bzw. das INT1-Bit
(je nach dem für Timer 0 oder 1) im P3-Register gesetzt ist. Ist das GATE-Bit nicht gesetzt, so reicht
es den Timer über das TRx-Bit einzuschalten.
Timer 2
Achtung:
Der Timer 2 als solcher wird vom Emulator nicht unterstützt.
T2CON | 0xC8 |
In diesem Register werden Bits gesetzt, wenn der Interrupt des Timers 2 ausgelöst wird. |
T2MOD | 0xC9 |
Das T2MOD-Register.
Dieses Register wird zwar vom Assembler unterstützt und
zur korrekten Adresse aufgelöst, es hat aber im Emulator keine Bedeutung. |
Register |
Bit 7 | Bit 6 | Bit 5 | Bit 4 |
Bit 3 | Bit 2 | Bit 1 | Bit 0 |
T2CON | TF2 | EXF2 | | | | | | |
T2CON, TF2 und EXF2
Diese beiden Bits werden von der Hardware gesetzt, wenn der Interrupt des Timers 2 ausgelöst wurde
und sie werden vom Prozessor wieder gelöscht, wenn die Behandlungsroutine des Interrupts aufgerufen wird.
Serielle Schnittstelle
Register | Adresse | Beschreibung |
SCON | 0x98 |
Das SCON-Register. In diesem Register werden Bits gesetzt, um zu signalieren,
daß ein Byte empfangen wurde oder die Schnittstelle bereit zum Versenden ist. |
SBUF | 0x99 |
In dem SBUF-Register wird ein Byte nach dem Empfang über die serielle Schnittstelle
gespeichert bzw. es wird der Inhalt dieses Registers über die serielle Schnittstelle
versandt.
|
Register |
Bit 7 | Bit 6 | Bit 5 | Bit 4 |
Bit 3 | Bit 2 | Bit 1 | Bit 0 |
SCON | | | | | | | TI | RI |
SCON, TI
Das TI-Bit wird vom Prozessor gesetzt, wenn der Inhalt von SBUF vollständig versandt wurde und
das Register nun bereit ist, daß nächste Byte aufzunehmen. Dieses Bit muß softwaremäßig gelöscht
werden.
SCON, RI
Das RI-Bit wird vom Prozessor gesetzt, ein komplettes Byte empfangen wurde und es im SBUF-Register
gespeichert wude. Dieses Bit muß softwaremäßig gelöscht werden.
Capture/Compare-Unit
Achtung:
Der Capture-Modus wird vom Emulator nicht unterstützt. Werden entsprechende Bits
gesetzt, so werden diese vom Emulator ignoriert.
Register | Adresse | Beschreibung |
TRCON | 0xCF |
Ein Bit in diesem Register wird gesetzt, wenn der CAPCOM-Emergency-Interrupt ausgelöst wurde. |
CT2CON | 0xC1 |
Ein Bit in diesem Register wird gesetzt, wenn der Capture Timer 2 Interrupt ausgelöst wurde. |
CCL0 | 0xC2 |
In CCL0 und CCH0 wird der Schwellenwert gespeichert, bei dessen Überschreitung der
Ausgang 0 eingeschaltet wird. |
CCH0 | 0xC3 |
In CCL0 und CCH0 wird der Schwellenwert gespeichert, bei dessen Überschreitung der
Ausgang 0 eingeschaltet wird. |
CCL1 | 0xC4 |
In CCL1 und CCH1 wird der Schwellenwert gespeichert, bei dessen Überschreitung der
Ausgang 0 eingeschaltet wird. |
CCH1 | 0xC5 |
In CCL1 und CCH1 wird der Schwellenwert gespeichert, bei dessen Überschreitung der
Ausgang 0 eingeschaltet wird. |
CCL2 | 0xC6 |
In CCL2 und CCH2 wird der Schwellenwert gespeichert, bei dessen Überschreitung der
Ausgang 0 eingeschaltet wird. |
CCH2 | 0xC7 |
In CCL2 und CCH2 wird der Schwellenwert gespeichert, bei dessen Überschreitung der
Ausgang 0 eingeschaltet wird. |
BCON | 0xD7 |
Ein Bit in diesem Register wird gesetzt, wenn der CAPCOM-Emergency-Interrupt ausgelöst wurde. |
CCPL | 0xDE |
In den Registern CCPL und CCPH wird der Wert gespeichert, mit dem der CAPCOM-Timer
initialisiert wird, wenn der in der Betriebsart 0 überläuft. |
CCPH | 0xDF |
In den Registern CCPL und CCPH wird der Wert gespeichert, mit dem der CAPCOM-Timer
initialisiert wird, wenn der in der Betriebsart 0 überläuft. |
CCIR | 0xE5 |
In diesem Register werden Bits gesetzt, wenn der Capture/Comapre Match Interrupt oder der
Compare Timer 1 Interrupt ausgelöst wurde. |
CT1OFL | 0xE6 |
In den Registern CT1OFL und CT1OFH wird der Wert des CAPCOM-Timers gespeichert. |
CT1OFH | 0xE7 |
In den Registern CT1OFL und CT1OFH wird der Wert des CAPCOM-Timers gespeichert. |
CT1CON | 0xEF |
Über diese Register wird die CAPCOM-Einheit konfiguriert. |
Register |
Bit 7 | Bit 6 | Bit 5 | Bit 4 |
Bit 3 | Bit 2 | Bit 1 | Bit 0 |
CT1CON | CTM | | | CT1RES | CT1R | CLK2 | CLK1 | CLK0 |
TRCON | | TRF | | | | | | |
CT2CON | CT2P | | | | | | | |
BCON | | | | | BCERR | | | |
CCIR | CT1FP | CT1FC | CC2F | CC2R | CC1F | CC1R | CC0F | CC0R |
CT1CON, CLK0, CLK1 und CLK2
Über diese 3 Bits wird das Taktverhältnis zwischen dem Systemtaktgeber und dem Taktgeber
des CAPCOM-Timers eingestellt:
Verhältnis | CLK2 | CLK1 | CLK0 |
1/2 | 0 | 0 | 0 |
1/4 | 0 | 0 | 1 |
1/8 | 0 | 1 | 0 |
1/16 | 0 | 1 | 1 |
1/32 | 1 | 0 | 0 |
1/64 | 1 | 0 | 1 |
1/128 | 1 | 1 | 0 |
1/256 | 1 | 1 | 1 |
CT1CON, CT1R
Ist dieses Bit gesetzt, so läuft der CAPCOM-Timer.
CT1CON, CT1RES
Ist dieses Bit gesetzt, so wird der Inhalt des CAPCOM-Timers beim Ein- oder Ausschalten
des CAPCOM-Timers sowie, wenn der Timer abgeschaltet ist, zurückgesetzt.
CT1CON, CTM
Stellt die Betriebsart des CAPCOM-Timers ein. Ist das Bit gelöscht, so zählt der
Timer von dem eingestellt Startwert aus hoch, die Ausgänge werden, wenn der Timer den
gleichen Wert wie das jeweils entsprechende Register enthält, eingeschaltet und beim
Überlauf des Timers wieder ausgeschaltet. In der 2. Betriebsart schaltet die
CAPCOM-Einheit ebenfalls beim Überschreiten der entsprechenden Schwellenwerte den
zugehörigen Ausgang ein, aber der Timer läuft nicht über, sondern wechselt die Zählrichtung
und schaltet die Ausgänge beim Unterschreiten des entsprechenden Schwellenwertes wieder ab.
TRCON, TRF und BCON, BCERR
Diese beiden Bits werden von der Hardware gesetzt, wenn der CAPCOM-Emergency Interrupt
ausgelöst werden soll und sie werden vom Prozessor wieder gelöscht, sobald die
Interrupt-Behandlungsroutine aufgerufen wird.
CT2CON, CT2P
Dieses Bit wird von der Hardware gesetzt, wenn der Capture Timer 2 Interrupt
ausgelöst werden soll und es wird vom Prozessor wieder gelöscht, sobald die
Interrupt-Behandlungsroutine aufgerufen wird.
CCIR, CC0F-CC2F und CC0R-CC2R
Diese Bits werden von der Hardware gesetzt, wenn der Capture/Comapre Match Interrupt
ausgelöst wird. Die CCxR-Bits werden gesetzt, wenn der zugehörige Timer beim aufwärts
Zählen (raising) den eingestellt Schwellenwert erreicht hat und die CCxF-Bits werden
gesetzt, wenn der zugehörige Timer beim abwärts Zählen (falling) den eingestellten
Schwellenwert erreicht.
CCIR, CT1FP und CT1FC
Diese Bits werden von der Hardware gesetzt, wenn der Compare Timer 1 Interrupt
ausgelöst wird. Das CT1FP-Bit wird gesetzt, wenn der Zähler überläuft oder seine
Zählrichtung von up zu down ändert. Das CT1FC-Bit wird gesetzt, wenn der Zähler seine
Zählrichtung von down zu up ändert.
A/D-Wandler
Achtung:
Der Wandlertakt beträgt im Emulator immer 1/48 des Systemtakts
(das entspricht der Zeit zur Ausführung von 2 Befehlen) und kann nicht
geändert werden. Beim echten 8051 Prozessor kann der Wandlertakt über die
Register ADCON0 und ADCON1 eingestellt werden.
Register | Adresse | Beschreibung |
P1ANA | 0x90 |
In diesem Register wird eingestellt, welche Pins als analoge Eingänge verwendet werden sollen.
Achtung:
Um auf dieses Register zugreifen zu können, muß RMAP-Bit im SYSCON-Register gesetzt sein. |
P3ANA | 0xB0 |
In diesem Register wird eingestellt, welche Pins als analoge Eingänge verwendet werden sollen.
Achtung:
Um auf dieses Register zugreifen zu können, muß RMAP-Bit im SYSCON-Register gesetzt sein. |
ADCON0 | 0xD8 |
Über dieses Register wird der Analog-Digital-Wandler konfiguriert. |
ADCON1 | 0xDC |
Über dieses Register wird der Analog-Digital-Wandler konfiguriert. |
ADDATH | 0xD9 |
Über die Register ADDATL und ADDATH wird der gemessene Wert nach Abschluß der
Messung ausgegeben.
|
ADDATL | 0xDA |
Über die Register ADDATL und ADDATH wird der gemessene Wert nach Abschluß der
Messung ausgegeben. Außerdem wird die Messung dadurch eingeleitet, daß ein beliebiger
Wert in dieses Register geschrieben wird.
|
Register |
Bit 7 | Bit 6 | Bit 5 | Bit 4 |
Bit 3 | Bit 2 | Bit 1 | Bit 0 |
P1ANA | | | | | EAN3 | EAN2 | EAN1 | EAN0 |
P3ANA | | | EAN7 | EAN6 | EAN5 | EAN4 | | |
ADCON0 | | | IADC | BSY | ADM | MX2 | MX1 | MX0 |
ADCON1 | | | | | | MX2 | MX1 | MX0 |
P1ANA und P3ANA
Über die Bits in diesen Registern wird eingestellt, an welche Eingänge als analoge Eingänge
verwendet werden sollen.
ADCON0 und ADCON1, MX0 - MX2
Die MX0- bis MX2-Bits sind in den beiden Registern ADCON0 und ADCON1 identisch. Sie
geben an, an welchem Eingang gemessen werden soll:
MX2 | MX1 | MX0 | gewählter Eingang |
0 | 0 | 0 | P1.0 / AN0 |
0 | 0 | 1 | P1.1 / AN1 |
0 | 1 | 0 | P1.2 / AN2 |
0 | 1 | 1 | P1.3 / AN3 |
1 | 0 | 0 | P3.2 / AN4 |
1 | 0 | 1 | P3.3 / AN5 |
1 | 1 | 0 | P3.4 / AN6 |
1 | 1 | 1 | P3.5 / AN7 |
ADCON0, ADM
Ist dieses Bit gesetzt, so wird kontinuiertlich gemessen, ansonsten wird nur dann eine Messung
durchgeführt, wenn in das ADDATL-Register manuell ein Wert geschrieben wird.
ADCON0, BSY
Dieses Bit ist immer dann gesetzt, wenn der Analog-Digital-Wandler gerade eine Messung durchführt.
ADCON0, IADC
Dieses Bit wird vom Analog-Digital-Wandler immer dann gesetzt, wenn eine Interrupt
ausgelöst wird.
ADDATH und ADDATL
Über diese beiden Bytes wird das Ergebnis der Analog-Digital-Wandlung als 10-Bit-Wert ausgegeben.
Dabei enthält ADDATH die höherwertigen 8 Bit und in ADDATL werden die niederwertigen 2 Bit
gespeichert, allerdings werden dafür in ADDATL die 2 höchstwertigen Bits (also Bit 6 und Bit 7
von ADDATL) verwendet.