WERNER SCHMIDT und ANGELIKA SCHMIDT
Mitteilung aus der Interessengemeinschaft Heimcomputer der IH Dresden
Zum besseren Verständnis sollen zu dem Beitrag "Experimentierschaltung mit U
8820", den wir im Heft 4 dieses Jahres veröffentlichten, das Programmlisting für das Betriebssystem
(Tafel 1) und die
Unterprogramme UP1, UP2 und UP4 (Tafeln 2 bis 4) nachgereicht werden.

Grundlagen
Einchip-Mikrorechner ermöglichen auf Grund ihrer Konzeption den Aufbau leistungsfähiger elektronischer Steuerungen bei minimalem Schaltungsaufwand. In den kommenden Jahren ist daher eine Vielzahl von Einsatzfällen zu erwarten, bei denen die
Programmierung im Maschinenkode neben der in Basic eine große Bedeutung besitzt.
Mit der vorliegenden Experimentierschaltung soll die Anwendung der wichtigsten Maschinenbefehle erleichtert und dabei versucht werden, die gegenwärtig auf diesem Gebiet noch bestehende Lücke an Informationen schließen zu helfen.
Bei der Konzeption der Schaltung wurde besonderer Wert auf Übersichtlichkeit gelegt. Fragen wie Universalität der E-A-Ports oder optimale Speicherausnutzung standen dabei nicht im Vordergrund.
Aus diesem Grunde wurden die Portfunktionen, wie aus Bild 1 hervorgeht, zunächst fest vorgegeben und der zur Verfügung stehende Bereich des Programmspeichers in acht gleiche Abschnitte zu je 256 byte
unterteilt, von denen der erste das Betriebssystem enthält, während die restlichen für je ein Unterprogramm vorgesehen sind (Tafel 1). Die Unterprogramme UP1, UP2 und UP4 enthalten Programmierbeispiele. Es sollte jedoch beachtet
werden, dass die vorliegende Schaltung erstrangig für Studienzwecke vorgesehen ist, und demzufolge nicht die für den Einsatz in der Praxis wichtigen E-A-Puffer enthält.
Schaltungsprinzip
An Port 0 sind ein 4-bit-DIL-Schalter und die zugehörige Anzeige (VOE 22) angebracht, die im Betriebssystem für den Aufruf der Unterprogramme benutzt, aber auch in den Unterprogrammen selbst ein-
gesetzt werden können. Durch den 4-bit-Unterprogrammaufruf ist eine nahtlose Ergänzung um weitere acht Unterprogramme bei Verwendung des Einchip-Mikrorechners U 884 und eines EPROM U 2732 bzw.
eines zweiten EPROM U 2716 möglich.
Port 1 ist im Betriebssystem als Ausgang konfiguriert und mit einer 8-bit-Anzeige (VOE 24) versehen, kann aber bei Bedarf in einem der Unterprogramme auch als 8-bit-Eingang oder für die Ein- und Ausgabe
von 4 bit definiert werden.
Port 2 steht für allgemeine Anwendungen zur Verfügung, beispielsweise zur Steuerung einer Modelleisenbahn. Die Konfiguration kann ebenfalls in einem Unterprogramm durch Neuformierung des
Steuerregisters 246 (P2M) dem konkreten Anwendungszweck entsprechend geändert werden.
Die Funktion von Port 3 ist durch die gewählte Verdrahtung vorgegeben. Die Anschlüsse P30 und P37 sowie P31 und P36 sind vorrangig in der vom Hersteller festgelegten Funktion als serielle Datenein-
und Datenausgänge bzw. als Zeitgeberein- und Zeitgeberausgänge zu verwenden.
Steuerungen innerhalb der Unterprogramme ermöglichen die an P32 und P33 angeschlossenen Bedienelemente, während mit P35 = L die 8-bit-Anzeige von Port 1 dunkel getastet werden kann, falls diese
nicht benötigt wird und die Stromaufnahme herabgesetzt werden soll. Die in die Pegelanzeige der Ausgänge P34, P36 und P37 zum Zwecke der Heiligkeitsangleichung eingefügten 150-6Z-Widerstände
können entfallen, ohne dass die für die Ausgangsstufen der IS V 40098 zulässigen Grenzwerte überschritten werden.
Der On-Chip-Oszillator wird über eine RC-Schaltung betrieben. Dabei wurde der Einstellbereich so gewählt, dass sowohl eine glatte Taktfrequenz (SCLK = 2,00 MHz), als auch der für eine serielle Übertragung
erforderliche Takt (SCLK= 1,8432 MHz) mit ausreichender Genauigkeit eingestellt werden kann. Die Kontrolle kann am Meßausgang SCLK oder an P36 vorgenommen werden. Die Schreibweise der Befehle wurde
der des Z8-ASM-Assemblers angeglichen.
Tafel 1: Übersicht über die Aufteilung des
Programmspeichers
Eingabe an P00 bis P03 |
Speicherbereich |
Funktion nach Reset |
0 |
000 bis 0FF |
Betriebssystem |
1 |
100 bis 1FF |
UP 1 : 8-Bit-Vor- und 8-b it-Rückwärtszähl er |
2 |
200 bis 2FF |
UP 2: 9-bit-NF-Impulsgenerator |
3 |
300 bis 3FF |
UP 3: nicht belegt |
4 |
400 bis 4FF |
UP 4: Serien-Parallelwandler |
5 |
500 bis 5FF |
UP 5: nicht belegt |
6 |
600 bis 6FF |
UP 6: nicht belegt |
7 |
700 bis 7FF |
UP 7: nicht belegt |
8 |
800 bis 8FF |
UP 8: 1 für Erweiterungen vorgesehen |
.. |
|
|
F |
F00 bis FFF |
UP F: |
Betriebssystem
Das Betriebssystem dient der Realisierung folgender Funktionen:
• Initialisierung der Steuerregister
• Laden der Arbeitsregister mit ihren Anfangswerten
• Programmierung des Zeitgeberkanals TO für die Ausgabe von SCLK an P36 bei P33 = H (kurze Blinkimpulse an P34) bzw. 1/1 000 SCLK bei P33 = L
(längere Blinkimpulse an P34). Im Bild 2 ist die Zeitgeberkette PREO/TO schematisch dargestellt.
• Unterprogrammsteuerung. Das Unterprogramm wird durch Einstellen der entsprechenden Nummer mit Hilfe des DIL-Schalters (P00 bis P03) und der an P04 bis P07 angeschlossenen Anzeige
ausgewählt. Dabei stellt die Unterprogrammnummer den H-Teil der Anfangsadresse des betreffenden Programms direkt dar.
Der Sprung zu dieser Adresse erfolgt unmittelbar nach Eingabe der Programmnummer unter der Bedingung, dass der Einchip-Mikrorechner im Ruhezustand das Betriebssystem durchläuft, da andernfalls die Eingabe nicht
abgefragt wird. Dieser Zustand tritt bei Eingabe einer 0 mit nachfolgendem Reset oder, wenn das vorher abgearbeitete Unterprogramm mit Return abgeschlossen ist, ein. Befindet sich das
Unterprogramm in einer Endlosschleife, muss ein erneutes Reset ausgelöst werden.
8-bit-Vor- und 8-bit-Rückwärtszähler (UP 1) Der Zählstand wird hexadezimal an Port 1 ausgegeben. Das Eingeben der Zählimpulse erfolgt über P31 oder über die Taste (P32). Mit Hilfe von P33 wird die Vor-Rück-Umschaltung realisiert. Für das Entprellen der Taste und der über P31 von außen zugeführten Zählimpulse wurde eine Zeitschleife vorgesehen.
Impulsgenerator (UP 2)
Mit Hilfe des Unterprogramms UP 2 werden neun Impulsfrequenzen erzeugt. Durch den Schalter an P33 können diese, wie aus Tafel 2 hervorgeht, auf Zwischenwerte umgeschaltet werden. Die Frequenzen werden
Tafel 2: Übersicht über die im Unterprogramm UP 2 erzeugten Frequenzen
[Frequenz in Hz (SCLK = 2 MHz)]
Frequenz- P33 = 0 P33 = 1
bereichs-
umschaltung
(Ausgang)
P36 39 61
P27 78,1 122
P26 156,2 244
P25 315,3 488
P24 625 976
P23 1 250 1 953,1
P22 2 500 3906,2
P21 5000 7812,5
P20 10000 15 625
Bild 3- Zeitlicher Verlauf der Ein- und Ausgangssignale im Unterprogramm UP 4 mit Hilfe des internen CTC-Kanals erzeugt.
Die Ansteuerung dieses Kanals (PREO/TO) erfolgt vom internen Takt (Bild 3). Die niedrigste Frequenz kann in Mäanderform von P36 abgenommen werden. Die Gewinnung der anderen acht Frequenzen
geschieht durch ständiges Laden von Port 2 mit dem aktuellen Zählerstand von TO.
Serien-Parallel-Wandier (UP 4)
Die auf dem Chip integrierte SIO gestattet in besonders einfacher Weise die
Serien-Parallel- oder Parallel-Serien-Wandlung. Voraussetzung ist die Verwendung einer geeigneten Taktfrequenz, die durch
Programmierung des CTC-Kanals PREO/TO auf die sechzehnfache Bitrate herabgeteilt werden muss. Die vollständige Teilerkette für die Bitrate 2400bit/s, die sich unmittelbar nach Anwahl des Unterprogramms
UP 4 einstellt (da der zugehörige Bitratenbereich ebenfalls mit 4 angewählt wird), ist im Bild 4 dargestellt. Um einen seriellen Datensender, der über keine Taktquelle verfügt, takten zu können, ist über P36 der
interne, durch 2 geteilte Abtasttakt herausgeführt. Das Umschalten der Bitraten geschieht durch die Programmierung des 8-bit-Teilers TO, indem dieser mit dem an P00 bis P03 eingestellten Zahlenwert
geladen wird.
Bei der Inbetriebnahme wird mit der Einstellung 4 an P00 bis P03 zunächst das in Tafel 3: Übersicht über die im
Unterprogramm UP 4 einstellbaren Bitraten
Bitraten Bitrate Takt an Umsetzzeit
bereich bit/s P36/kHz TSP in ms
P00 bis (achtfache
P03 = TO Bitrate)
1 9 600 76,80 0,94
2 4800 38,40 1,88
3 3200 25,60 2,81
4 2 400 19,20 3,75
5 1920 15,36 4,69
6 1 600 12,80 5,63
8 1 200 9,60 7,50
A 960 7,68 9,37
C 800 6,40 11,25
F 640 5,12 14,06
Unterprogramm UP 4 angewählt und mit Reset in Betrieb gesetzt. Nun kann bei P33 = H der gewünschte Bitratenbereich eingestellt und die Taktfrequenz an P36 kontrolliert werden (Tafel 3). Nach
Umschalten auf P33 = L ist der Eingang P30 empfangsbereit. Die Ausgabe und Anzeige der Paralleldaten erfolgt an Port 1, P34 liefert das Readysignal. Der zeitliche Verlauf ist im Bild 5 dargestellt.
Zusammenfassung
Mit Hilfe der beschriebenen Schaltung ist es möglich, kleinere Maschinenprogramme zu testen. Außerdem können einfache Laborgeräte, z. B. Zähler, Impulsgeneratoren, Frequenzmesser, Zeitgeber usw. realisiert
werden.
Abschließend soll darauf hingewiesen werden, daß in [2] und [3] einige Speicherladebefehle fehlerhaft angegeben sind. Richtig muß es heißen:
LDC Irr,r D2 -r-Irr-
LDE Irr,r C2 -r-Irr-
LDCI irr,lr D3 -Ir-Irr-
LDEllrr,lr C3 -Ir-Irr
Mitunter wird auch Bit5 im PO1M-Register vertauscht angegeben: D5 = 0 bedeutet normales Speicherzeitverhalten.
Literatur
[1] Müller, S.: Einchip-Mikrorechner U 883 D interpretiert Tiny-MP-Basic. radio fernsehen elektronik, Berlin 34 (1985) 3, S. 143 und 144
[2] Bennewitz, W.; Podszuweit, H.: Programmierung von Einchipmikrorechnern, Reihe Automatisierungstechnik Band 215. Berlin: VEB Verlag Technik 1985
[3] Claßen, L.; Oefler, U.: Wissensspeicher Mikrorechnerprogrommierung. Berlin: VEB Verlag Technik 1986
[4] Bankel, M.: Einchip-Mikrorechner U 881, U 882 und U 883. radio fernsehen elektronik, Berlin 34 (1985) 2, S. 81-84
[5] Autorenkollektiv der IH Dresden: Arbeitsunterlagen zur Anwendung des Einchip-Mikrorechners UB 8810/UB 8820. Dresden: IH Dresden Juli 1985
[6] Lohöfener, M.: Tabellarischer Befehlssatz der Einchip-Mikrorechner U 881 D und U 882 M. radio fernsehen elektronik, Berlin 35 (1986) 7, S. 422
|
Marke |
Adresse |
Hex-Code |
Assembler-Code |
Kommentar |
|
|
|
ORG 0000H |
;Adresse Programmbeginn |
|
0000H |
FF FF |
NOP |
;Nüx zu tun ;-) |
|
0002H |
FF FF |
|
;System schwingt ein |
|
0004H |
FF FF |
|
|
|
0006H |
FF FF |
|
|
|
0008H |
FF FF |
|
|
|
00OAH |
FF FF |
|
|
|
00OCH |
8F |
DI |
;Interrupt verboten |
|
00ODH |
31 F0 |
SRP #%FO |
;RPE <- FO |
|
00OFH |
FC 80 |
LD R15,#%80 |
; |
|
0011H |
EC 00 |
LD R14,#%00 |
; |
|
0013H |
FF FF |
NOP |
; |
|
0015H |
FF FF |
NOP |
; |
|
0017H |
FF FF |
NOP |
; |
|
0019H |
8C 05 |
LD R8,#%05 |
;P01 M |
|
001BH |
7C 41 |
LDR7,#%41 |
;P3M |
|
001DH |
6C OF |
LDR6,#%0F |
;P2M |
|
001FH |
FF FF |
NOP |
; |
|
0021H |
FF FF |
NOP |
; |
|
0023H |
FF FF |
NOP |
; |
|
0025H |
FF FF |
NOP |
; |
|
0027H |
FF FF |
NOP |
; |
|
0029H |
31 00 |
SRP#%00 |
;RP
<- 00 |
|
002BH |
4C 0A |
LDR4,#%0A |
;Anzahl d. zu lösch. Reg. |
|
002DH |
5C 0F |
LD R5,#%0F |
;Anf.-adr. |
|
002FH |
81 05 |
CLR @5 |
;Lösche Reg. F,E,...,6 |
|
0031H |
00 05 |
DEC R5 |
; |
|
0033H |
4A FA |
DJNZ R4,$-4 |
; |
|
0035H |
9F |
EI |
;Interrupt
erlaubt |
|
0036H |
B1 05 |
CLR R5 |
; |
|
0038H |
88 00 |
LD R8,PRTO |
;BCD-Eingabe |
|
003AH |
F0 08 |
SWAP R8 |
;Nippeltausch |
|
003CH |
89 00 |
LD PRTO, R8 |
;BCD-Ausgabe |
|
003EH |
48 00 |
LD R4,PRTO |
;BCD-Eingabe über PO3-00 |
|
0040H |
56 04 0F |
AND4,#%0F |
;Reg. 4 Bit 7..4 <-0 |
|
0043H |
A6 04 00 |
CP4,#%00 |
;BCD-Eingabe=0? |
|
0046H |
6B 04 |
JRZ,$+6 |
; |
|
0048H |
D4 04 |
CALL@4 |
;UP-Aufruf |
|
004AH |
8B EA |
JR,$-20 |
; |
|
004CH |
76 03 08 |
TM3,#%08 |
;P33=0? |
|
004FH |
6B 1D |
JRZ,$+31 |
; |
|
0051H |
E6 F7 C3 |
LD 241,#%C3 |
;TMR für P36=2MHz |
|
0054H |
6C 3F |
LD R6,#%3F |
;kurze Blinkdauer |
|
0056H |
46 03 10 |
OR3,*%10 |
;P34=1 |
|
0059H |
7C FF |
LD R7,#%FF |
; |
|
005BH |
FF |
NOP |
; |
|
005CH |
7A FD |
DJNZ R7,$-1 |
;Zeitschleife |
|
005EH |
6A F9 |
DJNZ R6,$-5 |
; |
|
0060H |
56 03 EF |
AND3,#%EF |
;P34=0 |
|
0063H |
6C 3F |
LD R6,#%3F |
; |
|
0065H |
7C FF |
LD R7,#%FF |
; |
|
0067H |
FF |
NOP |
;Zeitschleife |
|
0068H |
7A FD |
DJNZ R7,$-1 |
; |
|
006AH |
8A F9 |
DJNZ R6,$-5 |
; |
|
006CH |
88 CB |
JR,$-54 |
; |
|
006EH |
E6 F1 43 |
LD 241,#%43 |
;TMR für P36-2kHz |
|
0071H |
E6 F4 19 |
LD 244,#%19 |
;TO <-19 (:25) |
|
0074H |
E6 F5 15 |
LD 245,#%15 |
;PRE0 <-15 (:5) |
|
0077H |
6C BF |
LD R6,#%BF |
;lange Blinkdauer |
|
0079H |
8B DB |
JR,$-35 |
; |
|
Tafel 1: Programmlisting für das Betriebssystem
|
0100H |
|
ORG 0100H |
;Adresse |
|
0100H |
8F
|
DI
|
;Unterprogrammbeginn |
|
0101H |
31 F0 |
SRP #%F0 |
;Steuerregistergruppe
|
|
0103H |
BC 25
|
LD R8, #%25
|
;P01M
|
|
0105H |
7C 41
|
LD R7, #%41
|
;P3M
|
|
0107H |
31 00
|
SRP #%00
|
;Arbeitsregistergruppe0
|
|
0109H |
B0 01
|
CLR 1
|
; |
|
010BH |
66 03 06
|
TCM3, #%06
|
;P32/31=0? |
|
010EH |
6B FB
|
JRZ,$-3
|
;Warteschleife für
P32/31=1
|
|
0110H |
4C FF
|
LDR4,#%FF
|
;Entprellschleife |
|
0112H |
FF
|
NOP
|
;für1/0-Übergang
|
|
0113H |
4A FD
|
DJNZ R4,$-1
|
; |
|
0115H |
76 03 08
|
TM 3,#%08
|
;P33=0? |
|
0118H |
6B 04
|
JRZ,$+6
|
; |
|
011AH |
20 01
|
INC X1
|
;Vorwärtszählen
|
|
011CH |
8B 02
|
JR,$+4
|
; |
|
011EH |
00 01
|
DEC X1
|
;Rückwärtszählen
|
|
0120H |
66 03 06
|
TCM 3, #%06
|
;P32/31=0?
|
|
0123H |
EB FB
|
JRNZ,$-3
|
;Warteschleife für
P32/31=0
|
|
0125H |
4C FF
|
LD R4, #%FF
|
; |
|
0127H |
FF
|
NOP
|
;Entprellschleife für |
|
0128H |
4A FD
|
DJNZ R4,$-1
|
;0/1-Übergang
|
|
012AH |
8B DF
|
JR, $-31 |
; |
Tafel 2: Listing Unterprogramm UP2: 8-bit-Vor-Rückzähler
|
0200H |
|
ORG 0200H |
;Adresse |
|
0200H |
B0 F6 |
|
;CLR P2M 8-bit-Ausgang
|
|
0202H |
E6 F1 43
|
LD 241, #%43
|
;TMR
<- 43 (TOUT=T0)
|
|
0205H |
B0 F4
|
CLR 244
|
;CLR
T0 (:256)
|
|
0207H |
76 03 08
|
TM 3, #%08
|
;P33=0? |
|
020AH |
6B 05
|
JRZ,$+7
|
; |
|
020CH |
E6 F5 41
|
LD 245, #%41
|
;PRE 0
<- 41 (:16)
|
|
020FH |
88 03
|
JR, $+5
|
; |
|
0211H |
E6 F5 65
|
LD 245, #%65
|
;PRE
0 <- 65 (:25)
|
|
0214H |
28 F4
|
LD R2, X244
|
;PRT
2 <- T0 |
|
0216H |
88 EF
|
JR,$-15
|
; |
Tafel 3: Listing Unterprogramm UP3:
Impulsgenerator
|
0400H |
|
ORG 0400H |
;Adresse |
|
0400H |
E6 F1 43
|
LD 241, #%43 |
;TMR,TOUT=T0
|
|
0403H |
B0 FA
|
CLR 250
|
;IRQ
zurücksetzen
|
|
0405H |
E6 F5 0D
|
LD 245,#%0D
|
;PREO
<- (:3)
|
|
0408H |
46 03 20
|
OR 3, #%20
|
;P35
<- 1, V0E24 hell
|
|
040BH |
56 03 EF |
AND 3, #%EF
|
;P34
<- 0, "+"dunkel
|
|
040EH |
B0 01
|
CLR1
|
;PRT1
<-0
|
|
0410H |
76 03 08
|
TM3, #%08
|
;P33=0? |
|
0413H |
EB 14
|
JRNZ,$+22
|
;IR03
=1?, Zeichen an P30?
|
|
0415H |
76 FA 08
|
TM 250, #08
|
; |
|
0418H |
68 F6
|
JRZ,$-8
|
; |
|
041AH |
56 FA F7
|
AND 250, #%F7
|
;IR03 <- 0
|
|
041DH |
18 F0
|
LD R1, 240
|
;PRT1
<- Zeichen, |
|
041 FH |
FF
|
NOP
|
;Parallelausgabe |
|
0420H |
56 03 EF
|
AND 3,#%EF
|
;P34
<-0,RDYaktiv
|
|
0423H |
FF
|
NOP
|
; |
|
0424H |
46 03 10
|
OR 3, #%10
|
;P34
<-1,RDYinaktiv
|
|
0427H |
88 E7
|
JR,$-23
|
; |
|
0429H |
09 0C |
LD 12, R0 |
;Reg
12 <- Bitratenbereich
|
|
042BH |
56 0C 0F |
AND 12, #%0F
|
;Reg 12 Bit
7..4 <-0
|
|
042EH |
C9 F4
|
LD244,R12
|
;T0
<- Bitratenbereich
|
|
0430H |
F0 00
|
SWAP 0 |
;Anzeige
V0E22 <-Bitraten-
|
|
0432H |
88 DC
|
JR,$-34
|
;bereich
|
Tafel 4: Listing Unterprogramm UP4:
Serien-Parallel-Wandler
|