Pic Uhr Asm programm

Gast #400331
Hallo,

ich programmiere in pic asm.

momentan strukturiere ich gerade ein uhrwerk.

mittlerweile ist das uhrwerk so komplex, das es funktionen (calls) für
die einstellungen der einzelnen variablen (sekunde,minute, stunde
usw..) gleich mit behandelt. zudem ist es komplett mit indirekter
adressierung der basisvariablen programmiert, sodass auch eine
eventuelle weckzeit mit den selben routinen bedient wird.

meine frage: hat jemand schonmal etwas ähnliches programmiert. würde
mir gerne noch einige impressionen aus anderem pic asm code ziehen :_)

maddin
"hat jemand schonmal etwas ähnliches programmiert."

Ja, aber natürlich nicht auf nem PIC.

Ich hab früher Assembler (8051) gemacht und kann Dir zustimmen, daß es
schnell unübersichtlich wird, wenn man einfach drauf los schreibt.


Man muß besonders in Assembler erstmal ein Grundgerüst (Ablaufplan)
machen, ehe man losprogrammiert.
Und vor allem muß man sich erstmal Aufbau- und Aufrufkonventionen für
Funktionsmodule ausdenken und diese dann einhalten (welche Register
werden für Parameterübergabe reserviert usw.).
Man darf auch nie zuviel in einer Funktion gleichzeitg machen, sondern
immer schön in Unterfunktionen aufteilen.
Der PIC hat dabei Probleme, da er nur eine begrenzte Stacktiefe hat.
Trotzdem sollte man nicht auf Modularität verzichten, sondern sie dann
mit Macros als Inline-Funktion schreiben.


Der exponentiell steigenden Komplexität kannst Du dadurch begegnen, daß
Du alles in einer großen Statemachine laufen läßt.

Nachfolgend ein Beispiel in C:

http://www.mikrocontroller.net/forum/read-4-405548.html#new

Da es dabei 4 verschiedene Tastenereignisse gibt, müssen die einzelnen
States immer im 5-er Abstand sein und das Tastenereignis (1..4) wird
dann dazu addiert, falls es auftritt. Somit lassen sich beliebige
State-Wechsel realisieren, der Phantasie sind da keine Grenzen
gesetzt.


In Assembler macht man Statemachines mit einer Sprungtabelle, woraus
dann durch den Wert des States die entsprechende Sprungadresse
ausgewält wird (indirekter Sprung). Der 8051 hat dafür einen speziellen
Befehl (JMP @A+DPTR).
Beim PIC ist das kniffliger und vor allem muß man Sprünge über die
Bankgrenze gesondert berechnen.


Peter
Gast
bei www.sprut.de gibts es zwar asm code, aber der ist lange nicht so
gestrickt...

@peter

vielen dank für die hinweise zum pic. arbeite schon ziehmlich lange mit
dem f84 und f877/f876.

maddin

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 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.