- LiFePO4 Speicher Test         
Ergebnis 1 bis 6 von 6

Thema: Ports nach Bitmaske setzen?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer
    Registriert seit
    31.10.2008
    Ort
    Dresden
    Alter
    35
    Beiträge
    3
    Ja stimmt, danke für den Hinweis, ich hatte es im Simulator getestet und da ist mit das nicht aufgefallen weil es schien trotzdem zu funktionieren.

    Der Vorteil von der Methode ist das man sie immer wiederverwenden kann und nur die beiden Arrays anpassen muss. Aber die Bits da an die richtige Stelle zu schubsen ist natürlich effizienter, da hast du recht.

    Gruß Martin

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.708
    Zitat Zitat von deko Beitrag anzeigen
    ... Bit zu maskieren und in einer if schleife zu prüfen ... das muss doch auch einfacher gehen? ...
    Ich nehme mal an, dass sich die Bitmuster immer wieder mal ändern. In einer Matrix von 10 x 12 LEDs (in einem LED-PingPong-Spiel) hatte ich verschiedene Muster mithilfe von Schleifen an- und ausgeknippst. Für Deine Aufgabe könnte das so aussehen:
    Code:
    // ........                     
     #define SetBit(ADDR,BIT)       ((ADDR) |= (1<<(BIT)))          // Setzt Bit
     #define ClrBit(ADDR,BIT)       ((ADDR) &= ~(1<<(BIT)))         // Löscht Bit
     #define IsBitSet(ADDR,BIT)     (((ADDR) & (1<<BIT))?1:0)       // Fragt Bit = 1?
    // ........                        
     volatile int8_t        Byte_A;         // 
     volatile int8_t        portpin;        // Pinadressierung (im Port A)
    // ........                        
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    // ........                     
    //      Mal beispielsweise (m)ein Musterbyte für die ersten acht Bits
      Byte_A   = 0b00110000;        // Ist natürlich dasselbe wie Byte_A = 48,
                                    //   sieht für mich aber "deutlicher" aus
                                    //   ... dabei stehen hier        
    //        das Bit 1 als LSB (gaaanz rechts) und Bit 8 als MSB (gaaanz links)
                                    //
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    // ........                     
    // Jetzt fragen wir mal acht bits ab und setzen die Portpins
      
      for (uint8_t loopus = 0; loopus <= 7; loopus++)
      {                             
        portpin = 7 - loopus;       // Brauchen wir zur Pinadressierung im Port A
        ClrBit (PORTA, nmbrbit)     // Pinn mal auf low setzen
        if (IsBitSet (Byte_A, loopus))      // Abfrage des tatsächlichen Bits und
          SetBit (PORTA, nmbrbit)           //  .. wenn das "1" ist - Pin auf high
      }                             // Ende for (uint8_t loopus ,,,
    // ........                     
    
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Die Bittabelle wie oben geschrieben:
    Bit1 = PA7
    Bit2 = PA6
    Bit3 = PA5
    Bit4 = PA4
    Bit5 = PA3
    Bit6 = PA2
    Bit7 = PA1
    Bit8 = PA0
    ....
    Für die einzelnen/anderen Ports ist der Start- und Endwert der Laufvariablen und die Rechenvorschrift für die Pinnummer den Gegebenheiten anzupassen.

    Natürlich ist das nix für Leute, die keine Schleifen mögen.
    Ciao sagt der JoeamBerg

Ähnliche Themen

  1. Hilfe bei Optimierung von Ports setzen
    Von graffiti im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 06.07.2008, 21:25
  2. Denkanstoß... Setzen rücksetzen von Ports
    Von EDatabaseError im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 31.03.2008, 18:41
  3. Ports aus Variablen setzen/löschen
    Von humperdinger im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 28.02.2008, 14:12
  4. Nach Interrupt werden die Ports zurückgesetzt
    Von DanielV. im Forum C - Programmierung (GCC u.a.)
    Antworten: 6
    Letzter Beitrag: 22.09.2007, 19:20
  5. Zustand der Ports nach verlassen von Schleife festlegen
    Von popi im Forum C - Programmierung (GCC u.a.)
    Antworten: 11
    Letzter Beitrag: 21.06.2006, 22:17

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress