Technikum Winterthur Ingenieurschule Semesterarbeit Digitaltechnik _________________________________ Laborrechner TK-51 __________________ Neil Franklin vom 24.4.89 bis 26.6.89 + -2- Inhaltsverzeichnis __________________ 1. Aufgabenstellung und erreichte Ergebnisse 3 1.1. Die Aufgabenstellung 3 1.2. Die erreichten Ergebnisse 3 2. Hardware„nderungen 4 2.1. Adresskollision RAMs 6116 mit Ports 8255 4 2.2. Falsche Adressdekodierung der 8255er 4 2.3. Nicht angeschlossene Tastatur 4 2.4. Nicht synchronisierbare Anzeige 5 2.5. Falsche Reihenfolge der LEDs und der Tasten am User-8255 5 2.6. Kein Reset an den 8255ern 5 3. Software„nderungen 6 3.1. Die Interruptroutine 6 3.2. Restliche Software 6 4. Dokumentation des TK-51 7 4.1. Dokumentation Hardware, die CPU-Platine 7 4.2. Die I/O-Platine 8 4.3. Dokumentation Software, die Porttestroutine PORT.SRC 10 4.4. Die Testroutine TEST.SRC 10 4.5. Das Modul SIBSEG.SRC 10 5. Vorschl„ge und Hinweise fr weitere Arbeiten 11 + -3- 1. Aufgabenstellung und erreichte Ergebnisse ____________________________________________ 1.1. Die Aufgabenstellung _________________________ Die ursprngliche Aufgabenstellung fr diese Semesterarbeit hiess wie folgt: Zun„chst ist der Prozessur 8051 zu studieren. Anschliessend ist die Vorhan- dene Hardware zu studieren und zu testen. Schlussendlich sind die seinerzeit [Semesterarbeit Urs Christen, 1987] erarbeiteten Programme einer grndlichen Prfung zu unterziehen. Im Laufe der Arbeit wurden zus„tzlich die folgenden Aufgaben hinzugestellt: Es ist ein Testprogramm (wie beim TK-80) fr den User-8255 zu schreiben, welches wie beim TK-80 ab der Adresse 800h l„uft. Zudem soll eine vollst„n- dige Dokumentation des TK-51 erstellt werden. Das User-8255-Testprogramm sollte: - den 8255 reseten - nacheinander die LEDs 0..7 je eine Sekunde aufleuchten lassen - nacheinander alle Segmente der 7Segmentanzeige aufleuchten lassen - dann bis zum Reset wiederholt gleichzeitig die 4 Tasten 0..3 auf den LEDs 0..3 anzeigen 1.2. Die erreichten Ergebnisse ______________________________ Zuerst lernte ich anhand der Siemens Seminarunterlagen den 8051 kennen. Hier- bei traten keine Schwierigkeiten auf. Als Zweites ging ich auf die Schaltung des TK-51 los, wozu ich die Schaltsche- mata von U. Christen und das bestehende Exemplar des TK-51 benutzte. Hierbei stellte ich eine Liste von M„ngeln auf. Fr diese arbeitete ich Schaltungskor- rekturen aus. Als Drittes fhrte ich diese Žnderungen der Hardware durch und testete danach die Schaltung auf einwandfreie Funktion. Die Hardware ist nun soweit ich erken- nen kann fehlerfrei. Zu diesen zwei Punkten siehe Kapitel 2. Zuletzt habe ich mit der Prfung und šberarbeitung der Betriebssystemsoftware zum TK-51 begonnen. Bei dieser Arbeit konnte ich nur geringe Fortschritte ver- zeichnen, da mir die Zeit ausging, siehe hierzu Kapitel 3. Mit den User-8255 Testprogramm habe ich gar nicht begonnen, da ich mit dem Betriebssystem, welches Vorrang hat, nicht fertiggeworden bin. Schliesslich habe ich die Dokumentation zum TK-51, soweit fertig, erstellt, siehe Kapitel 4. Winterthur, den 28.6.1989 Neil Franklin + -4- 2. Hardware„nderungen _____________________ Nachdem ich die 8051 Unterlagen studiert hatte wandte ich mich der Hardware zu. Aus Grnden der šbersicht beschreibe ich hier die einzelnen Fehler zusam- men mit den jeweiligen Korrekturmassnahmen, obwohl ich zuerst die Fehler ge- sucht und dann alle auf einmal korrigiert habe. 2.1. Adresskollision RAMs 6116 mit Ports 8255 _____________________________________________ Bereits beim ersten šberblick ber die Schaltung fiel mir auf, dass die Adres- sierung der 8255er nur von A0..7 sowie von /RD und /WR abh„ngt. Als Folge davon werden die 8255 auch bei Zugriffen auf den Adressen 8000h..ffffh angesprochen und es tritt bei bei Datenzugriffen (MOVX 8xxxh) eine Kollision von 6116 und 8255 auf. Beim Schreiben ins RAM werden die 8255 berschrieben und beim Lesen der RAMs verf„lschen die 8255 die Daten, welche die RAMs an den 8051 liefern. Als Abhilfe mussten die /CS Signale der 8255 vom Zustand von A15 (muss low sein) abh„ngig gemacht werden. Hierzu habe ich das A15 Signal von der CPU-Plat- tine mit der I/O-Platine verbunden, was einen weiteren Draht am Busstecker n”- tig machte. Da auf der I/O-Platte keine freien Gatter oder Platz vorhanden sind wurde der A7 am Eingang des 8205 durch A15 ersetzt. Als Folge dieser Žnderung treten s„mtliche Ports xx00h..xx7fh gespiegelt an xx80h..xxffh auf, was aber kaum st”rend ist. 2.2. Falsche Adressdekodierung der 8255er _________________________________________ Beim Versuch die Adresskollision von 2.1. nachzuweisen gelang es mir anf„ng- lich nicht, die Ports vom ICE51 aus anzusprechen. Da die Schaltung gem„ss dem Schaltplan funktionsf„hig war vermutete ich einen Verdrahtungsfehler. Tats„ch- lich waren die /CS Eing„nge der 8255 mit den Pins 14 und 13 statt 15 und 14 des 8205 verbunden, was dazu fhrte, dass die 8255er an xx04h..xx07h und xx08h ..xx0ch statt an xx00h..xx03h und xx04h..xx07h adressiert wurden. Der Grund fr diesen Fehler war aber die falsche Nummerierung der Pins des 8205 auf dem Schaltplan. Als Abhilfe habe ich die /CS umverdrahtet. 2.3. Nicht angeschlossene Tastatur __________________________________ Um die neue Leitung fr 2.1. zu legen musste ich das Pin-out des Bussteckers bestimmen. Dabei stellte ich fest, das zwar alle 11 Leitungen vom 8255 zur Tastatur am Bus anlagen, dass aber die Tastatur, welche direkt ohne Stecker mit der I/O-Platte verbunden worden war, nur mit den pull-up-Widerst„nden ver- bunden war, welche aber nicht mit dem Port verbunden waren. Als erstes habe ich die pull-ups mit den Port verbunden, danach aber die Tastaturleitungen mit den vorgesehenen Bussteckeranschlssen. Dadurch kann die I/O-Platte ausgebaut werden, ohne dass die Tastatur daran h„ngt. + -5- 2.4. Nicht synchronisierbare Anzeige ____________________________________ Welche Siebensegmentanzeige den aktuellen Wert im P1 des Prozessors anzeigt h„ngt vom 7493A ab. Die Software kann aber nicht erfahren, welche Anzeige ge- rade ansteht, sie muss daher einen Zeiger fhren, der mit dem 7493A synchron l„uft. Die Synchronisation war aber bisher nur beim Einschalten m”glich, da nur dann der 7493A auf 0 gestellt wird, bei Synchronisationsverlust w„re daher ein Aus-/Einschalten n”tig geworden. Daher habe ich die RO(1) und RO(2) Anschlsse des 7493A mit dem Port C des ersten 8255 verbunden um eine Softwareresetm”g- lichkeit zu schaffen. 2.5. Falsche Reihenfolge der LEDs und der Tasten am User-8255 _____________________________________________________________ Beim Austesten des zweiten 8255 stellte ich fest, dass die Siebensegmentanzei- ge an Port B richtig lief, dass das Testmuster (55h) der einzel-LEDs an Port A aber invers war. Weitere Testwerte best„tigten den Verdacht, dass die LEDs verkehrt herum angeschlossen waren: LED0 links, LED7 rechts. Die Tasten an Port C wiesen den selben Fehler auf. Diese beiden Fehlerhabe ich durch Neuverdrah- ten der LEDs und Tasten behoben. 2.6. Kein Reset an den 8255ern ______________________________ Wie aus dem Schaltplan ersichtlich waren die Reseteing„nge der 8255 offen ge- lassen worden. Dies hindert die Schaltung nicht am funktionieren, ist aber un- sauber, da St”rimpulse die Ports reseten k”nnen. Nach Rcksprache mit Herrn Tarschisch habe ich daher diese beiden Anschlsse an Ground gelegt (die Alter- native w„re gewesen, sie an den Prozessor-Reset zu h„ngen). + -6- 3. Software„nderungen _____________________ Da das Hardwaredebugging den gr”sseren Teil der Zeit (8 Wochen) dieser Semes- terarbeit eingenommen hat, habe ich leider nur einen geringen Teil der Software des TK-51 anschauen und korrigieren k”nnen. Ich hatte mir vorgenommen die Pro- gramme in der Reihenfolge Interruprtroutine (LEDDSP), Keyboardhandler (TASTFR), Betriebssystem (BSYS51), User-8255-Test (noch nicht existent) durchzufhren. Aus Zeitmangel habe ich nur die Interruptroutine bearbeiten k”nnen. 3.1. Die Interruputroutine __________________________ Die bestehende Routine LEDDSP ist voller Fehler: - DISP im Struktogramm entspricht DSPADR im File LEDDSP.SRC - DSPADR sollte mit DSPD+8 und nicht +7 verglichen werden (letzte Ziffer geht verloren, Anzeige l„uft durch) - B,DPL und DPH werden unn”tigerweise gepusht (Zeitverbrauch) - Schalten auf Registerbank 1 mit MOV PSW,#000010000B (9 Bits!) - Routine belegt R0 von Bank 1 -> steht User nicht zur Verfgung, die Ben- tzung durch den User muss aber vom User (!) vermieden werden, da sonst der Absturz der Anzeige erfolgt, dies wird in der Dokumentation aber nirgendwo erw„hnt. - Bei erstem Durchlauf wird erste Ziffer ausgegeben, obwohl erster Interrupt erst bei šbergang von erstem auf zweite Ziffer stattfindet -> die Anzeige erscheint um eine Ziffer verschoben. Wegen dieser vielen Fehler in einer 20 Befehlen langen Routine, sowie dem Feh- len von Routinen zur Initialisierung, sowie zum Ein- und Ausschalten der Anzeige durch den Bentzer habe ich ein neues Anzeigemodul (SIBSEG) geschreiben. Die Routine TEST dient nur zum Testen von SIBSEG, kann aber als Vorbild fr die neue Initialisierungsroutine in BSYS51 dienen. 3.2. Restliche Software _______________________ Die restliche Software (TASTFR und BSYS51) konnte nicht korrigiert werden. Ei- nige aus einer kurzen šbersicht der restlichen Routinen hervorgegangenen Bemer- kungen sind im Kapitel 5. zusammengefasst. + -7- 4. Dokumentation des TK-51 __________________________ Da die Originaldokumentation durch U. Christen unzul„nglich war bekam ich zu- s„tzlich die Aufgabe eine neue zu erstellen. Diese folgt an dieser Stelle, ge- trennt in einen Hardware- und einen Softwareteil. 4.1. Dokumentation Hardware, die CPU-Platine ____________________________________________ Der TK-51 ist mit einem 8751 (8051 mit internem EPROM) ausgestattet, der zu- s„tzlich mit externem RAM versehen ist. Die Adressierung der verschiedenen Speicherbereiche auf der CPU-Platine sieht folgendermassen aus: Code-Memory: 0000h..0fffh internes EPROM (MOVC) 1000h..7fffh frei, nicht dekodiert 8000h..8fffh 2x2kByte externes RAM, sowohl fr Code wie auch Daten. Eines der RAMs (beliebig) kann auch durch ein EPROM ersetzt werden. 9000h..bfffh 6x2kByte frei, aber dekodiert c000h..ffffh frei, nicht dekodiert Data-Memory: 00h..7fh internes RAM (MOV) 80h..ffh interner Port- u. Steuerbereich External-Data: 0000h..7fffh 128mal gespiegelter 256-Byte-Bereich am Bus (MOVX) 8000h..ffffh deckungsgleich mit Code-Memory Folgende Eigenschaften des 8751 stehen nicht zur Verfgung: Da der 8751 mit externem Speicher ausgestattet ist werden die Ports 0, 2 und 3 (teilweise) zur Adressierung der Speicher verwendet, sie sind dadurch belegt. Der Port 1 ist frei und wird an den Busstecker herausgefhrt (siehe aber Kapi- tel ber Anzeige auf I/O-Platine bzw. SIBSEG). Da der externe Speicher gr”sser als 256 Byte ist mssen volle 16-Bit Adressen verwendet werden. Die Befehle MOVX @Ri,A und MOVX A,@Ri k”nnen nur nach einem MOV P2, verwendet werden (s. Siemens Unterlagen Seite 3-21). Die serielle Schnittstelle, die Interrupt- sowie die Timereing„nge k”nnen be- ntzt werden, sind aber mit Ausnahme von Int0 nicht an den Bus herausgefhrt (siehe zu Int0 auch das Kapitel ber die Anzeige). Das Signal /PSEN sowie die Adressen A8..14 sind nicht am Bus herausgefhrt, daher mssen s„mtliche Speichererweiterungen auf der CPU-Platine stattfinden. + -8- Der externe Bus ist folgendermassen belegt: oben unten rechts A P1.0 : 1 GND B P1.1 : 2 A7 C P1.2 : 3 A6 D P1.3 : 4 A5 E P1.4 : 5 A4 F P1.5 : 6 A3 H P1.6 : 7 A2 J P1.7 : 8 A1 K ROW0 * : 9 A0 L ROW1 * : 10 /RD M ROW2 * : 11 /WR N COL0 * : 12 D7 P COL1 * : 13 D6 R COL2 * : 14 D5 S COL3 * : 15 D4 T COL4 * : 16 D3 U COL5 * : 17 D2 V COL6 * : 18 D1 W COL7 * : 19 D0 X n.c. : 20 /Int0 Y n.c. : 21 A15 links Z n.c. : 22 VCC * nur auf I/O-Platine, auf CPU-Platine n.c. 4.2. Die I/O-Platine ____________________ Die 256 von der CPU zur Verfgung gestellten Adressen werden auf der TK-51 I/O- Platine wie folgt genutzt: 0000h..0007h 2 8255 Portbausteine 0008h..001fh 6 freie aber dekodierte 4-Byte Bereiche 0020h..007fh frei 0080h..00ffh die Adressen 0000h..007fh gespiegelt, weil A7 nicht dekodiert wird + -9- Der erste 8255 stellt das Terminal dar, dessen Ports wie folgt genutzt werden: ------------------------------------------------------------------------------ PA: COL0..7 von der Tastatur (Busstecker) mit je 10kOhm an VCC (ein) Belegung der Tastatur: COL0 COL1 COL2 COL3 COL4 COL5 COL6 COL7 ROW0 0 1 2 3 4 5 6 7 ROW1 8 9 A B C D E F ROW2 RUN ADRS READ READ WRITE SET DECR INCR INCR Die Anschlsse der verwendeten Tastaturplatine sind wie folgt: N P I U W K V R T S M COL0 COL1 ROW1 COL5 COL7 ROW2 COL6 COL2 COL4 COL3 ROW0 PB: nicht belegt, nicht herausgefhrt PC: Bits 0..2: ROW0..2, an Busstecker, w„hlen die Tastenreihe aus (aus) Bit 3: Anzeige ein (1)/aus (0) Steuert Dunkelschaltung am 75156 und blockiert den Interrupt- Taktgeber 555, der alle 1..2ms eine Stelle weiter schaltet und den Interrupt 0 ausl”st. /INT0 bleibt die meiste Zeit low, da- her muss ein Flankentrigger verwendet werden. Bit 4: Anzeige Reset (1)/Betrieb (0) Bits 3 und 4 mssen beim Tastenreihenschalten beachtet werden! Der aktuelle Wert wird in der Speicherstelle STOP festgehalten. Er muss bei Ausgabe des ROW- Wertes mit diesem logisch ORiert werden. Das Steuerwort (90h) wird einmal beim initialisieren des TK-51 gesetzt. Der Prozessorport P1 wird fr die Anzeigedaten bentzt. Die Interruptleitung Int0 dient dazu, die n„chsten Daten anzufordern. Sie k”nnen daher vom Bentzer nicht verwendet werden. Von der Ver„nderung der Interruptsteuerflags fr den Int0 sollte abgesehen werden. Der zweite 8255 steht dem Bentzer zur freien Verfgung. An seinen Ports sind: ------------------------------------------------------------------------------ PA: 8 LEDs (Bit 7 links, Bit 0 rechts) PB: eine einzelne 7-Segment-Anzeige (siehe Schaltplan I/O, Blatt 2) PC: 4 Tasten (Bit 3 links, Bit 0 rechts, gedrckt=1, losgelassen=0, Bits 4..7 nicht belegt) Das Steuerwort (81h) muss vom Bentzerprogramm gesetzt werden. + -10- 4.3. Dokumentation Software, die Porttestroutine PORT.SRC _________________________________________________________ Dieses Programm entstand w„hrend der Hardwaretests um die jeweiligen Bauteile sowie die Dekoder auf ihre Funktionsf„higkeit zu testen. Es setzt dem Prozes- sorport (Ausgabedate) auf das Muster 'S', initialisiert die beiden 8255er und greift nacheinander auf alle bentzbaren Ports zu. Es erscheinen: 8 'S' auf der Anzeige, das Bitmuster 01010101 auf den LEDs sowie ein 'F' auf dem einzelnen Anzeigesegment. Die beiden Lesezugriffe ohne Verwertung der gelesenen Daten sind gedacht um testeshalber Lesezugriffe auszufhren, welche mit einem Logic- Analyzer nachzuweisen werden k”nnen. 4.4. Die Testroutine TEST.SRC _____________________________ Dieses Programm dient dazu das Modul SIBSEG.SRC zu testen. Es initialisiert den Stack, die Interruptschaltung und den Anzeigeninhalt (01234567). Danach resetet es die Anzeige und l„sst sie dann laufen. 4.5. Das Modul SIBSEG.SRC _________________________ Dies ist der einzige Bestandteil der eigentlichen Betriebssoftware des TK-51, das ich fertigstellen konnte. Es besteht aus 4 Routinen, deren Namen alle mit SIB anfangen: - SIBSEG ist die Interruptroutine, die als Folge eines Int0 die n„chsten Daten in die Anzeige schiebt. Sie wird nie vom Bentzer aufgerufen. - SIBINI resetet die Anzeige und schaltet sie aus, ausserden wird der Interrupt 0 auf hoher Priorit„t eingeschaltet. Diese Routine ver„ndert keine Register, wenn sie vom Betriebssystem aufgerufen wird (bein Einschalten). Sie kann vom Bentzer aufgerufen werden, hierzu ist jedoch SIBOFF vorgesehen. - SIBON setzt die Anzeige in Gang, der Inhalt von DSPD..DSPD+7 wird angezeigt. Es werden keine Register ver„ndert. - SIBOFF schaltet die Anzeige wieder aus. Es werden ebenfalls keine Register ver„ndert. Achtung! An und fr sich sollte der erste Interrupt nach dem Einschalten der Anzeige beim šbergang von der ersten zur zweiten Ziffer erfolgen. Aus diesem Grunde sollte in SIBSEG der Zeiger DSPADR preinkrementiert wer- den (MOV R0,A und MOV P1,@R0 sollten erst nach INC A bis MOV DSPADR,A erfolgen). Beim Testen hat sich aber herausgestellt, dass die Anzeige um ein Zeichen zuweit nach links erscheint. Aus diesem Grund habe ich SIBSEG auf Postinkrement umgestellt. Sollte im Verlauf weiterer Arbei- ten am TK51 pl”tzlich die Anzeige zu weit rechts stehen w„re diese Žn- derung rckg„ngig zu machen. Die endgltigen Adressen von SIBON und SIBOFF sollten nach dem letzten Assem- blieren notiert und dem Bentzer mitgetielt werden. + -11- 5. Hinweise und Vorschl„ge fr weitere Arbeiten _______________________________________________ Infolge Zeitmangel gelang es mir nicht die beiden Module TASTFR.SRC und BSYS51. SRC zu korrigieren. Beim ersten šberblicken dieser Module am Anfang der Arbeit an SIBSEG.SRC sind mir jedoch folgende Fehler aufgefallen: TASTFR.SRC: - Bei der Routine TASTFR sind die PUSHs und POPs unsymmetrisch: PUSH ACC, PSW, B, DPH, DPL <-> POP B, PSW, ACC, DPL, DPH - Struktogramm 2.Block ist ZEILE:=0, Listing Zeile 63 ist MOV R3,#1 BSYS51.SRC: - Fr Initialisieren von SP sollte eine symboliche Adresse nach der letzten Variablen verwendet werden (das šberschreiben von Variablen k”nnte eine Feh- lerquelle werden). - Interrupt Int0 h„tte flankengetriggert sein sollen (SETB IT0). Dies wird nun aber von SIBINI erledigt. - SETB EA sollte nach SETB EX0 und CLR EX1 stehen, ebenso SETB PX0 vor SETB EX0 und MOV SP,xxxx vor SETB EA. TEST.SRC zeigt eine m”gliche Anordnung die- ser Befehle. Vorschl„ge fr die weitere Entwicklung des TK51 ----------------------------------------------- - Im Modul SIBSEG.SRC habe ich allen Routinen Namen der Form SIBxxx gegeben, da dies das Auffinden einer Routine erleichtert. Ich empfehle diese Technik auch bei den beiden anderen Modulen einzusetzen. Kandidaten hierfr w„ren: CONV -> TASCNV ;Convert FLOAT -> TASFLT ;Float START -> BSSTAR ;Start DADISP -> BSDATP ;Daten>Tempor„r DISPDA -> BSTPDA ;Tempor„r>Daten DSPDIG -> BSDIGS ;>Digits - Ich empfehle, die Variablendeklarationen, welche sich jetzt am Schluss des Moduls BSYS51 befinden, in ein eigenes Modul zu verlegen, z.B. VARDEF.SRC.