Forum: Mikrocontroller und Digitale Elektronik Assembler 8051 7-Seg Zählproblem


von rennschlumpf (Gast)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

ich bin gerade dabei meinen 8051 so zu programmieren dass er bei 
Tasterauslösung mit den 2 vorhandenen 7-Segment-Anzeigen immer eins 
hochzählt, von 00-99 und dann wieder bei 00 beginnend.

Jetzt habe ich 2 Probleme:
1.Es zählt nur der einer hoch und beginnt auch nach 9 wieder von 0. Der 
Zehner ist jedoch dauerhaft auf 8 mit Punkt also jedes Bit des P2 auf 1 
und verändert sich nicht.

2.nach überspielen auf den µC startet der Einer mit 1 obwohl an erster 
Stelle der Tabelle zahlen die 0 liegt. Dies lässt sich suboptimal 
beheben indem ich während der "init" Phase das R0 mit 9 
vorlade.(scheinbar durchläuft der µC die Interuptserviceroutine gleich 
nach beginn einmal, ich habe aber keine Idee weshalb)

Eventuell hat noch jemand Vorschläge zur Optimierung.

EIn Textfile mit dem code ist angehängt.

Vielen Dank und verzeiht mir die wahrscheinlich blöden Fragen

PS: Schwerpunkt sollte wie bei "ausgabe" zu sehen auf dem Multiplexen 
liegen

: Verschoben durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was hat ein 8051 mit PC-Programmierung zu tun?

Genau: nichts. Verschoben.

von Olli R. (omr) Benutzerseite


Angehängte Dateien:

Lesenswert?

Mit der richtigen Endung klappt's auch mit der Quaeltextformatierung.

von rennschlumpf (Gast)


Lesenswert?

Danke euch beiden.

Kann mir aber jemand bei meinem eigentlichen Problem helfen?


Danke schön

von Peter D. (peda)


Lesenswert?

rennschlumpf schrieb:
> 1.Es zählt nur der einer hoch und beginnt auch nach 9 wieder von 0. Der
> Zehner ist jedoch dauerhaft auf 8 mit Punkt also jedes Bit des P2 auf 1
> und verändert sich nicht.

Der Code ist zwar äußerst suboptimal (Multiplex ohne Timerinterrupt) 
sollte es aber wuppen.
Also ein Hardwarefehler (Schaltplan oder Verdrahtung).


> 2.nach überspielen auf den µC startet der Einer mit 1 obwohl an erster
> Stelle der Tabelle zahlen die 0 liegt.

Für eine saubere Programmierung sollte man vor der Interruptfreigabe 
immer erst das dazugehörende Interrupt-Pending-Bit löschen.


Peter

von rennschlumpf (Gast)


Lesenswert?

Danke schon mal,

aber könntest du mir den Teil des Programms so erweitern, wie du das 
meinst? Ich weiß nicht wie ich dein Hinweis mit dem 
Interrupt-Pending-Bit umsetzen sollte?

Wäre dir sehr dankbar

von Peter D. (peda)


Lesenswert?

rennschlumpf schrieb:
> aber könntest du mir den Teil des Programms so erweitern, wie du das
> meinst? Ich weiß nicht wie ich dein Hinweis mit dem
> Interrupt-Pending-Bit umsetzen sollte?

Jede Interruptquelle hat ein Bit, welches anzeigt, daß ein Interrupt 
anhängig (pending) ist, dieses mußt Du löschen.


Peter

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.