Pic Uhr Asm programm

Gast #400331
Lesenswert?
• ▲
▼
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
#400337
Lesenswert?
• ▲
▼
"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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.