- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 7 von 7

Thema: AND-Funktion in Bascom schreiben

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    16.10.2006
    Beiträge
    222

    AND-Funktion in Bascom schreiben

    Anzeige

    E-Bike
    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
    Code:
    $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!
    --------------

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    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:

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

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    Ö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

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    16.10.2006
    Beiträge
    222
    Wunderbar, vielen dank. komisch das ich das bei google und so nicht gefunden hab
    --------------

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    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/

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    Ö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

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    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

Berechtigungen

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

Solar Speicher und Akkus Tests