Versuch mal, das Register zuvor in einer Variable zu sichern. Weiss jetzt nicht genau, was Bascom mit den Registern anstellt, aber wenn es z.B. R6 für nen Vergleich braucht... dann wirds schwierig.
Hallo,
ich möchte mit Bascom den Status der Bits 4 und 5 von Register R6 meines ATMEGA8 auslesen. Meine Versuche mit z. B.:
sind natürlich gescheitert.Code:dim a as bit dim b as bit a = 0 b = 0 if r6.4 is 1 then a = 1 else a = 0 endif if r6.5 is 1 then b = 1 else b = 0 endif
Geht das überhaupt mit BASCOM? Wenn ja, wie (bitte Beispielcode)?
Wenn es nur mit in Bascom integrierten ASSEMBLER geht, wie würde das dann in BASCOM-ASSEMBLER aussehen (bitte Beispielcode)?
Hinweis:
ich habe keine Ahnung/Erfahrung mit ASSEMBLER!
Da ich an diesem Punkt festhänge, wäre ich für jeden hilfreichen Rat mit Beispielcode dankbar.
Gruß
myrobo
Versuch mal, das Register zuvor in einer Variable zu sichern. Weiss jetzt nicht genau, was Bascom mit den Registern anstellt, aber wenn es z.B. R6 für nen Vergleich braucht... dann wirds schwierig.
#ifndef MfG
#define MfG
Hallo Jaecko,
danke für die Antwort. Du hast u. a.gepostet:
Aber wie sichere/speichere ich das Register in einer Variable? Und wie greife ich dann auf den Zustand von Bit4 und Bit5 dieser R6 Registervariable zu? Dein Vorschlag ist ja gut gemeint, aber das ich nicht weiß wie das geht ist ja genau mein Problem!Versuch mal, das Register zuvor in einer Variable zu sichern.
Es muß doch eine Möglichkeit geben die Zustände aller Bits (gesetzt oder nicht gesetzt, also ON/OFF) des Registers R6 mit Bascom und/oder ASSEMBLER abfragen zu können.
Ich bin für jeden Tip dankbar.
Gruß
myrobo
Code:Dim R6_Wert as Byte ... !STS {R6_Wert}, R6![]()
Hallo MagicWSmoke,
danke für die Info. Aber leider verstehe ich Deinen Pseudocode
nicht richtig, denn ich habe (wie geschrieben) keine Erfahrung mit ASSEMBLER. Was bewirkt !STS {R6_Wert}, R6? Ich kann Deinen guten Tip/Info aus Verständnisgründen für mich so nicht umsetzen. Könntest Du mir freundlicherweise Deinen Codeschnipsel nochmal wie folgt anpassen:Code:Dim R6_Wert as Byte ... !STS {R6_Wert}, R6
Also meinen ähnlich wie oben strukturierten Kurz-Beispielcode so schreiben oder anpassen, dass er mir zeigt, wie ich mit Bascom den Zustand (ON/OFF) von BIT4 und/oder BIT5 des Registers R6 abfragen kann. Ich hoffe das ich nicht zuviel verlange. Darum jetzt schon mal:Code:dim a as bit dim b as bit a = 0 b = 0 if r6.4 is 1 then a = 1 else a = 0 endif if r6.5 is 1 then b = 1 else b = 0 endif
vielen Dank im voraus an alle Helfer für die Unterstützung.
Gruß
myrobo
myrobo,
das war kein Pseudocode, das war richtiger Code. Die Pünktchen sollten ggf. noch andere Deiner Anweisungen andeuten. Wobei das Sichern des Registers so früh wie möglich kommen sollte.
Aber zur Erklärung: Das Prozessorregister R6 muss in eine Variable gespeichert werden, damit Du den Inhalt einfach weiterverarbeiten kannst. Ein Prozessorregister ist 8 Bit breit, also nimmt man ein Byte dafür.
Und genau das passiert hier, ich habe eine Variable dimensioniert, und dann weise ich mit STS ... dieser Variablen das Register R6 zu. Die Variable enthält dann den Registerinhalt und kann wie jede andere Bascom Variable weiterverarbeitet werden, abfragen der Bits, also:
Den Rest solltest Du Dir jetzt selbst zusammendenken können. Verwende als Variablennamen keine reservierten Wörter, also auch nicht R6, R7, CLI, SEC usw., das kann eigenwillige Ergebnisse zeitigen.Code:If R6_Wert.4 = 1 Then...
Danke MagicWSmoke,
ich habe Deinen Code jetzt verstanden, war aber mittlerweile zu diesem Thema auch fündig geworden. Letztendlich verstanden habe ich es aber nur dank Deiner Hilfe! Für alle die es interessiert:
http://www.rn-wissen.de/index.php/As...Cr_Bascom-User
In dem Artikel nach STS suchen!
Abschließend nochmal mein für mich funktionierender Beispielcode zu meiner gestellten Frage (für alle die eine ähnliche Fragestellung haben):
Nochmals Dank an MagicWSmoke. Hiermit schließe ich den Thread zu diesem Thema.Code:dim r6_byte as byte ' Zustand von Register R6(BIT4 und BIT5) ausgeben do !STS {r6_byte}, r6 if r6_byte.4 = 1 then print r6_byte.4 end if if r6_byte.5 = 1 then print r6_byte.5 end if loop end
Gruß
myrobo
Lesezeichen