Mikrocomputertechnik


Prof. Jürgen Plate, Prof. Peter Schwalb

Praktikum Mikrocomputer

Allgemeines

Im Rahmen dieses Praktikums sollen einfache Programme in Maschinensprache erstellt und auf dem Mikrocomputer PS11 erprobt werden. Dabei werden neben dem Einüben des Befehlsvorrats eines typischen Mikroprozessors die Problematiken der Unterprogrammtechnik, Stackbehandlung, Unterbrechungsbehandlung und Behandlung von parallelen und seriellen Schnittstellen untersucht. Ergänzende Zusatzschaltungen werden in TTL-Technik aufgebaut.

Der Mikrocomputer PS11 baut auf dem Mikrocontroller M68HC11 (8MHz) von Motorola auf. Er wird im expanded mode betrieben und ist mit einer PRU M68HC24, 32kByte RAM und 32 kByte EEPROM als externen Komponenten versehen. Die Programmentwicklung erfolgt auf einem PC unter Verwendung eines unter Windows XP laufenden Programmpakets (Integrated Development Environment for M68HC11). Dieses ermöglicht das Editieren, Assemblieren, Simulieren und Bereitstellen von Programmen für den M68HC11. Der Datentransfer zwischen PC und Zielrechner erfolgt über eine serielle Schnittstelle (COM-Port COM1 mit 9600 Baud).

Die Angaben zu den einzelnen Versuchen sind als thematischer Rahmen zu sehen. Die Aufgabenstellung kann durch den betreuenden Dozenten jederzeit modifiziert werden. Im Verlauf des Versuchs ist auf eine vernünftige Dokumentation zu achten.

Installation der IDE-Software

Die Programme des Pakets HC11-IDE.zip benötigen keine spezielle Installation, sondern laufen unter Windows (ab XP) wie sie sind. Um sich das Leben zu erleichtern, können Sie das Paket jedoch in die übliche Windows-Umgebung einbinden:

Einschalten und Starten

Der Arbeitsplatz ist über den Sicherungsautomaten, der PC über den Netz-Taster am PC-Gehäuse und das Testobjekt mittels seines Netzschalters in der Rückwand einzuschalten. Achtung: Zum Ausschalten dient der kleine rechteckige, rote Knopt am Sicherungsautomaten, nicht der Not-Aus-Taster! Nach dem Start von Windows XP sind Benutzername und Kennwort einzugeben.

Benutzername (user):  ide11
Kennwort (password):  ide11

Das Programm HC11-IDE11 wird durch klicken auf das entsprechende Icon gestartet. Wenn Sie IDE11 mehr als einmal starten, verweigern alle Inkarnationen des Programms den Kontakt zum M68HC11. In diesem Fall sind alle laufenden Versionen zu schließen und das Programm einmal neu zu starten.

Programm-Namen und Ordner SAVE

Quellprogramme (Sourcecodes) sind immer mit der Kennung (Extension) ".a" zu versehen (z. B. "versuch1_1.a"), da Editor und Assembler des Systems diese Kennung erwarten.

Die im Laufe eines Praktikums-Versuchs erstellten (name.a) oder erzeugten (name.lst) Dateien sind über den Ordner (Directory) Eigene Dateien verfügbar. Sie können von dort aus auf Diskette oder einem USB-Massenspeicher abgespeichert werden. Wenn Sie vorbereitete Programme auf Diskette oder USB-Massenspeicher mitbringen, dann speichern Sie diese auch immer in diesem Ordner ab.

Beenden und Abschalten

Wurde IDE11 versehentlich beendet, kann es über Doppelklicken des Symbols (Icon) des Arbeitsplatzes (Desktop) wieder gestartet werden.

Der Praktikumsrechner PS11 ist nicht auszuschalten, sondern nur herunterzufahren:
(START Wurde HC11-IDE11 versehentlich beendet, kann es über Doppelklicken des Symbols (Icon) des Arbeitsplatzes (Desktop) wieder gestartet werden. Der Praktikumsrechner PS11 ist nicht auszuschalten, sondern nur herunterzufahren: (START → Computer ausschalten).

Bearbeiten eines Quellprogramms

File → New

Erzeugt ein leeres Editorfenster mit dem Namen "Untitled". Beim ersten Speichern wird ein SAVE AS ausgeführt.

File → Open

Eine Datei (Quellprogramm) kann aus dem Arbeitsverzeichnis ausgewählt und geöffnet werden. Für die Bearbeitung der Datei mittels Tasten und Maus (Markieren, Kopieren, Verschieben, etc.) gelten die üblichen Regeln. Weitere Funktionen werden im Menue "EDIT" angeboten. Es können auch mehrere Fenster geöffnet werden. Die Bearbeitungsvorgänge beziehen sich immer auf das aktive (oben liegende) Fenster.

File → Save

Speichert den Inhalt des aktiven (oben liegenden) Editorfensters als Textdatei. Ist der Dateiname noch nicht festgelegt, wird ein "SAVE AS"-Befehl ausgeführt und der Dateiname erfragt.

File → Save As

Erfragt den gewünschten Dateinamen und speichert den Inhalt des aktiven (oben liegenden) Fensters als Textdatei (name.a).

Erst nachdem die Datei mit der Erweiterung .a abgespeichert wurde wird das Syntax Highlighting aktiviert:

Übersetzen eines Quellprogramms (source code)

Tools → Assemble

Der Start des Assemblers erfolgt über das Menü "Tools" im Editor. Ein neues oder verändertes Quellprogramm im aktiven Fenster wird abgespeichert und anschließend übersetzt. Bei fehlerfreiem Ablauf der Übersetzung werden ein Zielprogramm (name.s19) und ein Programmlisting (name.LST) erzeugt.  Eine gegebenenfalls erzeugte Fehlerliste wird im Ausgabe-Fenster (unterhalb des Editor-Fensters) angezeigt. Durch Doppelklick auf  den angezeigten Fehler (Error: xxxxx) wird im Quellprogamm die fehlerhafte Zeile markiert.

Anmerkung: Lassen Sie sich nicht durch die letzte Ausgabezeile des Editors ( → Exit-Code: 0) täuschen, diese besagt nur, dass das Assemblerprogramm nicht abgestürzt ist.

Simulieren eines Zielprogramms (object code)

Tools → Simulate

Der Start des Simulators erfolgt ebenfalls über das Menü "Tools" im Editor. Das Zielprogramm wird in den Simulator geladen. Hier kann das Programm in einem simulierten PS11 System erprobt werden.

Der Simulator ist nicht in der Lage, alle Eigenschaften des 68HC11 exakt nachzubilden. So müssen Sie auf manche Interrupts und einiges andere verzichten. So ist derzeit keine umfassende Simulation der seriellen Schnittstelle möglich.

Bei der Simulation des STRA-Eingangs mit dem Button [STRA = 0] ist folgendes zu beachten:

Ähnlich verhält es sich beim Eingang PA7. Hier holen Sie sich den Port A auf die Arbeitsfläche des Simulators und klicken auf das höchstwertige Bit (7). Auch hier muss, um eine Flanke zu erzeugen, wie es der Taster auf dem Steckbrett bewirkt, zweimal auf das Bit geklickt werden.

Je nach verwendetem PC-Modell kann es auch vorkommen, dass Zeitschleifen im Simulator schneller ablaufen, als dies bei einem realen Prozessor der Fall wäre.

Beachten Sie auch, dass die Simulation des seriellen Terminals sehr einfach gehalten ist. So werden zum Beispiel alle Zeichen bei der Eingabe geechot, was im realen Betrieb nicht der Fall sein muss.

Zum Starten eines Programms klicken Sie auf "Reset" und dann auf den "Start"-Button, der daraufhin grün wird. Im gestoppten Zustand kann das Programm im Einzelschritt-Modus durchlaufen werden. In diesem Fall öffnen Sie durch Klicken auf die entsprechenden Buttons die Fenster mit der Quellcodeanzeige ("View Code") und der Registeranzeige ("MC68HC11 CPU"). Die gerade bearbeitet Assemblerzeile wird dann farbig unterlegt und Sie können die aktuellen Registerinhalte sehen (oder auch ändern). Mit "Browse Memory" werden Sie in die Lage versetzt, Speicherinhalte anzusehen und zu ändern.

Die zusätzlich zur Binäranzeige vorhandene Siebensegmentanzeige für die Ports B und C bietet eine undecodierte Anzeige für Port B (alle Segmente einzeln ansteuerbar) und eine decodierte zweistellige Anzeige für Port C.

Tools → Load in Target

Das Zielprogramm, das zu dem im aktiven Fenster angezeigten Quellprogramm gehört, wird in den Speicher des Zielrechners übertragen (aber nicht gestartet). Dazu muß der Schalter am Zielsystem auf "PC" stehen. Zum Programmstart drücken Sie die RESET-Taste am Zielrechner.

Arbeiten mit der seriellen Schnittstelle

Bei Programmen, die die serielle Schnittstelle verwenden, im mit dem Terminalprogramm auf dem PC (z.B. Hyperterminal oder PuTTY) zu kommunizieren ist der Schalter am Zielsystem auf "Man." umzustellen, bevor die RESET-Taste gedrückt wird. Das Terminalprogramm muss online sein (Telefonhöhrer abgehoben).

Beim Laden des Programms ins Zielsystem muss der Schalter wieder auf "PC" gestellt werden. Achten Sie auch darauf, das ein gegebenenfalls geöffnetes Terminalprogramm auf "aufgelegt = offline" geschaltet wird, da sonst ein Konflickt beider Programme um die serielle Schnittstelle entsteht. Das Terminalprogramm muss jedoch nicht geschlossen werden.

In Kurzform:
RUN:   Terminal online, Schalter auf "Man."
LOAD: Terminal offline, Schalter auf "PC

Hinweise zur Programmerstellung

Jedes Programm muss folgende Anweisungen enthalten:

     stak   equ    $7FFF    ; Stackbereich ab $7FFF (RAM, abwaerts)
     prog   equ    $8000    ; Programmbereich ab $8000 (EEPROM)
     data   equ    $2000    ; Datenbereich ab $2000 (RAM)

     porta  equ    $1000    ; port a data
     portb  equ    $1004    ; port b data
     portc  equ    $1003    ; port c data reg.
     ddrc   equ    $1007    ; port c data dir. reg.
     portd  equ    $1008    ; port d data reg.
     ddrd   equ    $1009    ; port d data dir. reg.
     porte  equ    $100A    ; port e data
             .              ; ggf. weitere I/O-Adressen

     rvec   equ    $FFFE    ; Reset-Vektor
             .              ; ggf. weitere Vektoren


            org    data     ; Beginn Datenbereich
             .              ; Variablen-Definitionen
             .

            org    prog     ; Beginn Programmbereich
     main   lds    #stak    ; Stackpointer setzen
             .
             .              ; alle Initialisierungen
             .
     loop    .              ; Befehle des Programms
             .     
             .     
            jmp    loop     
             .              ; ggf. fixe Tabellen dahinter
             .     

             .              ; ggf. Setzen der Interrupt-Vektoren
             .              ; (Reihenfolge der Adressen beachten!)

           org     rvec     ; Setzen des Reset-Vektors
           fdb     main 
           end  
     
Der RAM-Speicher ab Adresse 0 bis Adresse 255 kann nicht genutzt werden (Bootloader bzw. Trace).

Verwenden Sie den Vorspann für die Assemblerprogramme für den Anfangsteil Ihrer Programme.

Tools → Terminal

Der Datenverkehr zwischen dem PC und dem Zielrechner über die serielle Schnittstelle wird mittels des Terminalprogramms Hyperterm am PC dargestellt. Damit kann der Datenverkehr über die SCI-Schnittstelle interaktiv erfolgen.

Belegung des Experimentier-Boards

Auf dem Experimentierboard steckt eine Anzeigeplatine (die getrennt vom Board mit Strom versorgt werden muß). Die Platine enthält vier decodierte und eine undecodierte Siebensegmentanzeigen. Ihre Belegung zeigt die folgene Abbildung:

Das Anschlußkabel zwischen M68HC11 und Experimentierboard endet auf einem Buchsenfeld, von dem aus die Verbindungen zur Anzeigeplatine bzw. zu den Schaltern, Tastern und LEDs gesteckt werden müssen.

Beachten Sie, daß die LED-Treiber an der Vorderkante des Boards sowie das Board mit den Siebensegmentanzeigen gesondert mit Spannung versorgt werden muß. Ihr Betreuer zeigt Ihnen die entsprechenden Verbindungen am ersten Praktikumstag.

Beschaltung der Eingänge des 68HC11

Die Schalter des Experimentier-Boards haben keine aktive Spannungsversorgung sondern schalten lediglich das Massepotential wechselweise auf zwei Anschlußbuchsen. Verbindet man einen Schalter mit dem Eingang eines Ports des 68HC11, dann wird - je nach Schalterstellung - der Port mit Masse verbunden oder der Porteingang ist offen. Aus diesem Grund muß die Leitung vom Schalter zum Eingangsport des 68HC11 mittels Pull-Up-Widerstand ein 1-Potential erhalten.

Sie finden auf dem Experimentier-Board auf einer der IC-Buchsen ein Widerstandsarray (WID-SIP) eingesteckt, das acht Widerstände enthält, die auf einer Seite miteinander verbunden sind. Dieser gemeinsame Anschluß ist auf dem Gehäuse des WID-SIP durch einen Punkt gekennzeichnet. Er wird mit +5V verbunden. Die anderen Pins des WID-SIP werden einerseits mit einem Schalter verbunden und andererseits mit einem Eingansport des 68HC11.

Die beiden Taster sind bereits mit einer Entprell-Logik verbunden und liefern korrekte Digitalsignale für 0 und 1. Sie können daher direkt mit einem Eingangspin des 68HC11 verbunden werden.

Anhang: Binär zu ASCII-Decodierung (hx4a)

Diese Unterprogramme werden beim vierten Praktikumstermin benötigt. Im Speicher liegen die Werte bekanntermaßen binär vor. Um einen Speicherinhalt oder ene Adresse auf der seriellen Schnittstelle (Terminal) oder einem LC-Display ausgeben zu können, müsen die Werte als ASCII-Zeichen dargestellt werden.
Die folgenden vier miteinander verbundenen Unterprogramme wandeln einen 16-Bit-Wert, einen 8-Bit-Wert oder einen 4-Bit-Wert in eine Hexadezimalzahl in ASCII-Darstellung um (4, 2, oder 1 Stelle):
hx4a	psha              ; Akku A auf dem Stack ablegen
        bsr     hx2a      ; Akku B umwandeln (Stelle 3 und 4)
        pulb              ; Akku A vom Stack holen, in Akku B ablegen
                          ; Nun einfach in hx2a fallen und Akku B
                          ; umwandeln (Stelle 1 und 2)
hx2a    pshb              ; Akku B auf dem Stack sichern
        bsr     hx1a      ; Bits 0-3 von Akku B umwandeln
        pulb              ; Original-Akku B wieder holen
        lsrb              ; viermal schieben (Bits 4-7 --> 0-3)
        lsrb
        lsrb              ; und nun die obere Haelfte umwandeln
        lsrb              ; indem einfach in hx1a gefallen wird
                          ; Nun wird die eigentliche Arbeit gemacht:
hx1a    andb    #$0F      ; die oberen 4 Bits ausmaskieren
        addb    #48       ; ASCII-Wert von "0" addieren
        cmpb    #57       ; groesser als "9"?
        bls     hx1b      ; nein, dann speichern
        addb    #7        ; sonst die Distanz zwischen "9" und "a" addieren
hx1b    stab    0,y       ; im Speicher ablegen, auf den Y zeigt
        dey               ; Y zeigt jetzt auf die Stelle davor
        rts               ; und weg
Beispielaufruf:
   
        ldd     #$AFFE    ; Hexzahl in Akku D laden
        ldy     #PUFFER+3 ; Position auf letzte Stelle im Puffer
                          ; der Puffer muss im Datenbereich reserviert sein
        bsr     hx4a      ; do it!
        ldy     #PUFFER   ; y --> Pufferanfang
        bsr     STOU      ; z.B. seriell ausgeben
Versuche
Copyright © FH München, FB 04, Prof. Jürgen Plate
Letzte Aktualisierung: 20. Feb 2011, 16:49:01