Forum: Mikrocontroller und Digitale Elektronik Interrupt bei Ampelsteuerung 8086


von Fred (masterbuilder248)


Angehängte Dateien:

Lesenswert?

Hallo.

Ich arbeite an einer Ampelsteuerung im Assembler 8086, jedoch ein 
Problem besteht. Obwohl der Code funktioniert, möchte ich eigentlich, 
dass der Interrupt ISR8 nur die Generierung des Zeittakts beinhalten 
soll. Jedoch funktioniert es nicht ordentlich, wenn ich die Tag <-> 
Nacht Umschaltung und die anderen Funktionen rausnehme und in den 
Hauptprogramm übertrage. Habt ihr eine Idee?

von Nemopuk (nemopuk)


Lesenswert?

Bernd S., bist du es?

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Nemopuk schrieb:
> Bernd S., bist du es?

Würd' ich auch sagen. Das typische Muster ist da: inkompetente 
Verwendung uralter Assembler-Fragmente.

von Fred (masterbuilder248)


Lesenswert?

Ich bin neu mit der Sache. Hilfe wäre schon nett

von Klaus F. (klaus27f)


Lesenswert?

Fred schrieb:
> im Assembler 8086

ahhhhhh brrrrrrr, wer tut sich sowas an ?

Da fehlt bestimmt ein segment override prefix.

von Vanye R. (vanye_rijan)


Lesenswert?

Klingt nach Laborpraktikum Mikrocontrollertechnik oder wie das damals 
hiess. Aber ich haette gedacht so nach 25Jahren waere die Hardware mal 
langsam Geschichte. Irgendwie muss ist gerade an das 
Weston-Normalelement im Messtechnikpraktikum im wurmstichigen 
Holzgehaeuse denken das nix gewogen hat weil da einer einen modernen 
Spannungsregler eingebaut hatte....

Vanye

von Gunnar F. (gufi36)


Lesenswert?

Fred schrieb:
> Ich bin neu mit der Sache. Hilfe wäre schon nett

Das heißt, du fängst wirklich gerade NEU mit ASM8086 an? Warum zur 
Hölle? Ich kann die Nostalgie verstehen, mit altem Zeugs nochmal zu 
arbeiten, da kommen Erinnerungen hoch, für mich an meine Zeit 1989 an 
der Uni. Aber ein Neuanfang, da würde ich anderes empfehlen. Wenn das 
Ergebnis dein Ziel ist, lass dir hier eine geeignete Plattform 
empfehlen. Ich kenne mich mit dem Ding nicht aus, aber glaube Arduino 
wäre geeignet. Simpel, schnell in Betrieb und nach wenigen Minuten erste 
Erfolgserlebnisse. Und am Ende kriegt man sogar überraschende 
Integrationen hin, ohne viel Arbeit. Und noch dazu viel Unterstützung, 
die sitzt zum 8086 eher schon beim Entenfüttern ;-)

von Peter (pittyj)


Lesenswert?

Ich habe vor 40 Jahren mit Assembler mein Geld verdient. Die Module 
waren auch oft an die 1000 Zeilen lang.
Pflicht war allerdings, dass jede Zeile kommentiert wurde, so dass man 
verstehen kann, warum ein Wert in ein Register geschrieben wird.

Das ist bei diesem 20 Zeiler nicht der Fall.
z.B.
add cs:index, 2

Warum 2? Ok, ist die kleinste Primzahl. Aber warum nicht 17?

Fazit: mit so einem unkommentierten Sourcecode beschäftige ich mich nur 
10 Sekunden. Dann ist der im Müll.

von Nemopuk (nemopuk)


Lesenswert?

Vanye R. schrieb:
> Aber ich haette gedacht so nach 25 Jahren waere die Hardware mal langsam
> Geschichte.

Der 8086 schon viel länger Geschichte.

: Bearbeitet durch User
von Thomas S. (thommi)


Lesenswert?

Nun, im Geschichtsunterricht musste ich mal sowas wie die Schlacht bei 
den Termophylen, oder wie man das immer schreibt lernen. das hat mich 
aber sowas von gar nicht interessiert, bringt auch nichts für die 
weitere Zukunft.

Assembler auf einem Fossilprozessor ist da sinnvoller, sich damit zu 
beschäftigen. Die heutigen OS machen das im Hintergrund, aber es ist 
eben interessant, wie da die Daten verschoben werden.

Ich mag Assembler nicht, ebenso wie C mit den blöden Klammern {}. Habe 
mal einen Einplatinenrechner mit einem Z80 geschenkt bekommen, den man 
mit einer Tastatur von 1-9-A-F, also Hex programmieren konnte. RS232 
hatte der auch, hatte aber nur einen TI99/4A und war damals noch 
ahnungslos.

EDTASM habe ich mal auf dem Gymnasium für den Z80 auf dem Tandy gelernt, 
aber Basic war für mich immer intuitiver als ASM.

Als ich dann mal meinen ersten PC (486/sx25) kaufte, habe ich den 
Einplatinenrechner mal wieder aktiviert und konnte da auch Programme 
draufschicken.

Wolfgang R. kennt den bestimmt, habe aber gerade kein Foto davon.

Jedenfalls gab es da keine grossen Möglichkeiten, und der Rechner 
verschwand wieder im Lager. Dann war lange Zeit nichts mit Prozessoren, 
bis ich zufällig auf den ATMEL stiess, und das in Verbindung mit Bascom.

Da war ich wieder zu Hause. Damit komme ich gut zurecht, da ich eben in 
der Schule neben .asm auch LNW-Basic gelernt habe und auf dem TI99 dem 
nicht unbedingten Konkurrenten des C64 eben auch Basicprogramme schrieb. 
In C müsste ich mich erst wieder reinarbeiten.

OK, viel Text. Wer mit dem Z80 oder vorherigen Prozessoren zu tun hatte, 
welche mit .asm programmiert wurden, der darf das doch auch weiter 
betreiben, und wenn sich heute jemand für das Thema interessiert, warum 
sollte er nicht hier mal anfragen, ohne gleich eine Breitseite zu 
bekommen, dass .asm schlecht ist, oder nicht mehr zeitgemäss?

von Rahul D. (rahul)


Lesenswert?

Thomas S. schrieb:
> Nun, im Geschichtsunterricht musste ich mal sowas wie die Schlacht bei
> den Termophylen, oder wie man das immer schreibt lernen.
Sowas kann man googlen.

> das hat mich
> aber sowas von gar nicht interessiert, bringt auch nichts für die
> weitere Zukunft.

So, wie alle anderen Dein Text hier?!

von Thomas W. (Gast)


Lesenswert?

Ich weiss natuerlich nicht, warum Du Dir unbedingt den 8086 antun 
willst. Aber es gibt Leute, die stehen auf Schmerz...

Damals (TM) hatten die Borland-Produkte einen guten Ruf (Assembler, 
Debugger, Pascal und C). Der Debugger war (um Klassen) besser als die 
Produkte von Microsoft.

Die Borland-Produkte findet man z.B. bei Archive.org.

P.S.: Der Assembler konnte auch MASM-Quellen verarbeiten, war damals ein 
USP (Unique selling Point)

von Peter D. (peda)


Lesenswert?

Fred schrieb:
> Obwohl der Code funktioniert

Na wenn Du das sagst.
Keinerlei Funktionsbeschreibung, keine Kommentare, wie soll das jemand 
verstehen, der nicht in Deinen Kopf schauen kann?

Wieviel Ampeln, wieviel Tasten, wie werden die angesteuert, wie soll der 
konkrete Ablauf sein. Fragen über Fragen.

Läuft das Bare Metal oder muß man eine .com oder .exe erzeugen?

Der Titel ist aber ein schönes Clickbait, da schauen bestimmt viele 
völlig verdutzt rein.

von Peter D. (peda)


Lesenswert?

Fred schrieb:
> Ich bin neu mit der Sache. Hilfe wäre schon nett

Ich fürchte, da kommst Du 30 Jahre zu spät, jemanden zu finden, der sich 
damit noch auskennt.
Ich kann mich ganz dunkel daran erinnern, daß es mal in den 
Computerzeitschriften Listings gab, die man in Debug eintippen mußte.

Weitaus bessere Chancen hättest Du mit einen Arduino Sketch (.ino). Dann 
könnte man sogar kleine LED-Ampeln anschließen und als Kreuzungmodell 
anordnen.

von Vanye R. (vanye_rijan)


Lesenswert?

> Der 8086 schon viel länger Geschichte.

Aber so im Unibetrieb halten sich so alte Sachen manchmal laenger. Und 
ehrlich waere ich Professor dann wuerde es da auch nur so alte Sachen 
geben. Aus zwei Gruenden:

1. Oftmals viel besser dokumentiert weil das damals halt Standard war 
und Buecher mit Liebe und Sachverstand geschrieben wurden. Wenn man 
lernen will geht das damit besser als mit einem hingeschluderten BOD von 
Amazon.

2. Weil heute exotisch, finden die Studenten da nix mehr so einfach im 
Internet wo sie abschreiben koennen. Ich wuerde jetzt z.B mal nach 
Ampelsteuerung 8086 suchen und wenn ich dann hier geposteten Source 
finde der danach 1:1 in der Ausarbeitung auftaucht dann wuerde der 
Student bei mir antanzen und haette dann fuenf schlimme Minuten...


Vanye

von Udo S. (urschmitt)


Lesenswert?

Peter D. schrieb:
> Na wenn Du das sagst.
> Keinerlei Funktionsbeschreibung, keine Kommentare, wie soll das jemand
> verstehen, der nicht in Deinen Kopf schauen kann?

Hat doch prima funktioniert.
Neu angemeldet, ein Stück uralten 8088 Code reingeworfen und schon läuft 
der Thread.
Mein Trollometer steht am Anschlag dass sich die Nadel schon verbiegt 
(Ist noch analog).

von Thomas S. (thommi)


Lesenswert?

Rahul D. schrieb:
> So, wie alle anderen Dein Text hier?!

Muss ich dich nun mit Plural ansprechen, da du dich mit allen anderen 
identifizierst? Das werde ich mit Sicherheit nicht machen, und antworten 
werde ich dir auch nicht mehr hier in diesem Thread, um da diesen nicht 
zu OT zu leiten, wie es normalerweise hier so üblich ist.

von Rahul D. (rahul)


Lesenswert?

Vanye R. schrieb:
>> Der 8086 schon viel länger Geschichte.
>
> Aber so im Unibetrieb halten sich so alte Sachen manchmal laenger. Und
> ehrlich waere ich Professor dann wuerde es da auch nur so alte Sachen
> geben. Aus zwei Gruenden:
>
> 1. Oftmals viel besser dokumentiert weil das damals halt Standard war
> und Buecher mit Liebe und Sachverstand geschrieben wurden. Wenn man
> lernen will geht das damit besser als mit einem hingeschluderten BOD von
> Amazon.
Auf Papier...

> 2. Weil heute exotisch, finden die Studenten da nix mehr so einfach im
> Internet wo sie abschreiben koennen. Ich wuerde jetzt z.B mal nach
> Ampelsteuerung 8086 suchen und wenn ich dann hier geposteten Source
> finde der danach 1:1 in der Ausarbeitung auftaucht dann wuerde der
> Student bei mir antanzen und haette dann fuenf schlimme Minuten...
Bei uns flogen die Lösungen auf einem Fachschaftserver rum.
Das wussten auch die Profs.

Wir hatten als Mikrocontreoller-Boards zur Übung damals welche mit 
80C535.
Da steckten AVR noch in den Kinderschuhen. IDE für PIC waren auch 
horrende teuer. Da kauft man als Hochschule nicht einfach mal eine 
handvoll neuer Systeme. Dazu kam dann noch das KnowHow der Laborings.

von Michael B. (laberkopp)


Lesenswert?

Fred schrieb:
> Obwohl der Code funktioniert

Tut er nicht.

Fred schrieb:
> Habt ihr eine Idee?

Nach Ablauf der Zeit (sekunde) für einen Zustand (index) springst du aus 
der Interrupt-Routine isr_8 nach main an statt return from interrupt 
RETI.

Damit läuft dein stack sonstwohin.

Klaus F. schrieb:
> wer tut sich sowas an ?

Für Assembler nimmt man wohl besser einen einfachen Prozessor. Eben was 
50 Jahre altes wie 8086. Bloss keinen modernen Befehlssatz wie AMD64. 
Noch einfacher wäre wohl 6502 oder 68HC11 oder 8051, aber da hat man 
keine Plattform die Assembler  Editor etc enthält.

Rahul D. schrieb:
> welche mit 80C535

Brt, DER ist wirklich Obfurscation^8

von Gunnar F. (gufi36)


Lesenswert?

Michael B. schrieb:
> Nach Ablauf der Zeit (sekunde) für einen Zustand (index) springst du aus
> der Interrupt-Routine isr_8 nach main an statt return from interrupt
> RETI.

Respekt Michael!

Michael B. schrieb:
> Noch einfacher wäre wohl 6502 oder 68HC11 oder 8051, aber da hat man
> keine Plattform die Assembler  Editor etc enthält.

Ich habe vor etwa 10 Jahren meien Einstieg in uC mit 8051 und der 
"Toolchain" Notepad++ und Asem51 gemacht. Und war sehr begeistert von 
den Mögklichkeiten. Bis ich dann C lernte.

von Peter D. (peda)


Lesenswert?

Gunnar F. schrieb:
> Ich habe vor etwa 10 Jahren meien Einstieg in uC mit 8051 und der
> "Toolchain" Notepad++ und Asem51 gemacht. Und war sehr begeistert von
> den Mögklichkeiten.

Ja, ich fand dessen Befehlssatz mit Abstand am besten durchdacht.
MUL, DIV konnte kaum eine anderer 8-Bitter und die Bitbefehle, sowie 
Tabellenzugriffe (MOVC A, @A+DPTR) erleichtern das Programmieren 
erheblich. Auch Schleifen und Vergleiche (DJNZ, CJNE) ermöglichen sehr 
kompaktes Programmieren.
Sehr schön war auch der AT89C2051 für kleinere Projekte.

Als ich mir viel später mal die PIC12 Familie anschaute, überkam mich 
das kalte Grausen.

von Peter D. (peda)


Lesenswert?

Michael B. schrieb:
> 8051, aber da hat man
> keine Plattform die Assembler  Editor etc enthält.

Gibt es als Freeware zum Download:
https://www.batronix.com/shop/software/uC51/c-compiler.html

von Klaus F. (klaus27f)


Lesenswert?

Peter D. schrieb:
> Als ich mir viel später mal die PIC12 Familie anschaute, überkam mich
> das kalte Grausen.

Seit mehr als 15 Jahren programmiere ich Pic16 und Pic12, sogar Pic10.
Noch niemals habe ich dabei auch nur eine Zeile in Assembler codiert.
Die C compiler sind bereits erfunden.

Der xc8 passend zu Mplabx funktioniert und ist in den niedrigen 
Optimierungsstufen kostenfrei.
Dazu komme ich bisher mit dem "alten" Pickit3 aus, ein Originales sowie 
der fast identisch aussehende Klon funktionieren beide.

von Michael B. (laberkopp)


Lesenswert?

Peter D. schrieb:
> Michael B. schrieb:
>> 8051, aber da hat man
>> keine Plattform die Assembler  Editor etc enthält.
>
> Gibt es als Freeware zum Download:
> https://www.batronix.com/shop/software/uC51/c-compiler.html

Ich meine: auf dem uC. Nicht Cross.

Bei der Gelegenheit: "This article is no longer available."

: Bearbeitet durch User
von Roland F. (rhf)


Lesenswert?

Hallo,.
Michael B. schrieb:
> Ich meine: auf dem uC. Nicht Cross.

Gab es das mal, eine Entwicklungsumgebung, die auf einem 
8-Bit-Controller lief?

Michael B. schrieb:
> Bei der Gelegenheit: "This article is no longer available."

Kann aber immer noch heruntergeladen werden.

rhf

Beitrag #7908183 wurde von einem Moderator gelöscht.
von Michael B. (laberkopp)


Lesenswert?

Roland F. schrieb:
> Gab es das mal, eine Entwicklungsumgebung, die auf einem
> 8-Bit-Controller lief?

Es gibt es zumindest auf dem 8088, den er als Assemblertarget gewählt 
hat.

Da heutige uC dicker sind als alte PC ist eher die Umgebung (hat der uC 
Tastatur und Bildschirm?) das Problem.

von Joachim B. (jar)


Lesenswert?

Vanye R. schrieb:
> Aber so im Unibetrieb halten sich so alte Sachen manchmal laenger.

a. weil sie es müssen
b. weil Berufungszulagen auch gerne mal widerrufen werden abhängig von 
Haushaltskasse.
c. weil manche mit alten Messmitteln erscheinen die sie vorher schon 
hatten.

von Thomas Z. (usbman)


Lesenswert?

Michael B. schrieb:
> Bei der Gelegenheit: "This article is no longer available."

Roland F. schrieb:
> Kann aber immer noch heruntergeladen werden.

Richtig runterladen geht noch, man kann nur nicht mehr die Vollversion 
kaufen.
Da gibt es aber Medizin. Soweit mir bekannt ist ist Herr Wickenhäuser 
vor einigen Jahren verstorben.

von Flunder (flunder)


Lesenswert?

Wenn ich denn doch mal in den Code vom Anfang rein schaue, fällt mir 
gleich auf, dass da im Interrupt fleißig Register überschrieben werden, 
ohne sie zu sichern. Dadurch ändern sich diese für das Hauptprogramm 
völlig unvorhersehbar. Dabei kommt eigentlich nie was raus, das etwas 
taugt.

Und sagt nicht : mein C-Compiler hätte das für mich gemacht. Ja, das 
schon, aber beim Zugriff auf globale Variablen aus mehreren Threads 
schießt sich der, der nicht gelernt hat drauf zu achten, genauso ins 
Knie.

von Peter D. (peda)


Lesenswert?

Thomas Z. schrieb:
> Soweit mir bekannt ist ist Herr Wickenhäuser
> vor einigen Jahren verstorben.

Kann aber nicht lange her sein.

https://de.linkedin.com/in/juergen-wickenhaeuser-06a1411a9

von Thomas Z. (usbman)


Lesenswert?

Flunder schrieb:
> Wenn ich denn doch mal in den Code vom Anfang rein schaue, fällt mir
> gleich auf, dass da im Interrupt fleißig Register überschrieben werden,
> ohne sie zu sichern.

nun ja er benutzt pusha / popa zum retten der Register ist soweit ich 
mich erinnere ab 186 /V40 verfügbar. Das kann also schon funktionieren.

von Rahul D. (rahul)


Lesenswert?

Peter D. schrieb:
> Als ich mir viel später mal die PIC12 Familie anschaute, überkam mich
> das kalte Grausen.

So wie mich der Einstieg in python (wobei ich PIC auch nicht wirklich 
ag).

von Nemopuk (nemopuk)


Lesenswert?

Es wäre gut, wenn der Fred sich an seiner eigenen Diskussion beteiligen 
würde.

von Spess53 .. (hardygroeger)


Lesenswert?

Hi

>Es wäre gut, wenn der Fred sich an seiner eigenen Diskussion beteiligen
>würde.

Bei den Beiträger hier im Forum wundert mich das gar nicht.

MfG Spess

von Manfred P. (pruckelfred)


Lesenswert?

Michael B. schrieb:
> Noch einfacher wäre wohl 6502 oder 68HC11 oder 8051, aber da hat man
> keine Plattform die Assembler  Editor etc enthält.

Was immer Du mit "Plattform" sagen willst. Für den 6502 hatte ich schon 
auf dem cbm3032 einen Makroassembler. Später auch auf dem PC und dazu 
einen In-Circuit-Emulator von Huntsville Microsystems, staubt hier im 
Regal vor sich hin. Toll war das CMOS-Design, womit man den 6502 
anhalten und später fortsetzen konnte, was ich mal in einer Anwendung 
nutzen musste.

Falls "Plattform" bunte Oberflächen meint - das war zu der Zeit noch 
nicht verfügbar, ich habe noch am monochromen Schirm getippt. 
Assemblieren wurde halt per Batchdatei gesteuert, man wusste noch, was 
man tat.

Mein erster Mikrocontroller war MC68HC805 per Makroassembler, der ist 
den 65xx recht ähnlich. Mit dem habe ich Aufgaben erledigt, die man 
Jahre später per Arduino gemacht hätte.

von Mario M. (thelonging)


Angehängte Dateien:

Lesenswert?

Fred schrieb:
> dass der Interrupt ISR8 nur die Generierung des Zeittakts beinhalten
> soll.

Keine Ahnung, auf welcher Hardware das laufen soll. Der Kommentar 
"Traffic_Lights.exe" klingt nach PC, aber die Interrupts sehen gar nicht 
danach aus. Hab das Programm q&d umgestellt, so wie der TO es haben 
wollte und hoffe, dass es so funktioniert.

von Flunder (flunder)


Lesenswert?

Thomas Z. schrieb:
> Flunder schrieb:
>> Wenn ich denn doch mal in den Code vom Anfang rein schaue, fällt mir
>> gleich auf, dass da im Interrupt fleißig Register überschrieben werden,
>> ohne sie zu sichern.
>
> nun ja er benutzt pusha / popa zum retten der Register ist soweit ich
> mich erinnere ab 186 /V40 verfügbar. Das kann also schon funktionieren.
In einem der beiden ja. Und da, wo er es benutzt, überschreibt er ES, 
das IMHO leider nicht mit gesichert wurde.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.