Forum: Mikrocontroller und Digitale Elektronik Hilfe bei einem Assembler-Programmcode


von Peter E. (xxro)


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

von Logiker (Gast)


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.

von Logiker (Gast)


Lesenswert?

Hilfreich sind sicher auch die Artikel 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Timer
und http://www.mikrocontroller.net/articles/Multiplexen

Dabei fällt mir ein: Falls Dein Prozessor kein AVR ist, dann kannst Du 
aus diesen Artikeln aber wenigstens die Grundideen abschauen.

von Cyblord -. (cyblord)


Lesenswert?

Also du willst dass dir jemand das Programm schreibt, und dann sagst du 
noch nichtmal den Controller dazu? Assembler ist ja nicht gleich 
Assembler, den Controller müsste man schon wissen.

Aber andere Frage: Warum sollst du sowas machen? Wer verlangt das von 
dir? Und warum?

von Satan (Gast)


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...

;-)

von Peter E. (xxro)


Lesenswert?

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.

von Karl H. (kbuchegg)


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 ....

: Bearbeitet durch User
von Logiker (Gast)


Lesenswert?

Hilft denn garnichts von meiner obigen Antwort?

von NaNa_JaJa (Gast)


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.

von Jobst M. (jobstens-de)


Lesenswert?

Logiker schrieb:
> Falls Dein Prozessor kein AVR ist

Peter E. schrieb:
> Port 3.4
> P3.6
> P3.7
> INCLUDE 5131.INC
          ^^^^


Peter E. schrieb:
> lediglich hilfe beim bewältigen
> der Aufgabe.
> Das ist eine Abituraufgabe.

Und schon angefangen? Was hast Du schon?


Gruß

Jobst

von Cyblord -. (cyblord)


Lesenswert?

Auf welchen Controller deutet "5131" denn hin? Etwa LP-5131, das ist 
doch eher son Linux getriebener Mini-PC...

: Bearbeitet durch User
von Jobst M. (jobstens-de)


Lesenswert?


von Hauptprogramm (Gast)


Angehängte Dateien:

Lesenswert?

Hab hier mal die PAP´s dazu erstellt, kann mal jemand ein Blick darauf 
werfen ob es soweit stimmt?
Danke im vorraus

von Logiker (Gast)


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).

von Karl H. (kbuchegg)


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?

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:

> Irre ich mich, oder läuft der Aufgabenstellung in ein Ghosting-Problem
> an der Anzeige rein?

Nope. Ich denke, er wird ein Ghosting haben. Genauso wie die Anzeige 
ganz leicht flackern wird, wenn die ISR ihm das Hauptprogramm 
unterbrechen und man ganz genau schaut.

Ich hätte den Multiplexteil mit in den Timer-Interrupt rein gelegt.

von Logiker (Gast)


Lesenswert?

>Irre ich mich, oder läuft der Aufgabenstellung in ein Ghosting-Problem
>an der Anzeige rein?

Das sehe ich auch so. Die alten Segmentbits stehen noch an, wenn das 
nächste Digit aktiviert wird.

von Peter E. (xxro)


Angehängte Dateien:

Lesenswert?

ok danke, hab jetzt mal angefangen.
Schrift ist zweitrangig, wird später noch digitalisiert.
Stimmt das bis Dato überein?

: Bearbeitet durch User
von Bernd N (Gast)


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.

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.