Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » U855 8Bit paralel einlesen mit IM2 » Themenansicht

Autor Thread - Seiten: -1-
000
21.01.2015, 23:31 Uhr
PIC18F2550

Avatar von PIC18F2550

Hallo

Ich habe mal versucht etwas zu zusammen zu Basteln.
Da ich noch keinen 880 im IM2 Mode betrieben habe, ist das für mich nur trockene Theorie.
Könnt Ihr mal drüberschauen ob alles Richtig ist.


Quellcode:
.Z80

ORG 4000H

PIOA    EQU 1CH         ; PIO A ??? KC85 ???


INIT:  DI
;        IM      2
        LD      HL,8002H      ; INT Vektoradr ??? wie ist der beim KC85/3 ???
;        LD      A,H            ; HIGH ADR. IN REG I ist doch bestimmt schon gemacht
;        LD      I,A             ; HIGH ADR. IN REG I ist doch bestimmt schon gemacht
        LD      DE,PTAS
        LD      (HL),E
        INC     HL              ; PIOB H z.Z. unbenutzt
        LD      (HL),D         ; PIOB H z.Z. unbenutzt
        ;---------------
        ; PIOA INI

        LD      A,04FH          ; MODE 1    01xx1111
        OUT     (PIOA+1),A

        LD      A,87H           ; Interruptmodus Einschallten
        OUT     (PIOA+1),A

        LD      A,L
        OUT     (PIOA+1),A      ; INTERRUPT VEKTOR PIOA

        LD      A,83H           ; Interrupt enable PIOA
        OUT     (PIOA+1),A

        EI
        RET

;------------------
; PIOA  INT Routine
PTAS:   DI
        PUSH    AF
        IN      A,(PIOA)
; Außwertung
        POP     AF
        EI
        RETI

END



Danke.
--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Aktuelle Projektdokumentationen

Dieser Beitrag wurde am 22.01.2015 um 14:56 Uhr von PIC18F2550 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
22.01.2015, 23:41 Uhr
Bert



>PIOA EQU 1CH ; PIO A ??? KC85 ???
Kanal A ist klar, aber welche PIO (Hardware) meinst Du hier?
Die interne Schnittstelle belegt 88h bis 8bh und auf dem M001 z.B. wird 04h bis 07h verwendet.

Außerdem würde ich mir die Adressen ausführlicher definieren:
PIOA_DATA EQU 04h
PIOB_DATA EQU 05h
PIOA_CTRL EQU 06h
PIOB_CTRL EQU 07h

>; IM 2
Beim KC85/3 wird IM 2 beim Startup ausgeführt.
Beim Interruptsystem muß man zwei Dinge unterscheiden:
die Interrupttabelle und die eigentliche Interruptfunktion.

Beim KC85/3[4..5] wird das Register I mit 01 geladen. Sprich als Interrupttabelle wird der Speicher von 0100h bis 01ffh verwendet.

Theoretisch kann man maximal 128 Interruptfunktionen dort eintragen.

Wenn jetzt Deine Interuptfunktion im Speicher bei 4000h steht und Du Tabelleneintrag 20h verwenden willst, schreibst Du bei I+20h (=0120h) die 4000h hin. In das Interruptvektorregister der PIO kommt dann die 020h rein.

Ob die PIO-Steuerbefehle (und Adressen) richtig sind, überblicke ich jetzt nicht, aber Dein Code sieht grundsätzlich nicht schlecht aus.

Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
23.01.2015, 00:11 Uhr
PIC18F2550

Avatar von PIC18F2550

Danke Bert.

Es ist keine interne PIO sondern eine die in einem Modul steckt.

Stimmt die Definition werde ich Anpassen. Sieht grausam aus.
Und zum Testen lungert ja noch eim M001 herrum.

Bei der Interupttabelle ab 0100h gibt es da einen Belegungsplan?
Oder wie muss ich einen neuen Vector einbinden.
Ich will keinen bestehenden Überschreiben das währe nicht gut.


Quellcode:
;*******************************************************************************
;*
;*    Keybord parallelinterface
;*
;*    (c)2015 by PIC18F2550
;*
;*******************************************************************************
        CPU    z80

;*******************************************************************************
; Hartware deffinition M001
PIOA_DATA EQU 04h
PIOB_DATA EQU 05h
PIOA_CTRL EQU 06h
PIOB_CTRL EQU 07h

;*******************************************************************************
; Start
        ORG 4000H
INIT:   DI
        LD      HL,01??H        ; INT Vektoradr ??? KC85 ???
                                ; ?? = einer von 128 Plätzen
        LD      DE,PTAS
        LD      (HL),E
        INC     HL
        LD      (HL),D

;*******************************************************************************
; PIOA INI
        LD      A,04FH          ; MODE 1    01xx1111
        OUT     (PIOA_CTRL),A
        LD      A,L
        OUT     (PIOA_CTRL),A   ; INTERRUPT VEKTOR PIOA
        EI
        LD      A,83H           ; Interrupt enable PIOA
        OUT     (PIOA_CTRL),A
        RET

;*******************************************************************************
; PIOA  INT Routine
PTAS:   DI
        PUSH    AF
        IN      A,(PIOA_DATA)
;*******************************************************************************
; Außwertung
        SET     8,(IX+8)        ; Neues Zeichen
        LD      (IX+13),A
        POP     AF
        EI
        RETI

;*******************************************************************************
; Programm ende
        END


--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Aktuelle Projektdokumentationen

Dieser Beitrag wurde am 23.01.2015 um 00:35 Uhr von PIC18F2550 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
23.01.2015, 00:35 Uhr
Enrico
Default Group and Edit


Die Belegung der Interrupttabelle steht im HB drin.
--
MFG
Enrico
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
23.01.2015, 01:03 Uhr
PIC18F2550

Avatar von PIC18F2550

Danke Enrico.
ist irgendwie doof wenn mann nicht die vorherigen Beiträge editieren kann aber verständlich.

Quellcode:
;*******************************************************************************
;*
;*    Keybord parallelinterface
;*
;*    (c)2015 by PIC18F2550
;*
;*******************************************************************************
        CPU    z80

;*******************************************************************************
; Hartware deffinition M001
PIOA_DATA EQU 04h
PIOB_DATA EQU 05h
PIOA_CTRL EQU 06h
PIOB_CTRL EQU 07h

;*******************************************************************************
; INT-Vector Tabelle ab 01D4H bis 01EEH
FRE0_INTV EQU 01D4H  ; Frei für Anwender-Interrupttabellen
FRE1_INTV EQU 01D6H  ; Frei für Anwender-Interrupttabellen
FRE2_INTV EQU 01D8H  ; Frei für Anwender-Interrupttabellen
FRE3_INTV EQU 01DAH  ; Frei für Anwender-Interrupttabellen
FRE4_INTV EQU 01DCH  ; Frei für Anwender-Interrupttabellen
FRE5_INTV EQU 01DEH  ; Frei für Anwender-Interrupttabellen
KPIA_INTV EQU 01E0H  ; Interrupt PIO Kanal A - Tastatur
KPIB_INTV EQU 01E2H  ; Interrupt PIO Kanal B - Frei
PIOA_INTV EQU 01E4H  ; Interrupt PIO Kanal A - Kassetteneingabe
PIOB_INTV EQU 01E6H  ; Interrupt PIO Kanal B - Tastatur
CTC0_INTV EQU 01E8H  ; Interrupt CTC Kanal 0 - Frei
CTC1_INTV EQU 01EAH  ; Interrupt CTC Kanal 1 - Kassettenausgabe
CTC2_INTV EQU 01ECH  ; Interrupt CTC Kanal 2 - Tondauer
CTC3_INTV EQU 01EEH  ; Interrupt CTC Kanal 3 - Tastatur

;*******************************************************************************
; Start
        ORG 4000H
INIT:   DI
        LD      HL,KPIA_INTV    ; INT Vektoradr
        LD      DE,PTAS
        LD      (HL),E
        INC     HL
        LD      (HL),D

;*******************************************************************************
; PIOA INI
        LD      A,04FH          ; MODE 1    01xx1111
        OUT     (PIOA_CTRL),A
        LD      A,L
        OUT     (PIOA_CTRL),A   ; INTERRUPT VEKTOR PIOA
        EI
        LD      A,83H           ; Interrupt enable PIOA
        OUT     (PIOA_CTRL),A
        RET

;*******************************************************************************
; PIOA  INT Routine
PTAS:   DI
        PUSH    AF
        IN      A,(PIOA_DATA)
;*******************************************************************************
; Außwertung
        SET     8,(IX+8)        ; Neues Zeichen
        LD      (IX+13),A
        POP     AF
        EI
        RETI

;*******************************************************************************
; Programm ende
        END


--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Aktuelle Projektdokumentationen

Dieser Beitrag wurde am 23.01.2015 um 01:04 Uhr von PIC18F2550 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
23.01.2015, 06:07 Uhr
Bert




Zitat:
PIC18F2550 schrieb
LD HL,KPIA_INTV ; INT Vektoradr


Damit killst Du aber die interne Tastaturroutine. Bzw. wenn Du auf der Originaltastatur eine Taste drückst, wird u.U. Deine Interruptroutine angesprungen.

Warum verwendest Du nicht FREx_INTV?

Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
23.01.2015, 06:47 Uhr
PIC18F2550

Avatar von PIC18F2550

Moin Bert,

KPIA_INTV ist schon einer der ersten freien FREx_INTV.

Hab es mal wegen der Verwechslungsgefahr mit den Modulbezeichnungen versucht.


Quellcode:
;*******************************************************************************
;*
;*    Keybord parallelinterface
;*
;*    (c)2015 by PIC18F2550
;*
;*******************************************************************************
        CPU    z80

;*******************************************************************************
; Hartware deffinition M001
M001_CTC0_DATA EQU 00h
M001_CTC1_DATA EQU 01h
M001_CTC2_CTRL EQU 02h
M001_CTC3_CTRL EQU 03h
M001_PIOA_DATA EQU 04h
M001_PIOB_DATA EQU 05h
M001_PIOA_CTRL EQU 06h
M001_PIOB_CTRL EQU 07h

;*******************************************************************************
; INT-Vector Tabelle ab 01D4H bis 01EEH (16Bit)
X000_FRE0_INTV EQU 01D4H  ; Frei für Anwender-Interrupttabellen
X000_FRE1_INTV EQU 01D6H  ; Frei für Anwender-Interrupttabellen
X000_FRE2_INTV EQU 01D8H  ; Frei für Anwender-Interrupttabellen
X000_FRE3_INTV EQU 01DAH  ; Frei für Anwender-Interrupttabellen
X000_FRE4_INTV EQU 01DCH  ; Frei für Anwender-Interrupttabellen
X000_FRE5_INTV EQU 01DEH  ; Frei für Anwender-Interrupttabellen
M001_PIOA_INTV EQU 01E0H  ; Interrupt M001 PIO Kanal A - Tastatur
M001_PIOB_INTV EQU 01E2H  ; Interrupt M001 PIO Kanal B - Frei
D001_PIOA_INTV EQU 01E4H  ; Interrupt D001 PIO Kanal A - Kassetteneingabe
D001_PIOB_INTV EQU 01E6H  ; Interrupt D001 PIO Kanal B - Tastatur
D001_CTC0_INTV EQU 01E8H  ; Interrupt D001 CTC Kanal 0 - Frei
D001_CTC1_INTV EQU 01EAH  ; Interrupt D001 CTC Kanal 1 - Kassettenausgabe
D001_CTC2_INTV EQU 01ECH  ; Interrupt D001 CTC Kanal 2 - Tondauer
D001_CTC3_INTV EQU 01EEH  ; Interrupt D001 CTC Kanal 3 - Tastatur

;*******************************************************************************
; Start
        ORG 4000H
M001_PIO_INIT:
        DI
        LD      HL,M001_PIOA_INTV    ; INT Vektoradr
        LD      DE,M001_PIOA_INT
        LD      (HL),E
        INC     HL
        LD      (HL),D
        LD      HL,M001_PIOB_INTV    ; INT Vektoradr
        LD      DE,M001_PIOB_INT
        LD      (HL),E
        INC     HL
        LD      (HL),D

;*******************************************************************************
; PIOA INI
        LD      A,04FH               ; MODE 1 (01xx1111)
        OUT     (M001_PIOA_CTRL),A
        LD      A,L
        OUT     (M001_PIOA_CTRL),A   ; INTERRUPT VEKTOR PIOA
        EI
        LD      A,83H                ; Interrupt enable PIOA
        OUT     (M001_PIOA_CTRL),A

;*******************************************************************************
; PIOB INI
; frei
        RET

;*******************************************************************************
; PIOA  INT Routine
M001_PIOA_INT:
        DI
        PUSH    AF
        IN      A,(M001_PIOA_DATA)
;*******************************************************************************
; Außwertung
        SET     8,(IX+8)        ; Neues Zeichen
        LD      (IX+13),A
        POP     AF
        EI
        RETI

;*******************************************************************************
; PIOA  INT Routine
M001_PIOB_INT:
        RETI

;*******************************************************************************
; Programm ende
        END


--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Aktuelle Projektdokumentationen
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
23.01.2015, 08:06 Uhr
susowa




Zitat:

Die Belegung der Interrupttabelle steht im HB drin.



Wenn man schon den Blick ins Handbuch wirft, sollte man möglichst auch das letzte nehmen. Dann erreicht man mit seinen Programmen eine höchstmögliche Kompatibilität und erspart sich eine Menge Ärger, wenn später Fehler suchen muss, weil das Programm u.U. nur auf einem KC85/4 und nicht auf einem KC85/5 läuft.

MfG susowa
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
008
23.01.2015, 11:18 Uhr
PIC18F2550

Avatar von PIC18F2550

Hallo susowa,

das Progrämmchen ist nur für den KC85/3.
Außerdem wollte ich nur wissen ob ich das Thema PIO und IN2 richtig verstanden habe.

Über die belegung der "INT-Vector Tabelle" für den KC85/4/5 hab ich mir noch keine Gedanken gemacht.
--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Aktuelle Projektdokumentationen

Dieser Beitrag wurde am 23.01.2015 um 11:20 Uhr von PIC18F2550 editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
009
23.01.2015, 22:42 Uhr
PIC18F2550

Avatar von PIC18F2550

Ich hab mir gerade mal die Handbücher angeschaut.

Wenn ich den Intvector auf den nächsten freien Platz nach 85/5 vergebe wird mir der Stack vom 85/3 diesen zerstören.

Ich kann nur bis 01D4H runter gehen daher muss ich mich entscheiden was da zukünftig nicht gehen soll.
--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Aktuelle Projektdokumentationen
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
010
24.01.2015, 11:04 Uhr
Bert



Ich sehe da mehrere Möglichkeiten:
- verschiedene Programmversionen für 85/3 und 85/5
- ein Programm mit Abfrage der CAOS-Version (siehe Handbuch 85/5, 3.5.3 Seite 104)
- verschieben des Stacks (UP SIXD)

Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
011
24.01.2015, 12:46 Uhr
PIC18F2550

Avatar von PIC18F2550

Bert das sprengt den Rahmen

zumal der rest des Programmes sowiso nicht auf dem KC85/4/5 läuft.

(andere Hartware und Origanisation)

ich werde das Teilchen im EPROM vom CAOS 4.3 versenken.
Und dort die alte Keybordroutine killen.
--
42 ist die Antwort auf die "Frage nach dem Leben, dem Universum und dem ganzen Rest"
Aktuelle Projektdokumentationen
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek