Protokoll zum Z80-Projekt. Andreas Amann, Alexander Zahn

Ähnliche Dokumente
Übungsklausur Mikroprozessortechnik und Eingebettete Systeme I

Kapitel 18. Externe Komponenten

Aufgabe 2 - Erweiterung um PIC und Interrupts

Aufgabe 2 - Erweiterung um PIC und Interrupts

Mikroprozessortechnik Grundlagen 1

E Mikrocontroller-Programmierung

Datentechnik. Prinzipieller Aufbau eines Schnittstellenbausteins

Mikrocomputertechnik

Lösung 5. Mikroprozessor & Eingebettete Systeme 1

1,8V Flash and SRAM 28F3208W30

Microcomputertechnik

Parallel-IO. Ports am ATmega128

Name : Klasse : Punkte : Note :

Intelligenter Modemadapter für den PC

AVR Ein/Ausgabe. Inhaltsverzeichnis

Teil 6: PIC Studiengang Technische Informatik (TI) Prof. Dr.-Ing. Alfred Rożek. nur für Lehrzwecke Vervielfältigung nicht gestattet

Teil 1: Prozessorstrukturen

U5-2 Register beim AVR-µC

Kurzanleitung: 1. Anschüsse. MWCLightRGB by VoBo & HaDi-RC

GdI2 - Systemnahe Programmierung in C Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2006 U4.fm

Mini- Mikroprozessor-Experimentier-System. Version 1.0b vom :21. mit einem 8051-Mikrocontroller

B1 Stapelspeicher (stack)

LED Skalenbeleuchtung mit einem Arduino

MikroController der 8051-Familie

Mikrocomputertechnik. Thema: Der Aufbau des XC888-Mikrocontrollers -Teil 1 -

Mikrocomputertechnik. 6. Exceptionhandling ( Ausnahmebearbeitung)

Fachhochschule Kaiserslautern Fachbereich Angewandte Ingenieurwissenschaften WS2010/11. Zeitpunkt der Prüfung: Beginn: 10.

Teil 1: Prozessorstrukturen

GTP444. GSM-SMS-Fernschaltund Alarmmodul 4-Kanal. Programmierbar am PC mit Software. Kurzanleitung 1/2017. Seite 1 von 7

EDT-REFERAT Adressierungsarten

é Er ist software-transparent, d.h. der Benutzer braucht nichts von seiner Existenz zu wissen. Adreßbus Cache- Control Datenbus

i386 Interrupt-Deskriptortabelle (IDT)

Name: ES2 Klausur Thema: ARM Name: Punkte: Note:

Teil 1: Prozessorstrukturen

Ein- / Ausgabe- Ports

Mikroprozessor als universeller digitaler Baustein

Mikrocomputertechnik. Thema: Serielle Schnittstelle / UART

8. Beschreibung des Prozessors MSP 430

GRUNDLAGEN DER INFORMATIONSTECHNIK. Übungen TEIL 1 RECHNER

10. Die Adressierungsarten des MSP 430

AVR-Mikrocontroller in BASCOM programmieren, Teil 2

Stack, Stackpointer, Unterprogramm HP: 0 * 1 * 2 * 3 CAL UP1 4 * 5 * 6 CAL UP2 7 *... UP1: 30 * 33 RET UP2: 40 * 41 CAL UP1 42 * 43 RET

Name: ES2 Klausur Thema: ARM Name: Punkte: Note:

Unified-E Modbus Adapter

Folie 1. Folie 2. FH-Augsburg. FH-Augsburg

Kurzanleitung: 1. Anschüsse. MWCLightRGB 2013 by VoBo & HaDi-RC. HW-Version SW-Version 1.2x

Beschreibung: SPEICHER: GRUNDPLATINE AC 1:

2

Schaltungshinweise zum Linux Control System mit DIL/NetPC DNP/7520

Ein- Ausgabeeinheiten

Übung zu Betriebssystembau (Ü BS)

Klausur zur Mikroprozessortechnik

EX Slot PCI Box Zur Erweiterung um 4 PCI Anschlüsse für ExpressCard

3. Hardware CPLD XC9536 von Xilinx. CPLD / FPGA Tutorial

IR-Schaltinterface IR-001

SMP Übung 9 - Lösungsvorschlag

13.3 Datenpfade zur Befehlsdurchführung

Speicheraufbau des AT89C5131

05. Assembler-Programmierung. Datenstrukturen des ATMega32. Literatur

Studiengang Maschinenbau, Schwerpunkt Mechatronik (früher: Automatisierungstechnik) Seite 1 von 8

Einführung in AVR-Assembler

Einführung in AVR Assembler

Die Mikroprogrammebene eines Rechners


Grundlagen der Rechnerarchitektur

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

Rechnerarchitektur Atmega Vortrag Atmega 32. Von Urs Müller und Marion Knoth. Urs Müller Seite 1 von 7

E. Fehlermeldungen von PC-Bibliotheken

Konzepte von Betriebssystem- Komponenten Ausnahme- / Unterbrechungsbehandlung

Prozessor HC680 fiktiv

Inhaltsverzeichnis 1 Ein-Bit-Rechner Mikrorechentechnik-Grundlagen Das Mikrocontrollersystem ein Überblick am Beispiel MSP430F1232

Vorwort 8. Kap. 1: Grundlagen 10

Projektlabor. LCD Ansteuerung

Grundlagen der Informatik 2 Modul Systemnahe Programmierung in C (SPiC) Klausur am 25. Juli 2008

11. Die PC-Schnittstelle

Hardwareaufbau der Mikrocontroller der 51er -Familie

8051-Mikrocontroller-Familie

Betriebssystembau. 3. Übung. Michael Engel Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

Integrierte Schaltungen

Der Mikrocontroller beinhaltet auf einem Chip einen kompletten Mikrocomputer, wie in Kapitel

Operationsmodi des Timers Modus 0 : Ausschalten des Zählers

Kurzbeschreibung für den Kombi-BWS mit 80x24 und 64x32 Darstellung

Einführung in die Welt der Microcontroller

Programmierung von ATMEL AVR Mikroprozessoren am Beispiel des ATtiny13. Teil 8: gavrasmw und weitere Beispiele

a. Flipflop (taktflankengesteuert) Wdh. Signalverläufe beim D-FF

Grundlagen der Rechnerarchitektur. Ein und Ausgabe

MEphisto Scope 1 A D. Prozessor-Steuerung. Interner Daten-/Steuer-Bus. Digital I/O-Teil

Übungen für die Einführung in die Assemblerprogrammierung mit dem Prozessor c515c

Servo-Modul Version

Atmel AVR für Dummies

SMP Übung 2 1. Aufgabe

AVR-8-bit-Mikrocontroller Gruppe AVR-C-Projekte Teil AVR_PB_LED

Tutorium Rechnerorganisation

Programmierbarer Intervall-Timer 8253/8254 (PIT)

80C535-Mikrocontroller-Board im Streichholzschachtelformat

EX PCI & 2 PCI-E

2017/01/23 15:50 1/5 Bedienung

9. Assembler: Der Prozessor Motorola 68000

Temperaturmodul. Software. Bedeutung der Leuchtdioden. Kanal-LEDs. System-LEDs. Start nach Reset

Transkript:

Protokoll zum Z80-Projekt Andreas Amann, Alexander Zahn 27. August 2006

INHALTSVERZEICHNIS Inhaltsverzeichnis 1 Vorwort 2 1.1 Ziel des Projekts......................... 2 1.2 Was ist der Z80.......................... 2 1.3 Problemstellung.......................... 2 2 Versuchsaufbau 3 2.1 Einzelschritt-Generator..................... 3 2.2 Adressierung........................... 3 2.3 Interrupts............................. 4 2.4 Eingabe-Interface......................... 5 2.5 PIO................................ 5 3 Implementierung 5 4 Hinweise zur Erweiterung 7 5 Quellen 7 6 Anhänge 8 6.1 Quellcode Adressdecoder..................... 8 6.2 Quellcode Z80 Programm.................... 8 Seite 1

1 VORWORT 1 Vorwort 1.1 Ziel des Projekts Ziel des Projekt ist die Vermittlung der wesentlichen Konzepte eines Mikroprozessorsystems wie z.b. das Zeitverhalten, Kennenlernen der verschiedenen Adressierungsarten, die Befehlsausführung, das Interruptsystem und Verwendung von Periphere und Systembauelemente. 1.2 Was ist der Z80 Der Z80 ist ein 8-Bit Mikroprozessor der Firma Zilog, diese entstand durch einen abgewanderten Intel-Entwickler. Der Z80 kam 1976 auf den Markt und eroberte diesen schlagartig. Seine Vorteile liegen klar auf der Hand: Binärkompatibilität zum Intel 8080 einfachere Spannungsversorgung (+5V statt +-5V, +12V) eingebaute Refreshsteuerung für DRAM bessere Interruptfunktionen echte 16-Bit-Register einfachere Mnemonics günstiger Preis Wir verwenden in unserem Versuchsaufbau nicht den orginalen Z80, sondern den poplären Nachbau U880. Neben dem Prozessor steht uns eine Parallele- Input-Output-Einheit (PIO), eine Serielle-Input-Output-Einheit (SIO) und eine Zähl/Timer-Einheit (CTC) zur Verfügung. Der Z80/U880 verfügt über gute Zugänglichkeit zum Bus und der Möglichkeit in den sogenannten Einzelschritt-Modus zu gelangen. Somit ist er die ideale Versuchsplattform um die Funktionsweise eines Computer-Systems zu beobachten und zu verstehen. Die dabei vermittelten Grundkonzepte lassen sich auch auf die heutigen modernen Konzepte reflektieren. 1.3 Problemstellung Als konkretes Problem gilt es ein Schrittmotor aus einem 5,25 Zoll Diskettenlaufwerk anzusteuern. Hierbei generieren wir Signale, die vom Motor als Vollschritt erkannt werden. Es gibt jeweils eine Taste für einen Links- bzw. einen Rechtsschritt. Zusammengefasst: Seite 2

2 VERSUCHSAUFBAU Feste Schrittgeschwindigkeit Links- / Rechtsschritt Als Eingabe-Interface für unsere Projekt wollen wir entprellte Taster verwenden. 2 Versuchsaufbau 2.1 Einzelschritt-Generator Um den Prozessor in den sogenannten Einzelschritt-Modus zu bringen, benötigen wir ein /WAIT - Signal (ähnlich dem HWP3 Versuch: POST-Karte). 2.2 Adressierung RAM (2K) ROM (4K) PIO (Daten) PIO2 (Steuerung) Speicheraufteilung 8000h bis 87FFh (gültiger Speicherbereich, weil vorhanden) 0000h bis 0FFFh (gültiger Speicherbereich, weil vorhanden) XXX1h XXX3h Damit wir die einzelnen Komponenten gezielt ansteuern können, benötigen wir einen Adressdecoder. Über diesen geben wir Signale auf die entsprechenden Leitung zur Aktivierung des bestimmten Bausteins. Zur Unterscheidung von RAM und ROM wählen wir die unvollständige Dekodierung. D.h. wir werten aus dem Adressbereich nur A15 für die Auswahl von ROM bzw. RAM aus. Nach dem Einschalten der CPU greift diese auf die Adresse 0000h zu. Somit ist es sinnvoll A15 für die Auswahl des ROMs und /A15 für die Auswahl des RAMs zu verwenden. Sobald der Prozessor Daten lesen will wird RD = 0 und MEMRQ = 0 wenn auf den Speicher zugeriffen werden soll. Somit gilt für die Generierung des CS des ROMs:!CS =!MEMRQ und!rd und!a15 Und für das CE des RAMs gilt:!ce =!MEMRQ und A15 Seite 3

2 VERSUCHSAUFBAU Anzumerken ist noch, dass bei der Decodierung der Adressen nicht nur die gültigen Speicherbereiche angesprochen werden, die mit RAM-Speicher hinterlegt sind. Der Bereich der durch unseren Adressdecoder generiert wird umfasst zusätzlich zum gültigen Adressraum von 8000h bis 87FFh auch noch einen ungültigen Adressraum von 87FFh bis FFFFh, der überhaupt nicht mit RAM hinterlegt ist. Die PIO wird mit der Adresse XXX1h (A0 = 1) angesprochen. A0 wird bei der PIO für die Auswahl des Kanals A bei A0 = 0 und Kanal B bei A0 = 1 genutzt. Somit kann bei unserer Adressierung immer nur Kanal B angesteuert werden. Da wir sowieso nur Kanal B benutzen wollten, ist dies kein Nachteil. Jedoch ist die PIO-Adressierung bei der Erweiterung des Projekts nochmals zu überdenken, da diese den Projektausbau einschränkt. Das Problem ist nämlich, dass PIO, SIO und CTC die Adressen A0 und A1 zur Steuerung verwenden. Konsequenz wäre dann z.b. wenn ich das CS für die CTC über A3=1 generiere und dann ein Steuerwort an die CTC sende, das A1 = 1 beinhaltet, wird auch die PIO fälschlicherweise angesprochen. Besser ist es die Low-Bytes A7 bis A2 für die Auswahl zu verwenden. Somit könnte man z.b. das entsprechende CS für PIO bei A2=1, SIO bei A3=1 und CTC bei A4=1 generieren. Den Stackpointer initialisieren wir mit der Adresse FFFFh. Sinnvoller wäre es gewesen, den Stackpointer auf das Byte unmittelbar über den Stack befindliche Byte zu setzen. Da Z80 erst den Stackpointer dekrementiert und dann erst das Byte in den Speicher schreibt. 2.3 Interrupts Ein Mikroprozessor-System kann aus mehreren Hardware-Komponenten bestehen. Die meisten externen Hardware-Komponenten benötigen die CPU nur zu bestimmten Zeiten. Die Hardware fordert die CPU nur an, wenn sie gebraucht wird. Eine solche Anforderung bezeichnet man als Interrupt- Anfrage. Wir verwenden für unseren Versuchsaufbau den Interrupt-Modus 2 des Z80, d.h. wir arbeiten mit vektorisierten Interrupts. Für die Interrupt-Behandlung mittels vektorisierter Interrupts benötigen wir die Basisadresse der Interruptvektortabelle und einen Interruptvektor, welcher nur einen Offset zur Basisadresse darstellt. Die Basisadresse wird beim Aufsetzen des Z80 in den Interrupt-Modus 2 in das Interrupt-Vektor- Register geladen. Nach dem Einschalten und der Initialisierung unseres Systems befindet sich die CPU im Hauptprogramm. In unserem Hauptprogramm wird nichts ausgeführt, somit befindet sich die CPU in einer Art Haltezustand. Seite 4

3 IMPLEMENTIERUNG Mittels der von uns angeschlossenen Taster lösen wir über die PIO eine Interrupt-Anfrage aus. Nachdem die Interrupt-Anfrage bestätigt wurde, wird der Interruptvektor auf den Datenbus gelegt. Der von der PIO übergebene Interruptvektor wurde bei derer Programmierung festgelegt. Aus der Basisadresse und dem Interruptvektor wird eine 16-Bit-Adresse gebildet, diese verweist auf einen bestimmten Eintrag der Interruptvektortabelle. Dort befindet sich die absolute Speicheradresse der Interrupt-Service- Routine (ISR), welche jetzt ausgeführt wird. Nachdem die CPU die ISR abgearbeitet hat, befinden wir uns wieder im Hauptprogramm. 2.4 Eingabe-Interface Für den Versuchsaufbau benötigen wir 1 Reset-Taster 1 Einzelschritt-Taster 1 Taster für Linksschritt 1 Taster für Rechtsschritt Um einen störungsfreien Betrieb zu garantieren, müssen alle Taster entprellt werden. Dies lösen wird hardwaremäßig über eine Schmitt-Trigger- Schaltung. Wir verwenden hierfür einen 4093-Baustein, welcher 4 NAND- Schmitt-Trigger beinhaltet. Alternativ besteht auch die Möglichkeit die Taster softwaremäßig zu entprellen. 2.5 PIO Wir verwenden in unserem Projekt die PIO. Dies ist ein programmierbarer I/O-Baustein, der speziell für die Zusammennschaltung mit dem Z80 entwickelt wurde. Zum Initialisieren der PIO schickt man ihr spezielle Steuerwörter. Durch diese kann man die PIO entsprechend der Anforderungen programmieren/initialisieren. Um der PIO mitzuteilen, dass wir ein Steuerwort auf den Datenbus legen, wird die Adresse XXX3h (siehe Adressierung, PIO2) verwendet. Für einen lesenden oder schreibenden Zugriff auf die Datenbytes des Datenports B wird die Adresse XXX1h (siehe Adressierung, PIO) verwendet. Wir setzen die PIO im Modus 3 ein, da wir sie in einer Nicht-Handshake-Umgebung einsetzen. Die acht Bits des Ports B können somit in beliebiger Anordnung als Eingabe- oder Ausgangleitungen dienen. 3 Implementierung Wir verwenden für unsere Schrittmotorsteuerung Kanal B der PIO. Diese stellt uns 8 Ein/Ausgänge zur Verfügung. 4 Pins definieren wir als Ausgang Seite 5

3 IMPLEMENTIERUNG (an dieser Stelle wird der Treiber für den Schrittmotor angeschlossen) und 4 Pins definieren wir als Eingang, wobei jedoch nur zwei für das Interruptbehandlung maskiert sind. Diese beiden Pins sind High-Aktiv und mittels Oder-Logik (Intern in der PIO) verbunden. Im konkreten heisst dies, falls einer der beiden Taster (Links oder Rechts) gedrückt wurde, springen wir in die selbe ISR. Erst dort findet mittels Shift-Operationen und dem Carry-Flag eine Überprüfung statt welche Taste gedrückt wurde. Falls beide Taster gedrückt werden, wird der zuerst gedrückte ausgewertet. Je nachdem ob das Carry-Flag gesetzt wurde oder nicht (entspricht der Auswahl des Tasters) laufen dann getrennte Routinen ab, welche den Schrittmotor in die eine oder in die andere Richtung laufen lassen. Da wir den Motor im Vollschrittmodus betreiben, heisst dies, dass wir jeweils nur eine Spule des Schrittmotors gleichzeitig benutzen. Spule 1 Spule 2 Spule 3 Spule 4 Zustand 1 1 0 0 0 Zustand 2 0 1 0 0 Zustand 3 0 0 1 0 Zustand 4 0 0 0 1 Seite 6

5 QUELLEN Somit reicht es aus, wenn wir ein einzelnes Bit (dies muss natürlich eine 2er Potenz zwischen 2 0 und 2 3 sein) setzen. Durch den Tastendruck shiften wir dieses Bit eine Stelle höher oder niedriger. Abkürzung Erläuterung Links Steigende Flanke, durch Tastendruck der Linkentaste Rechts Steigende Flanke, durch Tastendruck der Rechtentaste Gleich Taste bleibt gedrückt oder kein erneuter Tastendruck Das somit erzeugte Bitmuster wird durch die PIO eins zu eins an den Treiber angelegt, von diesem verstärkt und dem Schrittmotor zugeführt. 4 Hinweise zur Erweiterung Bei der oben beschriebenen Implementierung entspricht eine Betätigung eines Tasters für Links- bzw. Rechtsschritt einem Vollschritt. Bei zusätzlicher Einbindung der CTC wäre es möglich durch diese mehrere Schritte pro Tastendruck generieren zu lassen. Jedoch sollte man hierbei das Zeitverhalten, mit der die Vollschritte aufeinander folgen, bedenken. Wird eine maximale Schrittgeschwindigkeit überschritten hat dies zu Folge, dass der Motor die Signale nicht mehr ordungsgemäß verarbeiten kann. 5 Quellen http://de.wikipedia.org/wiki/schrittmotor (Stand 11.5.2006) http://www-users.rwth-aachen.de/thorsten.ostermann/ (Stand 11.5.2006) http://de.wikipedia.org/wiki/z80 (Stand 17.8.2006) http://www.z80.info/ (Stand 17.8.2006) http://www.zilog.com/ (Stand 17.8.2006) Seite 7

6 ANHÄNGE James W. Coffron, Z80 Anwendungen, SYBEX-Verlag GmBH, Düsseldorf 1985 6 Anhänge 6.1 Quellcode Adressdecoder module az1 declarations cs,memrq,rd,a15,ce,pioce,a0 pin 19,2,3,4,18,17,5; equations!cs =!memrq &!rd &!a15;!ce =!memrq & a15;!pioce = a0; test_vectors ([memrq, rd,a15] -> cs) [ 0,0,0 ] -> 0 ; end az1; 6.2 Quellcode Z80 Programm ;Konstanten STACK.equ FFFFh RAM.equ 8000h ;2K RAM ROM.equ 0000h ;4K ROM PIO.equ 0001h PIO2.equ 0003h ISRPIO.equ 0200h.org 0000h ;PC auf Null IM 2 ; Interrupt Modus 2 LD A, 03h ; Highteil des Interruptvektors LD I, A LD SP, (STACK) ;Lade Stackpointer LD A,03h ; Sperren Interrupt Mode 3 Seite 8

6 ANHÄNGE DI ; Sperren OUT (PIO2),A ; Unsere PIO sperren LD a,0cfh out (PIO2),a ; Bitbetrieb Port A ld a, 11110000B out (PIO2),a ; Maske was Ein/ausgabe ist LD A, 02H OUT (PIO2),a ; Interrupt-Vektor 02 LD A,10110111b ; INT, OR,High, Maske Folgt,... OUT (PIO2),a LD A,00111111b ; Bit 0 (Rechter Taster),1 sind nicht maskiert Out (PIO2),a EI ; Freigeben des Interrupts ld d,01h ; Maske fr PIO eingabe ld b,1 ; init fr ausgabe main: ld a,a jp main.org 0302h ;Intertupt-Vektor-Tabelle.word ISRPIO.org ISRPIO ;Interrupt-Service-Routine DI in a,(pio) ;wert aus der pio lesen RLA ;eingelesenen wert von ausgabebits bereinigen jp C, AndererTaster rrc b jp M,rechts1 jp ausgabe ; Wert an PIO schreiben AndererTaster: rlc b ;links shift ld a,b sub 16 ;prfen ob zu viel geschiftet wurde jp z, links1 jp ausgabe links1: ld b,1 jp ausgabe rechts1: Seite 9

6 ANHÄNGE ld b,8 jp ausgabe ausgabe: ld a,b out (PIO),a ;aktuelles a ausgeben EI RETI.END... Seite 10