Hi, Bin Neuling im Bereich µC's. Ich möchte in Abhängigkeit von Registerwerten entsprechende Unterprogramme aufrufen. Wie lässt sich so etwas realisiern? Mit Tabellen? Danke im Vorraus
Es wäre äußerst hilfreich, wenn Du auch schreiben würdest, mit welchen Controllern Du Dich beschäftigen möchtest. Da gibts nämlich Unterschiede.
Hallo Martin, in C kann man hervorragend mit Zeigern auf Funktionen arbeiten. Ich vermute aber, dass du in Assembler programmieren möchtest, richtig? Gruß Olaf
also ihr beiden, ich möchtte in Assembler programmieren und verwende den 8515 Martin
Da gibts den Befehl "ijmp". Er benutzt R30/R31 (also das Z-Register) als Sprungadresse. Dieses Registerpaar vorher evtl. per Tabelle und "lpm"-Befehl definieren. Beim lpm-Befehl bin ich mir allerdings nicht ganz sicher - ich progge nur die kleineren Atmels, aber der 8515 sollte ähnlich funktionieren.
dann sieh die mal die Befehle ijmp/icall an. Damit läßt sich das sehr schön lösen.
Also ich habe diese Befehle mal unter die lupe genommen. Allerdings müßte ich dann jedes mal das Register abfragen und je nach dem den Z-Pointer laden. gibt es da noch eine kürzere bzw. günstigere Variante?
Welchen Wertebereich hast Du in dem Register? Sind es fortlaufende Zahlen (also 0,1,2,3,4...) oder sind sie durcheinander? Bei ersterer Möglichkeit kannst Du das Register als Zeiger auf eine Tabelle benutzen und mit dem Tabellenwert das Z-Register laden. Ist ein 10-Zeiler. Es gibt nur einige Details, die ich von hier aus nicht checken kann.
Also bei einem interrupt wird ein register fortlaufend um 1 erhöht, jedoch maximal bis 9. Ok danke für den Tipp, allerdings habe ich sehr wenig Erfahrung im Umgang mit Z-Pointer und Tabellen. Martin
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.