- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 27

Thema: Einfache Schreibweise einer 5-Bit Wahrheitstabelle

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Hallo Freunde.

    Das Arbeiten am Slave-Controller habe ich nun erst einmal beiseite gepackt und mich an den Master gesetzt, welcher neben dem Display und der Cursor-Steuerung auch Übertragungsbits bereit stellt.
    Allerdings habe ich dabei ein kleines Problem, und es kann ja sogar auch sein, dass das Ganze so gar nicht funktioniert, wie ich mir das vorstelle:

    Beim Einlesen eines ganzen Registers konnte ich ja das gesamte Register verwenden. Nun allerdings habe nur noch Teile 2er Ausgaberegister zur Verfügung, nämlich von PortB und PortD.
    Mit den nun für mich relevanten Ports versuchte ich, eine neue Wahrheitstabelle aufzubauen, welche in einer "Select" zusätzlich zu einem ausgegebenen Display-Text angesprochen wird.

    Hier der Codeausschnitt:

    Code:
    ' Konfiguration der Ausgangsbits für Wahrheitstabelle
          Ausgabebyte.0 = Portd.7
          Ausgabebyte.1 = Portd.6
          Ausgabebyte.2 = Portd.5
          Ausgabebyte.3 = Portb.7
          Ausgabebyte.4 = Portb.6
          Ausgabebyte.7 = Portb.0
    
          Locate 1 , 1 : Lcd "3.1 Stillstehend" : Locate 2 , 1 : Lcd Chr(1) : Locate 2 , 16 : Lcd Chr(2)
    
    '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ' Konfigurieren und Ausgabe der Musterbits für stehende Muster
    
          Locate 2 , 2
          Select Case Starr
             Case 0 : Ausgabebyte = &B00000000 : Lcd " Bitte w hlen " : Locate 2 , 10 : Lcd Chr(3)
             Case 1 : Ausgabebyte = &B11111111 : Lcd " Alle Cluster "
          End Select
    Die Ausgangsbits sind korrekt als Ausgänge konfiguriert, die zugewiesene Variable als Byte deklariert. Dieser kleine Bereich ist Teil eines 5,3KB großen Programms, weshalb ich nur diesen Ausschnitt poste. Bislang funktioniert auch alles tadellos, und mit dem Sprung in die Variable "Starr" wird auch der in der Select stehende Text für den entsprechenden Wert von "Starr" korrekt ausgegeben. Die Variable funktioniert also tadellos, nur werden die Ausgänge nicht gesetzt.

    Setze ich hingegen testweise NUR einen einzelnen Port, indem ich ihn direkt anrufe, dann wird der Ausgang wie gewünscht gesetzt.

    In etwa so:

    Code:
          Locate 1 , 1 : Lcd "3.1 Stillstehend" : Locate 2 , 1 : Lcd Chr(1) : Locate 2 , 16 : Lcd Chr(2)
    
    '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    ' Konfigurieren und Ausgabe der Musterbits für stehende Muster
    
          Locate 2 , 2
          Select Case Starr
             Case 0 : Portb.0 = 0 : Lcd " Bitte w hlen " : Locate 2 , 10 : Lcd Chr(3)
             Case 1 : portb.0 = 1 : Lcd " Alle Cluster "
          End Select
    Kann es also u.U. daran liegen, dass ich in einem Byte lediglich Ports eines einzelnen Registers anrufen kann oder geht das bei Ausgängen gar nicht?


    LG - Maik

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    706
    Ach menno - das hatten wir doch schon:

    X = A bedeutet, dass der Variablen X der Wert von A zugewiesen wird. So rum - und nicht anders!!!
    Das Gleichheitszeichen geht bei Bascom nur in eine Richtung: Der rechts vom Gleichheitszeichen stehende Wert wird der links davon stehenden Variablen zugewiesen. Die links stehende Variable macht NIEMALS etwas mit der rechts stehenden Variable. Das ist der fundamentale Unterschied zum Gleichheitszeichen im mathematischen Sinne.

    Wenn Du also am Anfang schreibst X = A und dann im Verlauf mit X weiterrechnest, ändert sich A in keinster Weise! Der Befehl X = A liegt erstens schon lange zurück, und zweitens hat die links stehende Variable wie gesagt niemals einen Einfluss auf die rechts stehende Variable!

    Was macht also diese Befehlssequenz:


    Ausgabebyte.0 = Portd.7
    Ausgabebyte.1 = Portd.6
    Ausgabebyte.2 = Portd.5
    Ausgabebyte.3 = Portb.7
    Ausgabebyte.4 = Portb.6
    Ausgabebyte.7 = Portb.0

    ?????

    Riiiiiichtiiiig - nicht das Byte "Ausgangsbyte" bestimmt die Port-Pegel, sondern aus den Bits, die in den Registerzellen PORTD.7, D.6, D.5, B.7 B.6 und B.0 stehen, wird das Byte "Ausgangsbyte" zusammengebastelt.UND NICHT ANDERSHERUM!!!! Ich nehme an, dass an einer so frühen Stelle alle Bits in den PORT-Regsitern noch 0 sind, damit dürfte Ausgangsbyte in diesem Moment auch &b00000000 sein - aber das ist ja auch egal, denn später passiert ja anscheinend irgendwas mit diesem Byte, d.h. es wird ohnehin verändert.

    Klingelt´s jetzt vielleicht so weit, dass Du auf die Lösung kommst?

Ähnliche Themen

  1. Kurze Schreibweise bei If- Bedingung in Bascom?
    Von rylix im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 17.06.2011, 16:58
  2. Ersten 8 bit einer 32 bit Zahl auslesen
    Von C_Classic im Forum C - Programmierung (GCC u.a.)
    Antworten: 15
    Letzter Beitrag: 23.05.2010, 00:06
  3. TTL Logik Wahrheitstabelle
    Von Micha.Berlin im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 26.05.2008, 22:32
  4. Ein bestimmtes Bit einer Variable überschreiben
    Von Dane im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 15.04.2006, 14:00
  5. Antworten: 5
    Letzter Beitrag: 30.06.2005, 16:51

Berechtigungen

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

LiFePO4 Speicher Test