PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AND-Funktion in Bascom schreiben



Skynet
15.08.2009, 13:34
Hallo! Versuche schon ewig eine UND-Funktion zu erstellen, habe vorher n C-Control mit Basic gehabt da wars viel einfacher.

Bei C-Control schaut es ungefär so aus:
IF Port1 AND Port2 = 1 THEN
Port3 = 1
ELSE
Port 3 =0
END IF

Aber diese AND-Funktion oder auch OR,NOR,NAND usw. funktionieren nicht bei BASCOM, es kommen immer Fehlermeldungen.

So habe ich eine komplizierte IF-Schliefe gebaut um 3 Taster UND-Ferknüpft auf ne LED zugeben

$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000

Config Porta.4 = Output
Led Alias Porta.4

Config Pina.0 = Input
T1 Alias Pina.0

Config Pina.1 = Input
Dim T2 As Bit

Config Pina.2 = Input
Dim T3 As Bit

Porta.0 = 1
Porta.1 = 1
Porta.2 = 1

Do
If Pina.1 = 0 Then
T2 = 1
Else
T2 = 0
End If
If Pina.2 = 0 Then
T3 = T2
Else
T3 = 0
End If
If T1 = 0 Then
Led = T3
Else
Led = 0
End If
Loop

End


Nur diese Variante ist zulang zuaufwendig und verschwendet ressourcen, und wenn man komplexe Anwendungen wünscht wird das Programm zu langsam.
Ich habe überall nach Quellcodes gesucht aber nichts gefunden, selbst in mein BASCOM-Buch ist sowas einfaches nicht drin.

Bitte um Hilfe, Danke!

recycle
15.08.2009, 14:21
Aber diese AND-Funktion oder auch OR,NOR,NAND usw. funktionieren nicht bei BASCOM, es kommen immer Fehlermeldungen.

Die funktionieren schon, du muss sie nur richtig auschreiben.


"IF Port1 AND Port2 = 1 THEN "

Das ist eine verkürzte Schreibweise die in vielen Sprachen funktioniert, aber so wirklich eindeutig sind die beiden Ausdrücke die du hier über AND verknüpfst ja nicht.
Schreib es mal richtig aus, dann gehts auch in Bascom:


If Porta.1 = 1 And Porta.2 = 1 Then
Portd.3 = 1
Else
Portd.3 = 0
End If

stefan_Z
15.08.2009, 16:17
Öhm "and" und "AND" sind aber was unterschiedliches...
IF A = 5 and B = 10 THEN LED = 1
setzt LED = 1 wenn beide Bedingungen erfüllt sind.

A = B AND C
führt die logische Operation AND aus.

Bascom kennt folgende Operationen:
AND
- falls die Bits bei beiden Variablen an der selben Stelle 1 sind wird 1 übernommen
- &B11011111 AND &B10100001 = &B10000001

NOT
- invertiert eine Variable
- A = NOT &B10100001 ---> A = &B01011110

OR
- jedes gesetzte Bit der beiden Variablen wird übernommen
- &B00001111 OR &B11110000 = &B11111111

XOR
- falls die Bits bei beiden Variablen an der selben Stelle ungleich sind wird 1 übernommen
- &B11111111 OR &B11110000 = &B00001111


In Bascom kann man nur eine Operation pro Zeile ausführen.
Also musst du das so schreiben:

Variable = Port1 AND Port2
IF Variable = 1 THEN
Port3 = 1
ELSE
Port3 = 0
END IF

Skynet
15.08.2009, 19:08
Wunderbar, vielen dank. komisch das ich das bei google und so nicht gefunden hab

stefan_Z
15.08.2009, 20:50
Das liegt nicht an dir, sondern eher an Bascom und seiner blöden Dokumentation...
AND/OR/XOR/NOT werden unter "Language Fundamentals" abgewickelt...
Nicht wirklich schlau meiner Meinung nach....
Hier gibts immer aktuell die Hilfe....
http://avrhelp.mcselec.com/

recycle
16.08.2009, 00:11
Öhm "and" und "AND" sind aber was unterschiedliches...
IF A = 5 and B = 10 THEN LED = 1
setzt LED = 1 wenn beide Bedingungen erfüllt sind.

Stimmt, aber ich dachte genau letzteres wollte er machen.
Anstatt Port1 hatte ich Portx.1 verstanden und dacht, dass er einzelne Pins und nicht den ganzen Port meint.


A = B AND C
Naja, wenn Basom verstehen soll, dass er das mit "IF Port1 AND Port2 then" erreichen wollte, müsste Bascom schon recht viel Fantasie haben.
Dass Bascom das nicht hat ist mir eigentlich recht sympatisch, denn wenn Programme versuchen zu erraten was der Anwender meint, kommen da meist so "nützliche" Dinge wie die vielen Helferlein in MS Office bei rum, die immer genau das machen, was man gerade nicht will ;-)

recycle
16.08.2009, 00:20
Das liegt nicht an dir, sondern eher an Bascom und seiner blöden Dokumentation...
AND/OR/XOR/NOT werden unter "Language Fundamentals" abgewickelt...
Nicht wirklich schlau meiner Meinung nach....

Wenn ich die Bascom Online Hilfe verwende gehe meistens über die Suchfunktion. Da habe ich mich auch schon öfter geärgert, dass fundamentale Dinge nicht gefunden wurde und ich sie letztlich "zu Fuss"unter Language Fundamentals gefunden habe.

Ganz so dumm gedacht ist das aber eigentlich nicht. In einer Programmiersprache für Microcontroller kann man binäre Operationen doch durchaus als Fundamentals durchgehen lassen.
Suchfunktionen sind ja für Würter wie "and, or, not usw. in de englischsprachigen Texten nicht besonders hilfreich ;-)