- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 7 von 7

Thema: ATMEGA8 - mit BASCOM Status Register R6.4 und R6.5 auslesen

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.05.2007
    Beiträge
    11

    ATMEGA8 - mit BASCOM Status Register R6.4 und R6.5 auslesen

    Anzeige

    Powerstation Test
    Hallo,

    ich möchte mit Bascom den Status der Bits 4 und 5 von Register R6 meines ATMEGA8 auslesen. Meine Versuche mit z. B.:
    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
    sind natürlich gescheitert.

    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

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    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

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    29.05.2007
    Beiträge
    11
    Hallo Jaecko,

    danke für die Antwort. Du hast u. a.gepostet:
    Versuch mal, das Register zuvor in einer Variable zu sichern.
    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!

    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

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Code:
    Dim R6_Wert as Byte
    ...
    !STS   {R6_Wert},   R6

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    29.05.2007
    Beiträge
    11
    Hallo MagicWSmoke,

    danke für die Info. Aber leider verstehe ich Deinen Pseudocode
    Code:
    Dim R6_Wert as Byte 
    ... 
    !STS   {R6_Wert},   R6
    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 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
    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:
    vielen Dank im voraus an alle Helfer für die Unterstützung.
    Gruß
    myrobo

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    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:
    Code:
    If R6_Wert.4 = 1 Then...
    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.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    29.05.2007
    Beiträge
    11
    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):
    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
    Nochmals Dank an MagicWSmoke. Hiermit schließe ich den Thread zu diesem Thema.
    Gruß
    myrobo

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress