-         

Ergebnis 1 bis 5 von 5

Thema: "sbit"-Funktion

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    122

    "sbit"-Funktion

    Anzeige

    Von meinem Schulungs-uC 80C537 kenne ich die Funktion "sbit", die mir die Möglichkeit für "Port (oder Pin) Shortcut's" gibt.
    Ich möchte diese auch für meinen Atmel nutzen und habe etwas gefunden, weiss jedoch nicht ob das so funktioniert. (Habe momentan keine Möglichkeit mit uC zu testen...)
    Es geht um eine Bedienung mit je 3 Tasten links und rechts von einem Display. Ich möchte 6 Shortcuts haben. z.B. L1,R1,L2,R2, etc.
    Könnt ihr mir sagen, ob das mit dem Programm unten läuft? Danke!!

    Code:
    unsigned int L1,L2,L3,R1,R2,R3;
    
    int main(void)
    {
         DDRA=0x00;
         L1=~(PINA&0x01);
         L2=~(PINA&0x02);
         L3=~(PINA&0x04);
         R1=~(PINA&0x08);      
         R2=~(PINA&0x10);
         R3=~(PINA&0x20);
         
         while(1)
         {
                if(L1)
                mach irgendwas;
    
                if(L2)
                mach irgendwas anderes;
    
                if(etc.).......
    
          }
       
    }
    [/code]

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    L1 = ~(PINA & 0x01) heißt ja
    L1 = 0xFE oder
    L1 = 0xFF
    das wäre IMMER >0
    ????

    wenn du das bit-0 in PINA abfragen willst,
    müßtestdu das mit "define" festlegen

    #define L1 (PINA & 0x01)
    etc.

    dann wäre if (L1) ===> if ( PINA & 0x01)

    oder du willst ganz was anderes, und ich hab's nicht verstanden
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    06.07.2004
    Beiträge
    122
    Hallo PicNick

    Danke vielmals... aha. define. OK.
    Genau das wollte ich wissen!

    Danke!

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    So wird's nicht laufen.
    Du musst zumindest L1-L3 und R1-R3 in die while-Schleife ziehen.
    Und Entprellen willst du wahrscheinlich auch.
    Oder defines als Abkürzung, wie PicNick schreibt:
    Für low-aktive Sschalter
    #define L1 (!(PORTA & 0x01))

    ZUm setzen von Bits geht einfach
    PORTA |= 0x08; // setzt bit 3
    Dein Compiler sollte daraus die passende asm- Instruktion generieren, hier sbi.
    Zum Löschen eines Bits:
    PORTA &= ~0x08;

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    Zitat Zitat von SprinterSB
    #define L1 (!(PORTA & 0x01))
    Oder besser lesbar als:
    Code:
    #define  L1   (bit_is_clear(PORTA, 1))
    MfG Kjion

Berechtigungen

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