Moin,
die Interrupt-Priorisierung kann manchmal ganz schön nerven...
Folgendes hätte ich noch dazuzugeben: Standard bei allen
8051-Derivaten sind die Interrupts Ext0, Timer0, Ext1, Timer1 und
Seriell. Dazu gibt es schon immer ein Propritäten-Register IP und ein
Freigaberegister IE.
Der Ablauf ist wie vorher beschrieben, bei gleicher Priorität zuerst der
Interrupt, der in der Liste vornedran steht (Polling Sequence), bei
verschiedenen Prioritäten die höhere zuerst.
Bei den Derivate sind jetzt noch weitere Interrupt-Quellen und
Interrupt-Prioritäten hinzugekommen. Wenn mehr als 7 Quellen vorhanden
sind, gibt es ein weiteres Freigaberegister IE1, das bisherige Register
IE heisst dann meist IE0 (ist aber auch unter IE ansprechbar -
Kompatibilität des Codes!). Insgesamt sind in der 8051-Architektur bis
zu 31 Interruptquellen möglich - entsprechend 4 IE-Registern. Das 32.
Bit ist die globale Freigabe IE.7 = EA.
Bei 4 Prioritätsleveln wird aus dem IP-Register das IPL und es kommte in
IPH-Register dazu. Die Priorität ergibt sich dann zu:
IPH IPL Level
0 0 0 Wie bei 2 Prioritäten
0 1 1 "
1 0 2
1 1 3
Wenn das Derivat mehr als 7 Interrupt-Quellen hat gibt es zu jedem IE0/1
Freigaberegister auch 2 Prioritätenregister IPL0/IPH0 und IPL1/IPH1. Die
niedrigern Register sind immer identisch mit den Standard-Registern. Es
gibt also Folgende gleiche Registernamen (mal in der Include-Datei
vergleichen!)
Standard (bis 7 Quellen) bis 15 Quellen
2 Prio-Level 4 Prio-Level 2 Prio-Level 4 Prio-Level
SFR-Adresse
IE IE IE0 IE0 A8h *
IE1 IE1 B1h !
IP IPL IP0 IPL0 B8h *
IPH IPH0 B7h !
IP1 IPL1 B2h !
IPH1 B3h !
* Standard-Adresse bei fast allen 8051 (gefundene Aussnahme 80515/535)
! Die Adressen sind von einem AT89C51. Bei anderen Controllern sitzen
die Register häufig woanders! Beim T89C51CC01 ist IE1 z.B. auf E8h und
IPL1/IPHl auf F8h/F7h. Also immer die richtige Include-Datei verwenden.
tschuessle
Bernhard