Assembler 8051 7-Seg Zählproblem

Gast #1296802
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.