Hi,
geht schon, so von Betriebsschlosser zu Betriebsschlosser .
Ich bastel seit den 70gern mit Digitalelektronik, da sammelt sich was an...
Da die oberen 4 Bit vom Datenbus für andere Zwecke frei sind ( und benutzt werden ), kann man nicht so ohne weiteres Adressen ausgeben. Bei Ausgabe einer Adresse < 16 durch einfache zuweisung werden die oberen 4 Bit "zwangsgelöscht".

Bei Ausgabe der Adresse Bit für Bit kommt es zu unerwünschten zwischenstellungen- der µC brauch ja etwas Zeit zwischen den einzelnen Ausgaben, der Decoder ist aber schnell genug, "falsche" Adressen zu generieren, was eine vernünftige Adressierung nahezu verhindert.

Bei den oberen 4 Bit ist es ähnlich- nach der Adressausgabe jedesmal neu setzen führt zu ständigen ein/aus der angeschlossenen schaltungen.

Daraus folgt, Adressport immer als ganzes (Byteport) ansprechen.

Also die oberen 4 bit in einer Bytevariable zwischenspeichern -merken muss man sie sich ja sowieso- und die Adressen so(ähnlich) ausgeben:
Byteport= adr OR merkerbyte ( das meinte ich mit verODERN )

( Die oberen 4 Bit kann man per Bitportbefehl setzen/löschen, dann aber nicht vergessen, das Merkerbyte zu aktualisieren )

Besser aber, Merkerbyte ändern, und mittels Byteport= Merkerbyte AND 15 ( &b00001111 ) ausgeben. - das setzt die Adresse auf 0, deswegen hatte ich vorgeschlagen, diese freizulassen.
FAZIT:
Diese beiden Befehle reichen für Ausgaben auf den Adressport:
Byteport= adr OR merkerbyte ' -> gewünschte Adresse vorher in Variable adr schreiben, obere 4bit werden nicht verändert;
Byteport= Merkerbyte AND 15 ' -> setzt Adresse auf 0, Merkerbyte wird ausgegeben.

MfG Lutz

€:
Um Missverständnissen vorzubeugen: Die unteren 4 Bit des Merkerbyte freilassen, die sind für die Adressen "reserviert".