bpasero Geschrieben 26. März 2002 Geschrieben 26. März 2002 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 ! Zitieren
beebof Geschrieben 26. März 2002 Geschrieben 26. März 2002 wär nicht schlecht, wenn du deine routine "zeit" auch noch postest... Zitieren
bpasero Geschrieben 26. März 2002 Autor Geschrieben 26. März 2002 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. Zitieren
beebof Geschrieben 26. März 2002 Geschrieben 26. März 2002 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?) Zitieren
bpasero Geschrieben 26. März 2002 Autor Geschrieben 26. März 2002 Huch, ich dachte der Befehl "mov r1, r2" verschiebt einen Wert von Register "r2" nach "r1" und nicht umgekehrt ? oder liege ich da falsch ? Zitieren
beebof Geschrieben 27. März 2002 Geschrieben 27. März 2002 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 Zitieren
bpasero Geschrieben 27. März 2002 Autor Geschrieben 27. März 2002 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. Zitieren
Empfohlene Beiträge
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.