Hilfe bei einem Assembler-Programmcode

OP #3478082
Lesenswert?

Hallo,

ich habe ein Problem, und zwar soll ich ein Programmcode in Assembler 
über folgendes Verfahren schreiben:

"Mittels Zeitschleife und Interrupt soll eine Frequenz gemessen werden.
Die Impulse, die innerhalb einer Sekunde an Port 3.4 anliegen, sollen 
mit dem Timer gezählt werden und an der zweistelligen 
7-Segment-Anzeige(am P2) als Dezimalzahl ausgegeben werden.
Die beiden 7-Segment-Anzeigen sollen im Multiplexbetrieb angesteuert 
werden. Die linke Anzeige wird mit P3.6 frei geschalten, die rechte 
Anzeige mit P3.7 frei geschalten."

In der Regel sollten wir immer so beginnen:
INCLUDE 5131.INC
code at 0
SJMP init


Leider habe ich nicht sehr viel Ahnung wie bzw was ich alles in den 
Programmcode schreiben soll, und frage deshalb ob mir hierbei jemand 
helfen kann.

Mfg xxro
Gast #3478093
Lesenswert?

Ich empfehle Dir, ersteinmal mit einer Ablaufbeschreibung zu beginnen.

1. Tue dies
2. Tue das
3. Etc.
4. Wenn <Bedingung> gehe zu Schritt 2.
5. Etc.

Du hast hier einen Sonderfall. Nämlich, das ein Vorgang, das Multiplexen 
der Anzeige ständig ablaufen soll. Und das ein Vorgang, nämlich das 
feststellen des letzten Zählerstandes zu einem bestimmten Zeitpunkt 
ablaufen soll.
Im Ergebnis wirst Du 3 Ablaufbeschreibungen erstellen.

Kläre auch ersteinmal ob Du grundsätzlich mit der Idee des Multiplexing 
vertraut bist und mit der Ereigniszählung während eines vorgegebenen 
Zeitraumes.
Gast #3478130
Lesenswert?

Peter E. schrieb:
> SJMP init

Mit 'nem Jump auf "init" sind Dein Prozessor und Du "eigentlich" bereits 
fertig - ohne Chance darauf, sich nach einem geregelten Return wirklich 
sinnvollen Aufgaben zu widmen.


Peter E. schrieb:
> Mittels Zeitschleife und Interrupt soll eine Frequenz gemessen werden.

Beste Vorraussetzungen, ein Schätzeisen zu kreieren.

Es sei denn, man opfert außerordentliche Anstrengungen, die Zeitschleife 
um die ihr mehr oder weniger periodisch von den Dauer der 
Interrupt-Behandlungen gestohlenen Zeit zu korrigieren...

...während es sich der Timer des Prozessors von Hartz IV Ruhestrom 
versorgt auf dem Kristall gemütlich macht.


Peter E. schrieb:
> Leider habe ich nicht sehr viel Ahnung

Gar keine Sorge - hier schwebt hier nach der exakten Beschreibung 
inklusive der Nennung von P2, P3.4, P3.6 und P3.7 sicher schon die 
komplette Schaltung nebst Code und Simulationsergebnissen in 3D und 
Farbe vor dem geistigen Auge...

;-)
#3478169
Lesenswert?

Peter E. schrieb:
> Nein, ich verlange nicht, dass mir jemand den Text schreibt und ich
> währenddessen faul auf dem Sofa sitze, lediglich hilfe beim bewältigen
> der Aufgabe.
> Das ist eine Abituraufgabe.

Das Problem ist (momentan) eher darin zu sehen, dass diese 
Aufgabenstellung schon einiges an Voraussetzungen erfordert. Da sind ein 
paar Teilsysteme erforderlich, von denen man über jedes einzelne davon 
schon einen halben Roman schreiben könnte.
Wenn du so gar keine Ahnung hast, dann wirds schwer dir da zu helfen.

Kriegst du denn von der Aufgabenstellung überhaupt nichts alleine hin?
Was ist mit der Anzeige? Die ist eine in sich abgeschlossene Einheit. 
Kannst du selbst die entsprechenden Multiplex-Routinen aufsetzen und 
schreiben?
Wenn das eine Abituraufgabe ist, dann solltest du ja eigentlich in der 
Lage sein, zumindest die einzelnen Teilprobleme relativ problemlos zu 
bewältigen. Wenn es beim Zusammenführen der Einzelteil bzw. der 
Einzel-Strategien Schwierigkeiten gibt, dann wäre das soweit ok und man 
könnte darüber reden. Aber mit so gar nichts in der Hand ....
Gast #3478193
Lesenswert?

Das Verb 'schalten' ist ein regelmäßiges Verb, das sein 'a' behält: 
schalten – schaltete – geschaltet.

Im deutschländischen und im deutschschweizerischen Standarddeutsch 
heisst das Partizip also 'geschaltet' und nicht 'geschalten', weil 
'schalten' im Präteritum nicht zu 'schielt' mutiert.
Gast #3479837
Lesenswert?

Meiner Auffassung nach ist dieser "erste" Ablaufplan zu konkret, zu nah 
an dem eigentlichen Code, um erkennen zu können, was Du tust. Man sieht 
nur wie Du etwas tust, in ganz konkreten Zuweisungen, aber ohne 
Schaltplan etc. kannst nur Du verstehen, was da passiert.

Z.B. im ersten Diagramm steht: "Setze P3.6 auf f0". Was aber soll das 
bewirken?

Das ist aber nur meine Meinung. Wenn Dir das hilft dann mach es so. Nur 
das ich mir das nicht im Detail anschaue, weil ich so tief ja garnicht 
in Dein Projekt einsteigen will um zu beurteilen, das "Setze P3.5 auf 
f0" irgendwas sinnvolles tut.

Es wäre auch nett wenn Du keine Handskizzen fotografierst sondern sowas 
mit einem Programm machst, Etwa "Dia". Siehst Du hier: 
http://dia-installer.de/
Das ist viel leichter lesbar, kann weiterverwendet werden und gibt 
kleiner Dateien (als PNG).
#3479853
Lesenswert?

Logiker schrieb:
> Meiner Auffassung nach ist dieser "erste" Ablaufplan zu konkret, zu nah
> an dem eigentlichen Code, um erkennen zu können, was Du tust. Man sieht
> nur wie Du etwas tust, in ganz konkreten Zuweisungen, aber ohne
> Schaltplan etc. kannst nur Du verstehen, was da passiert.
>
> Z.B. im ersten Diagramm steht: "Setze P3.6 auf f0". Was aber soll das
> bewirken?

In der Aufagbenstellung steht, dass P3.6 bzw. P3.7 die Stellentreiber 
der 2-stelligen 7-Segment Anzeige sind.

Aber ich geb dir in der Sache an sich recht. Es gibt keinen Grund im PAP 
da nicht einfach "Schalte die linke Anzeige ein", bzw. "Schalte die 
rechte Anzeige ein" hinzuschreiben. Auf die Art liest sich das PAP dann 
auch viel besser. Selbiges mit den R-Registern. Auch das sind Details, 
die eigentlich im PAP nicht so brennend interessant sind. EIn PAP soll 
ja nicht einfach nur der Programmtext in anderer Form sein, sonder in 
erster Linie die zugrundeliegende Logik veranschaulichen. DIe Logik ist 
aber unabhängig davon, wo genau jetzt die einzelnen Stellentreiber 
abgeschlossen sind oder welches R-Register jetzt die Einer aufnimmt und 
welches die Zehner. In einem PAP sollen meinem Verständnis nach durchaus 
noch die aufgabenspezifischen Vokablen benutzt werden und nicht die 
technischen Begriffe, wie einzelne Teile dann konkret umgesetzt wurden.


Irre ich mich, oder läuft das Multiplexen in ein Ghosting-Problem an der 
Anzeige rein?
Gast #3480861
Lesenswert?

Da steigst du ja schon in das Programm ein, dachte du arbeitest noch an 
dem PAP ?

Vermutlich handelt es sich um einen AT89C5131, 8x51 Derivat, solche 
Infos solltest du eigentlich hier mit angeben. Die paar Zeilen Assembler 
bestätigen das es um 8051 geht.

Liefer doch mal alles was du bereits hast...
- aktueller PAP
- Schaltplan wenn vorhanden
- Bereits existierender Code

Welche Teilbereiche verstehst du bereits, welche nicht ?
- Assembler Programmierung
- Multiplexen
- etc.

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