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
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?
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
Hallo
So vielleicht:
Gruß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
mic
P.S.: Alternative Ausgabe:
Print bin(Status_taster)
Geändert von radbruch (04.08.2013 um 09:36 Uhr)
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo und Danke für eure Hinweise bzw. Hilfen.
Dann werde ich mich mal nach einer anderen Lösung umsehen
Das ist nicht ganz richtig, wie den Bascom Language-Fundamentals zu entnehmen ist:Es gibt in Bascom keine Bit-Variablen.
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:
Einfacher wäre es natürlich so: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 ...
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:status_taster.0 = NOT PINC.0 status_taster.1 = NOT PINC.1 ...
Code:Dim status_taster as Word status_taster = PINC shift status_taster, left, 8 status_taster = status_taster + PINDVielleicht sind das ja ein paar DenkanstößeDann werde ich mich mal nach einer anderen Lösung umsehen
Das ersetzt die else-Zweige: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:
Status_taster = 0
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Okay - 1:0 für Dich...Das ersetzt die else-Zweige:
Status_taster = 0
@Sauerbruch
dort wird nur erklärt welche Daten-Typen es gibt
Dim A As Bit >>>>>1BYTE ist weg
MfG
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.
Hallo for_ro,
kann Dir voll und ganz zustimmen. Hätte es nur selber ausprobieren müssen.
Danke nochmal für die Richtigstellung.
MfG
Lesezeichen