Assembler 8051 7-Seg Zählproblem

Gast #1296802
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
Angehängte Dateien:
#1297099
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
Gast #1297140
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
#1297237
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

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