Zum Inhalt springen

Lauf- / Blinklicht bei [MFA]


bpasero

Empfohlene Beiträge

Hi,

ich habe keine Ahnung ob ich hier im richtigen Forum für meine Frage poste.

Es geht darum, dass wir einen MFA (8085, 1xIN, 1xOUT) so Programmieren sollen, dass man bei der Eingabebaugruppe diverse Schalter benutzen kann, um die Dioden einzuschalten, bzw. zwischen Lauf- und Blinklicht zu wechseln. Das ganze funktioniert mit diversen UND-Maskierungen zur Schalterabfrage, einer Zeitschleife und halt einmal dem Blinklicht und dem Lauflicht. Das Blinklicht funktioniert, aber ich habe Probleme mit dem Lauflicht.

Hier der Code:


mov a,b

inr a

dcr a

jz lauf0

jmp lauf1


lauf0: mvi a,01

out 13

call zeit

rlc

mov b,a

jmp 0e000


lauf1: out 13

call zeit

rlc

mov b,a

jmp 0e000

Da sich das gesamte Programm immer wieder wiederholt muss ich den Zustand des Lauflichtes in einem Register, in diesem Fall "b", speichern. Ich habe im oberen Teil eine Abfrage, ob das Register "b" leer ist, oder ob das Lauflicht schon einen Wert gespeichert hat. Das Programm funktioniert, allerdings NICHT mit der Zeitschleife als Unterprogramm. Kann es sein, dass die Zeitschleife beim Runterzählen der Register irgendwie die übrigen Register mit beeinflusst ?

Ich habe auch schon die Möglichkeit in Erwägung gebracht den Zustand des Lauflichtes nicht in einem Register, sondern im Memory zu speichern, aber ich bin mir nicht sicher, welcher Memorybereich für so etwas frei wäre :(

Danke für die Hilfe und sry fals es das falsche Forum ist !

Link zu diesem Kommentar
Auf anderen Seiten teilen

kein Problem, ich poste einfach das gesamte Programm (auf das Blinklicht verzichte ich)

------------------

start: jump s0

weiter: jmp lauf

jmp start

end

------------------

------------------

del: mvi a,000

out 13

s0: in 12

ani 01

jz del

jmp weiter

------------------

------------------

lauf: mov a,b

inr a

dcr a

jz lauf0

jmp lauf1

------------------

------------------

lauf0: mvi a,01

out 13

call zeit

rlc

mov b,a

jmp 0e000

------------------

------------------

lauf1: out 13

call zeit

rlc

mov b,a

jmp 0e000

------------------

------------------

Die Zeitschleife beginnt bei E500:

zeit: mvi c,008

mvi d,0ff

mvi e,0ff

dcr e

jnz 0e506

dcr d

jnz 0e504

dcr c

jnz 0e502

ret

------------------

------------------

Zuer Erläuterung:

Das Programm startet wenn der Schalter S0 eingeschaltet ist und führt dann das Laudlicht aus. Das UP Zeit ist eine geschachtelte Zeitschleife für einen 600 MHz Rechner. Beim MFA würde ich die dritte Schleife weglassen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

also an deiner zeitschleife liegt es definitiv nicht. die verändert NICHT deine lauflichtvariablen...

Original geschrieben von bpasero

lauf1: out 13

call zeit

rlc

mov b,a

aber hier frag ich mich einiges:

1. mit "out 13" wird das register A ausgegeben, richtig?

2. mit "rlc" wird register A eins weiter geschoben, oder?

3. warum schiebst du mit "mov b,a" b nach a??? b hast du doch nirgends verändert, oder?

(oder denk ich jetzt völlig falsch?)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von bpasero

Huch, ich dachte der Befehl "mov r1, r2" verschiebt einen Wert von Register "r2" nach "r1" und nicht umgekehrt ?

oder liege ich da falsch ?

hmmm... weiss nich so genau...

aber lass die beiden mov doch einfach weg... brauchst du doch nicht...

weil: du schiebst irgendwann a nach b, springst zum anfang und schiebst dann b wieder nach a... is doch quatsch... :confused:

aber ich sehe da sonst keinen fehler... tut mir leid

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das mit dem Schieben von B nach A und umgekehrt hat schon seine Zweck. Ich muss im Programm abfragen, ob es zum ersten mal läuft, oder schon einen bzw. mehrere Durchgänge hinter sich hat. Denn für das Lauflicht muss ich ja 1 Diode initialisieren, und zwar die erste, sonst leuchtet gar nichts. Da das Programm wegen der Schalter immer wieder von vorne beginnt, würde er jedes mal nur diese erste Diode zum Leuchten bringen, aber nicht mehr. Daher "rette" ich den Inhalt des Akkus, schreibe ihn in B und überprüfe vor dem eigentlichen Lauflicht, ob das Programm schon etwas im Register B reingeschrieben hat. Fals nicht, weiss das Programm das es zum ersten mal durchläuft, fals ja, lässt er das "MVI A,001" aus und nimt den Wert des Registers B.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...