Hallo!
Kannst auch einen EPROM nehmen. Dem beschreibst du jede Speicherstelle zu den Adressleitungen so geschickt das du nacher eine Logik hast, hab ich auch einmal gemacht. Es geht wirklich. Dann hast du die Adressleitungen als Eingänge (je nach Grösse des EPROMS) und die Datenleitungen als Ausgänge (eben nur 8 ). Denke nur das ist auch eine interessante Alternative zu einem GAL wenn man keinen GAL-Programmierer hat sondern nur einen EPROM-Brenner wie ich damals
Das ist das Programm das ich damals geschrieben hatte unter QB 4.5 und es erzeugt durch die logischen Bedingungen am Anfang eine Logik für einen EPROM. Also ein HEX-File.
Code:
'EPROM-Typ definieren
EPROM.Max = 8191
'ORG-Anweisung schreiben
OPEN "c:\Ergebnis.DAT" FOR OUTPUT AS #1
PRINT #1, " .ORG 0"
CLOSE #1
ByteCounter = 1
First = 1
CLS
FOR Adresse = 0 TO EPROM.Max
LOCATE 1, 1
PRINT "Errechnete Bedingungen:"; (INT(((100 / 8191) * Adresse * 10)) / 10); "% "
'Aktuelle Adress-Bits errechnen
n = 1
Test = Adresse AND n: n = n * 2
IF Test > 0 THEN A0 = 1 ELSE A0 = 0
Test = Adresse AND n: n = n * 2
IF Test > 0 THEN A1 = 1 ELSE A1 = 0
Test = Adresse AND n: n = n * 2
IF Test > 0 THEN A2 = 1 ELSE A2 = 0
Test = Adresse AND n: n = n * 2
IF Test > 0 THEN A3 = 1 ELSE A3 = 0
Test = Adresse AND n: n = n * 2
IF Test > 0 THEN A4 = 1 ELSE A4 = 0
Test = Adresse AND n: n = n * 2
IF Test > 0 THEN A5 = 1 ELSE A5 = 0
Test = Adresse AND n: n = n * 2
IF Test > 0 THEN A6 = 1 ELSE A6 = 0
Test = Adresse AND n: n = n * 2
IF Test > 0 THEN A7 = 1 ELSE A7 = 0
Test = Adresse AND n: n = n * 2
IF Test > 0 THEN A8 = 1 ELSE A8 = 0
Test = Adresse AND n: n = n * 2
IF Test > 0 THEN A9 = 1 ELSE A9 = 0
Test = Adresse AND n: n = n * 2
IF Test > 0 THEN A10 = 1 ELSE A10 = 0
Test = Adresse AND n: n = n * 2
IF Test > 0 THEN A11 = 1 ELSE A11 = 0
Test = Adresse AND n: n = n * 2
IF Test > 0 THEN A12 = 1 ELSE A12 = 0
'Eing„nge definieren
MasterRxD = A0
Slave1RxD = A1
Slave2RxD = A2
Slave3RxD = A3
Slave4RxD = A4
MCRxD = A5
SelectA = A6
SelectB = A7
TF1Send = A8
'Ausg„nge vordefinieren bei FALSE
MasterTxD = 0
Slave1TxD = 0
Slave2TxD = 0
Slave3TxD = 0
Slave4TxD = 0
MCTxD = 0
'Logische Gleichung im EPROM (GAL/PAL-Logik)
'Abzweigung zum Microcontroller
MCTxD = MasterRxD
'Oberer 4-fach Schalter
IF SelectA = 0 AND SelectB = 0 AND MasterRxD = 1 THEN
Slave1TxD = 1
ELSE
Slave1TxD = 0
END IF
IF SelectA = 1 AND SelectB = 0 AND MasterRxD = 1 THEN
Slave2TxD = 1
ELSE
Slave2TxD = 0
END IF
IF SelectA = 0 AND SelectB = 1 AND MasterRxD = 1 THEN
Slave3TxD = 1
ELSE
Slave3TxD = 0
END IF
IF SelectA = 1 AND SelectB = 1 AND MasterRxD = 1 THEN
Slave4TxD = 1
ELSE
Slave4TxD = 0
END IF
'Unterer 4-fach Schalter
IF SelectA = 0 AND SelectB = 0 AND Slave1RxD = 1 THEN
Port9 = 1
ELSE
Port9 = 0
END IF
IF SelectA = 1 AND SelectB = 0 AND Slave2RxD = 1 THEN
Port9 = 1
ELSE
Port9 = 0
END IF
IF SelectA = 0 AND SelectB = 1 AND Slave3RxD = 1 THEN
Port9 = 1
ELSE
Port9 = 0
END IF
IF SelectA = 1 AND SelectB = 1 AND Slave4RxD = 1 THEN
Port9 = 1
ELSE
Port9 = 0
END IF
'Umschalter programmieren
IF Port9 = 1 AND TF1Send = 1 THEN
MasterTxD = 1
ELSE
MasterTxD = 0
END IF
IF MCRxD = 1 AND TF1Send = 0 THEN
MasterTxD = 1
ELSE
MasterTxD = 0
END IF
'Ausg„nge definieren
D0 = MasterTxD
D1 = Slave1TxD
D2 = Slave2TxD
D3 = Slave3TxD
D4 = Slave4TxD
D5 = MCRDI
D6 = 1
D7 = 1
'Ausg„nge errechnen
Datenbyte = 0
IF D0 > 0 THEN Datenbyte = Datenbyte + 1
IF D1 > 0 THEN Datenbyte = Datenbyte + 2
IF D2 > 0 THEN Datenbyte = Datenbyte + 4
IF D3 > 0 THEN Datenbyte = Datenbyte + 8
IF D4 > 0 THEN Datenbyte = Datenbyte + 16
IF D5 > 0 THEN Datenbyte = Datenbyte + 32
IF D6 > 0 THEN Datenbyte = Datenbyte + 64
IF D7 > 0 THEN Datenbyte = Datenbyte + 128
'Ausgangsbyte in Datei schreiben
'Format:
'-------
' .ORG Startadresse
' .BYTE Wert
' ...
OPEN "c:\Ergebnis.DAT" FOR APPEND AS #1
Wert$ = LTRIM$(STR$(Datenbyte))
PRINT #1, " .BYTE " + Wert$
CLOSE #1
NEXT Adresse
OPEN "c:\ERGEBNIS.DAT" FOR APPEND AS #1
PRINT #1, " .END "
CLOSE #1
END
Grüsse Wolfgang
Lesezeichen