Bascom: verzweigen wenn Wert nicht in Tabelle

dg2ygq

Neues Mitglied
23. Juli 2007
239
0
0
Bielefeld
Sprachen
Wie kann ich verzweigen, wenn ein Wert nicht in der Tabelle steht?

Ich lese meinen 8poligen, 40stelligen Schalter aus, vergleiche die Bitfolge mit meiner Tabelle, und ordne darüber wiederrum einer Variablen einen Wert zu.

Beispiel:
Code:
Schalter = Pina 
Kanal = Lookdown(schalter , Channel , 40)

Channel:
Data &B11101111 , &B11100001 , &B11101001 , &B11101010 , &B11111000 , &B11110000 , &B11101101 , .........................

Somit ergeben die "sinnlosen" Bitmuster die Schalterpositionen zwischen 1 und 40.

Wenn nun der Schalter nicht richtig einrastet, und somit ein unbekanntes Bitmuster anliegt, mach der Rest vom Programm "irgendwas".
Würde in diesem Falle gerne verzweigen, ein "E" auf dem Display ausgeben, und wieder zum SChalter auslesen hüpfen.

Ich glaube die Zeile :
if Pina > 255 or Pina < 0 then ....
kann ich mir komplett schenken :dance3:
 
Hi Micha,

die Funktion lookdown liefer als Ergebnis -1 wenn die der Inhalt der übergebenen Variable nicht gefunden wird. Bedeutet für Dich, dass Du Kanal vom Typ Integer machen musst und dann kannst Du Kanal auf -1 abprüfen.

Wenn Kanal vom Typ Byte ist bleibt dann wirst Du als Ergebnis vermutlich eine binäre -1 (im Zweierkomplement) mit dem Byte-Inhalt $HFF bekommen. Sollte auch funktionieren.

Grüße,
Markus
 
Uih, Integer hab ich noch nie was mit gemacht.

Code:
Dim Kanal as Integer
.....
If Kanal = -1 then ...
???

im Zweierkomplement, was ist denn das?
Code:
If Kanal = &HFF then...
???
 
Hi Micha,

duale Zahlen kennen keine negativen Zahlen. Aus diesem Grund gibt es in der Digitlatechnik einen Trick. Der heißt "Zweierkompliment".
Zur Darstellung von negativen Zahlen mache man alle 0 zu 1 und 1 zu 0 und addiere 1.

Bedeutet:
Es soll die Zahl -1 dargestellt werden.
(-)1 dual ist &B00000001
Alles umdrehen ergibt &B11111110
+1 ergibt &B11111111
Bedeutet, wenn Du mir vorzeichenbehafteten Zahlen arbeiten möchtest repräsentiert die &B11111111 die -1 :eek:

Die Wikipedia sagt dazu folgendes:
Das Zweierkomplement (auch 2-Komplement, Zweikomplement, B(inär)-Komplement, Basiskomplement, K2-Zahl, 2K-Zahl, two's complement) ist eine Möglichkeit, negative Zahlen im Dualsystem darzustellen. Dabei werden keine zusätzlichen Symbole wie + und − benötigt. Dies ist vor allem für Computer wichtig, deren Logik allein auf Bits, welche entweder wahr oder falsch bzw. 1 oder 0 sind, ausgerichtet ist. Das heißt, binäre Zahlen sind Folgen von 0 und 1. Das Zweierkomplement ist die vorherrschende Art, mit der negative ganze Zahlen im Computer dargestellt und für Rechenoperationen mit Hilfe des Rechenwerks erschlossen werden.

Und mehr dazu gibt es unter:
http://de.wikipedia.org/wiki/Zweierkomplement

Grüße,
Markus
 
Einerkomplement , Zweierkomplement

Halihalo,

im Zweierkomplement, was ist denn das?
Da steht in meinem uralten Buch "Programmierung des Z80" von
Rodnay Zaks (Sybex Verlag) recht gut drin :)
Ich versuch das mal so grob mit meinen Worten wiederzugeben ...

Also Binärzahlen in einem Byte gehen ja von 0 bis 255 (0x00 ... 0xFF)
Wenn man jetzt damit rechnen möchte, dann könnte man nur mit
positiven Zahlen rechnen. 100 minus 200 würde ein bischen schlecht gehen.

Deswegen hat man das mit den vorzeichenbehafteten Binärzahlen gemacht.

Dafür wird das ganz linke Bit - bei einem Byte (Bits 0...7) Bit 7 (das MSB) als
Vorzeichen (0=plus, 1=minus) mißbraucht.

Einerkomplement:
Beim Einerkomplement sind die positiven Zahlen in der richtigen Form
zu sehen.
+5 => 00000101
+7 => 00000111
Die Zahl -5 oder -7 wird im Einerkomplement dadurch gebildet, das man
einfach alle Bits invertiert.
-5 => 11111010
-7 => 11111000
Im Bit 7 sieht man jetzt, das die Zahl negativ ist (1=minus)

Zweierkomplement:
Bei den positiven Zahlen ändert sich gegenüber dem Einerkomplement nichts.
Bei den negativen wird zuerst das Einerkomplement gebildet und dann
Eins dazugezählt. Also so ...
-5 => 11111010 (1er) => +1 => 11111011 (2er)
-7 => 11111000 (1er) => +1 => 11111001 (2er)

Mit dem Zweierkomplement kann man auch richtig addieren und subtrahieren.
Beim Einerkomplement kommt da leider nicht immer das richtige raus.

Zahlen ...
+127 => 01111111
+126 => 01111110
+125 => 01111101
...
+2 => 00000010
+1 => 00000001
0 => 00000000
-1 => 11111111
-2 => 11111110
-3 => 11111101
-4 => 11111100
...
-126 => 10000010
-127 => 10000001
-128 => 10000000

Das Buch hat mir schon oft mit den guten Erklärungen weitergeholfen :)

Wer es ganz genau haben möchte der suche bei Wikipedia oder mit Google :D
Es gibt bestimmt genug Erklärungen im Internet (für die, die dieses Buch
nicht haben)

Gruß
Dino
 
Alsoooooooo ....

Wenn ich meiner Variablen Integer zuteile, ist -1 = B11111111.
Gleichzeitig wäre das als Byte dann 255 ?!

Somit kann die IntegerVariable Werte zwischen +127 und -128 annehmen?

Ändere ich den Typ meiner Variablen nicht um, würde sie bei einem Wert der nicht in de Tabelle steht, 255 enthalten, richtig?

Wenn jetzt aber in der Tabelle ein Wert B11111111 wäre (ist ja nicht), würde in der Variablen trotzdem 255 stehen?

Ich habe mein Progrämmchen aber mit der Fehlerabfrage hinbekommen, zeigt nun nen E auf dem Display an, und verzweigt wieder zur Abfrage.

Vielen Dank für Eure ausführlichen Antworten!
 
Hi Micha,

glückwunsch!

Alle Deine Gedankengänge sind mit JA zu beantworten! Bedeutet, wenn Du Byte-Werte (für die es ja eigentlich keine negativen Zahlen gibt da Byte in BASCOm Vorzeichenlos ist) voll ausschöpfen willst so empfehle ich Dir auf jeden Fall auf Integer umzusteigen.

Grüße,
Ma
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)