P R A K T I K U M 

M I K R O C O M P U T E R


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 Mikrocontoller 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 des unter Windows 95 laufenden DOS-Programms IDE11 (Integrated Development Environment for M68HC11). Dieses ermöglicht das Editieren, Assemblieren und Bereitstellen von Programmen für den M68HC11. Der Datentransfer zwischen PC und Zielrechner erfolgt über eine serielle Schnittstelle (COM-Port 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.

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. 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 Eigene Dateien

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

Die im Laufe eines Praktikums-Versuchs erstellten (name.a) oder erzeugten (name.lst) Dateien sind über den Ordner (Directory) Eigene Dateien des Arbeitsplatzes (Desktop) 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 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 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 ausgeführt.

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 code coloring aktiviert:



 

Übersetzen eines Quellprogramms (source code)


Menü Tools->Assemble 

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 evtl. erzeugte Fehlerliste wird im Output Fenster angezeigt. Durch Doppelklick auf  den angezeigten Fehler (Error: xxxxx) wird im Quellprogamm die fehlerhafte Zeile markiert.


Simulieren eines Zielprogramms(object code)

Menü Tools->Simulate
Das Zielprogramm wird in den Simulator geladen. Hier kann das Programm in einem simulierten PS11 System erprobt werden.



Menü 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).

Hinweise zur Programmerstellung

Jedes Programm muß 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)

rvec equ $FFFE ; Reset-Vektor

org data ; Beginn Datenbereich
. ; Variablen-Definitionen
.
.
org prog ; Beginn Programmbereich
main lds #stak ; Stackpointer setzen
.
. ; Befehle des Programms
.
. ; ggf. fixe Tabellen dahinter
.
org rvec ; Setzen Reset-Vektor
dc.w main
end

Der RAM-Speicher ab Adresse 0 bis Adresse 255 kann nicht genutzt werden (Bootloader bzw. Trace).

Terminalfenster

Menü Tools->Terminal
Der Datenverkehr zwischen dem PC und dem Zielrechner über die serielle Schnittstelle wird mittels dem Terminalprogramm Hyperterm am PC dargestellt. Damit kann der Datenverkehr über die SCI-Schnittstelle sichtbar gemacht werden.  

Testen eines Zielprogramms

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