| LC-80 PIO-Port Kanal A auf Parallel-Ausgabe ohne Interrupt |
|
|
Letztmalig dran rumgefummelt: 10.01.14 21:16:40 |
|
|
|||||
|
|
|
Eigene Aufgabe 1 Systembausteine programmieren: ein PIO-Kanal soll auf Byte-Ausgabe programmiert werden und ein entsprechendes Bitmuster senden.
Vorbetrachtungen:
die Taktfrequenz des LC-80 beträgt 900 kHz ein Kanal kann bis zu einem 0-Durchlauf maximal 255 × 255 = 65025 Impulse verarbeiten
900.00 : 65025 = 13,8408 d.h., alle rund 1/14 Sekunden gibt das einen Impuls am Zählerausgang
Pseudocode zum Programm:
Kanal 0 initialisieren - Kanal 0 mit max. Vorteiler und Zeitkonstante
| marke | pseudocode |
| registerpaar HL startadresse der einlesevorgänge (hier SETBASE COUNTER) | |
| Kanal initialisieren | |
| Zeitkonstante 0FFH auf Kanal 0 schreiben | |
| register E anzal der einlesevorgänge (hier 255D) | |
| register C kanaladresse für CTC-Kanal 0 (hier ECH) | |
| read: | register B verzögerungszeit zum CTC-Kanal einlesen (hier 01H) |
| delay: | decrementiere B und springe zu delay, wenn nicht 0! |
| aktuellen rückwärtszählerstand einlesen | |
| aktuellen rückwärtszählerstand auf aktuelle speicherzelle schreiben | |
| speicherplatzadresse incrementieren | |
| elementezähler decrementieren | |
| wenn nicht alle Elemente, dann neu einlesen (sprung zu read) | |
| end |
| Zeile | Marke | Block | Adresse | Hex-Code | Assembler-Code | Kommentar |
| 0001 | ORG 02000H | |||||
| 0002 | INIT | 02000H | 21 1B 20 | LD HL,COUNTER | ;Zeiger auf ersten Speicherplatz | |
| 0003 | 02003H | 1E FF | LD E,0FFH | ;Anzahl der Einlesevorgänge | ||
| 0004 | 02005H | 0E EC | LD C,0ECH | ;Kanaladresse für CTC-Kanal 0 | ||
| 0005 | 02007H | 3E 25 | LD A,025H | ;CTC Kanalsteuerwort | ||
| 0005 | 02009H | ;Steuerwortkennung Bit 0 gleich "1" | ||||
| 0005 | ;kein Kanal-RESET - Bit 1 gleich "0" | |||||
| 0005 | ;Zeitkonstante folgt Bit 2 gleich "1" | |||||
| 0005 | ;kein externer TRIGGER - Bit 3 gleich "0" | |||||
| 0010 | ;SLOPE L-Flanke - Bit 4 gleich "0" | |||||
| 0011 | ;256/16 - Vorteiler 256 - Bit 5 gleich "1" | |||||
| 0012 | ;MODE Zähler - Bit 6 gleich "1" | |||||
| 0013 | ;kein Interrupt EI/DI Bit 7 gleich "0" | |||||
| 0014 | 02009H | ED 79 | OUT (C),A | ;Steuerwort auf Kanladresse | ||
| 0015 | 0200BH | 3E FF | LD A,0FFH | ;Zeitkonstante laden | ||
| 0016 | 0200DH | ED 79 | OUT (C),A | ;Zeitkonstante auf Kanladresse | ||
| 0017 | READ: | 0200FH | 06 01 | LD B,001H | ;Zeitverzögerung bis zum nächsten Einlesen | |
| 0018 | DELAY: | 02011H | 10 FE | DJNZ DELAY | ;Dekrement B und Sprung Zeitverzögerung | |
| 0019 | 02013H | ED 78 | IN A,(C) | ;aktuellen Counterstand einlesen | ||
| 0020 | 02015H | 77 | LD (HL),A | ;Zählerstand auf RAM schreiben | ||
| 0021 | 02016H | 23 | INC HL | ;nächste Speicherzelle einstellen | ||
| 0022 | 02017H | 1D | DEC E | ;Elementezähler decrementieren | ||
| 0023 | 02018H | 20 F5 | JR NZ,READ | ;wenn nicht alle Elemente, dann neu einlesen | ||
| 0024 | 0201AH | 76 | HALT | ;wird erreicht, wenn alle 256 Elemente eingelesen sind | ||
| 0025 | ||||||
| 0026 | COUNTER: | 0201BH | SETBASE COUNTER | ;Tabelle für eingelesene Werte | ||
| 0027 | 0201BH | 00 | DEFB 000H |
Beispiel für eine kleine Anweisungstabelle in vollständiger Mnemoic-Codierung
|
zur Hauptseite |
© Samuel-von-Pufendorf-Gymnasium Flöha | © Frank Rost am 9. Januar 2014 um 17.47 Uhr |
|
... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-) „Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“ Diddi Hallervorden, dt. Komiker und Kabarettist |