-
        

Ergebnis 1 bis 10 von 10

Thema: Bitfolge in einer Variablen speichern

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    44
    Beiträge
    128

    Bitfolge in einer Variablen speichern

    Anzeige

    Hallo,

    wie kann ich einzelne Bits als Serie zusammen fassen um mir eine einzelauswertung bei Statusänderung zu ersparen?

    Hier ein Beispiel:

    16 Tatster sthen als Variable zur verfügung:
    Dim Taster(16) as Bit

    Nun möchte ich eine Zusammenfassung erstellen in der alle Bits hintereinander dargestellt werden. Das soll dann so aussehen:
    Status_Taster = 1111001100000001

    Danach soll die Prüfung und Ausgabe erfolgen:
    if Status_Tasteralt = Status_Taster then
    else
    Status_Tasteralt = Status_Taster
    Print Status_Taster
    End If

    Ich dachte ich könnte sie über ein & verbinden (Status_Taster = Taster(1) & Taster(2) & .....). Leider geht das so nicht.
    Weis jemand einen Weg?

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    Hallo!

    Es gibt in Bascom keine Bit-Variablen. Wenn Du ein Array(16) anlegst, sind das 16 BYTE! In jedem Byte wird dann 1 BIT benutzt.
    Dim Taster As Word ---Word hat passenderweise 16Bit

    MfG

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    So vielleicht:

    Code:
    Dim Status_tasteralt As Word , Status_taster As Word
    
    Status_tasteralt = 0
    
    Do
    
    Status_taster = 0
    
    'Taster schalten Portpin gegen GND, 0 bedeutet "Taster betätigt"
    If Pinc.0 = 0 Then Set Status_taster.0
    If Pinc.1 = 0 Then Set Status_taster.1
    If Pinc.2 = 0 Then Set Status_taster.6
    If Pinc.3 = 0 Then Set Status_taster.7
    
    If Pind.0 = 0 Then Set Status_taster.8
    If Pind.1 = 0 Then Set Status_taster.9
    If Pind.2 = 0 Then Set Status_taster.14
    If Pind.3 = 0 Then Set Status_taster.15
    
    If Status_tasteralt <> Status_taster Then
       Status_tasteralt = Status_taster
       Print Status_taster
    End If
    
    Loop
    End
    Gruß

    mic

    P.S.: Alternative Ausgabe:

    Print bin(Status_taster)
    Geändert von radbruch (04.08.2013 um 09:36 Uhr)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.10.2007
    Alter
    44
    Beiträge
    128
    Hallo und Danke für eure Hinweise bzw. Hilfen.
    Dann werde ich mich mal nach einer anderen Lösung umsehen

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Es gibt in Bascom keine Bit-Variablen.
    Das ist nicht ganz richtig, wie den Bascom Language-Fundamentals zu entnehmen ist:

    Data Types
    Every variable in Bascom has a data type that determines what can be stored in the variable. The next section summarizes the elementary data types.

    Elementary Data Types
    Bit (1/8 byte). A bit can hold only the value 0 or 1. A group of 8 bits is called a byte.

    Byte (1 byte). Bytes are stores as unsigned 8-bit binary numbers ranging in value from 0 to 255.

    Integer (two bytes). Integers are stored as signed sixteen-bit binary numbers ranging in value from -32,768 to +32,767.

    (usw...)

    Die Lösung von Radbruch zum Erfassen des aktuellen Taster-Status hat (mit Verlaub) den Fallstrick, dass zu der If-Abfrage in diesem Fall auch eine Else-Anweisung gehört:
    Wenn z.B. PINC.0 Low ist, wird zwar das Bit status_taster.0 auf 1 gesetzt. Ist der Eingang aber irgendwann wieder High, wird die If-Anweisung einfach übersprungen, aber das Bit bleibt gesetzt! Man müsste es also mindestens mal so schreiben:


    Code:
    If PINC.0 = 0 then status_taster.0 = 1 else status_taster.0 = 0
    If PINC.1 = 0 then status_taster.1 = 1 else status_taster.1 = 0
    ...
    Einfacher wäre es natürlich so:

    Code:
    status_taster.0 = NOT PINC.0
    status_taster.1 = NOT PINC.1
    ...
    Und noch einfacher wäre es, wenn die 16 Taster an zwei "ganzen" Ports liegen (also z.B. PINC.0 - PINC.7 und PIND.0 - PIND.7):

    Code:
    Dim status_taster as Word
    
    status_taster = PINC
    shift status_taster, left, 8
    status_taster = status_taster + PIND
    Dann werde ich mich mal nach einer anderen Lösung umsehen
    Vielleicht sind das ja ein paar Denkanstöße

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Die Lösung von Radbruch zum Erfassen des aktuellen Taster-Status hat (mit Verlaub) den Fallstrick, dass zu der If-Abfrage in diesem Fall auch eine Else-Anweisung gehört:
    Das ersetzt die else-Zweige:

    Status_taster = 0

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Das ersetzt die else-Zweige:

    Status_taster = 0
    Okay - 1:0 für Dich...

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    @Sauerbruch

    dort wird nur erklärt welche Daten-Typen es gibt
    Dim A As Bit >>>>>1BYTE ist weg

    MfG

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zitat Zitat von Rone Beitrag anzeigen
    Dim A As Bit >>>>>1BYTE ist weg
    Hallo Rone,
    das liegt halt daran, dass der Speicher in Bytes organisiert ist und hat nichts mit Bascom zu tun.
    Der Compiler merkt sich aber, dass von dem benutzten Byte noch 7 Bit frei sind. Kommt dann ein
    Dim B As Bit
    wird das zweite Bit desselben Bytes verwendet.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.01.2007
    Ort
    westliches Pannonien
    Beiträge
    123
    Hallo for_ro,
    kann Dir voll und ganz zustimmen. Hätte es nur selber ausprobieren müssen.
    Danke nochmal für die Richtigstellung.

    MfG

Ähnliche Themen

  1. Stellen (Einer, Zehner, ...) einer Zahl seperat speichern
    Von HF SHOOTER im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 06.11.2007, 03:04
  2. Variablen im Flash speichern
    Von Brantiko im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 19.03.2007, 14:28
  3. at89s52 - Variablen dauerhaft speichern
    Von Karl Weber im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 1
    Letzter Beitrag: 03.07.2006, 11:48
  4. Variablen in SRAM speichern?
    Von BASTIUniversal im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 26.01.2006, 19:17
  5. Variablen mit Bascom speichern
    Von Murus im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 11.09.2005, 00:24

Berechtigungen

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