Ein Nixieuhrprojekt mit 80C49 & 82C55 gefunden und benötige eine Korrekturlesung.

OP #7897636
Lesenswert?

Hallo!

Ich habe mit Wayback ein Projekt gefunden, es soll eine Uhr mit Nixieröhren sein. Diese soll aus einem 80C49 und 82C55 bestehen, sowie die Nixietreiber 4x 74141. Die 74141 könnte ich auch mit 4028 und einigen HV-Transistoren ersetzen, dies ist das kleinere Problem. Da die Page mit dem Uraltforum nun nicht mehr finde und auch nicht dessen Urheber kenne, wollte ich hier in der Runde mal fragen ob ihr mal über das Listing und der HEX-File drüberschauen könnt und vielleicht Fehler findet. Die Datein konnte ich noch retten, Schaltbild war nicht mehr verfügbar, sollte sich aber aus dem Listing herauslesen lassen.

Warum ich das bauen möchte? Ich hab die Teile grad rumliegen und möchte diese verwenden. Sogar das 2732er-EPROM habe ich noch zum Brennen.

Leider laufen meine uralten MCS-48-Softwaresammlungen nicht mehr auf Windows10 um dieses selbst prüfen zu können.

Danke für eure Hilfe im Vorhinein.

Angehängte Dateien:
#7897666
Lesenswert?

Mediafox F. schrieb:

und vielleicht Fehler findet.

Die bei INC und DEC veränderte Uhrzeit wird nur zurückgeschrieben bei Überlauf, so wie ich das sehe. Man sollte die jump-target vor das Zurückschreiben setzen.

Die Sekunden werden definiert aber nicht genutzt, könnte man streichen.

Die Tastenentprellung und -Wiederholtrate basiert auf der Langsamkeit der I2C Implementation und eben ob die veränderte Uhrzeit überhaupt zurückgeschrieben wird.

So ein 8255 hat eine erbärmlich geringe Treiberleistung, offiziell treibt der 8255 nur 2.5mA low und der 74141 zieht 3.2mA.

#7897904
Lesenswert?

Die MCS-48 würde ich auch nicht ohne Not vom Friedhof holen. Matt Millman hat sich das angetan: https://www.mattmillman.com/projects/an-intel-mcs-48-based-dual-temperature-sensor/

Die Hardware ist nach heutigen Massstäben schon sehr speziell und die SW nicht besser. Zitat von der Webseite: „As I worked my way through the implementation, I kept telling myself it would get easier. It didn’t.“

#7897918
Lesenswert?

Das ist ganz sicher kein 80c49 Assembler Quelltext sondern 80c51. Das spielt aber keine Rolle da sowieso nicht lauffähig.

Das Hauptprogramm wird mit ORG 0 gestartet, was zur Folge hat dass die I2C Routinen überschrieben werden. Ich habe selten so einen Murks gesehen. Ohne das jetzt genauer untersucht zu haben, schaut auch der Hex Code zumindest seltsam aus.

#7898040
Lesenswert?

Thomas Z. schrieb:

Das ist ganz sicher kein 80c49 Assembler Quelltext sondern 80c51.

Dann könnte man ja den AT89LP51RD2-20PU nehmen. Der hat einen UART-Bootloader, d.h. man braucht kein extra Programmiergerät dafür. Nur einen USB To RS232 TTL Converter Adapter.

https://www.amazon.de/BerryBase-USB-Adapterkabel-PL2303HX-Chipsatz-Schwarz-Rot-Gr%C3%BCn-Wei%C3%9F/dp/B09KYJZJYP?

https://www.digikey.de/de/products/detail/microchip-technology/AT89LP51RD2-20PU/3046512

#7898144
Lesenswert?

Das ist kein Programm, sondern nur mal eben etwas, wo jemand schnell mal was ausprobieren wollte, zuzüglich später hinein kopierten Code, der (in eine alte Datei) schnell mal irgendwohin musste, als dieser Jemand sich anderem zuwandte.

Soweit ich mich erinnere, fing in meiner Jugend ein MCS51-Assemblerprogramm grundsätzlich mit einem "ljmp main" an, gefolgt von der mit "reti" aufgefüllten Tabelle mit den Interruptvektoren. Das vermisse ich hier.

Jch kann mich rudimentär erinnern, dass man bei MCS51 die Wahl zwischen Stackgröße und Registerbänken für einen schnelleren Kontexwechsel bei Interrupts hatte. Auch gab es so was wie direkt und nur indirekt adressierbares SRAM, das man in späteren Versionen für den Stack nutzen konnte. Lange Rede, kurzer Sinn: in einem "richtigen" Programm würde wohl irgendwo der / die Stackpointer initialisiert werden.

Bei meinen I2C-Versionen waren viele NOPs nötig, um den Datentransfer auf eine geeignete Geschwindigkeit zu reduzieren. Es geht aber, bei reduzierter Oszillatorfrequenz, wahrscheinlich auch ohne NOPs. Da es "8255" heißt, und nicht "82C55", tippe ich mal auf NMOS-Versionen von beidem. (Minimale Oszillatorfrequenz 2 MHz?) Vielleicht in einer Schaltung aus dem ganz frühen Elektor-Universum?

MOV A, #PCF8563_ADDR CALL I2C_WRITE_BYTE

Das kommt mir suspekt vor. Bei mir wäre ein 8255 im Adressraum eingebunden gewesen und mit movx angesprochen worden.

#8047342
Lesenswert?

Michael schrieb im Beitrag #7898144: ...

Jch kann mich rudimentär erinnern, dass man bei MCS51 die Wahl zwischen Stackgröße und Registerbänken für einen schnelleren Kontexwechsel bei Interrupts hatte. Auch gab es so was wie direkt und nur indirekt adressierbares SRAM, das man in späteren Versionen für den Stack nutzen konnte. Lange Rede, kurzer Sinn: in einem "richtigen" Programm würde wohl irgendwo der / die Stackpointer initialisiert werden.

...

Der 8048 hatte einen 8-Level Semi-Hardware-Stack: Ein 3-Bit SP der Teil des PSW (Status-Registers) ist und fix auf RAM-Adressen 08-23 zeigt, mit dem einzigen Unterschied zum klassischen PIC, dass man ihn theoretisch durch Neuladen des PSW überschreiben kann.

Hier das Manual zum MCS-48 https://bitsavers.trailing-edge.com/components/intel/8048/9800270D_MCS-48_Family_Users_Manual_Jul78.pdf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren