hallo, ich habe folgendes problem: ich weis nicht was der unterschied zwischen diesen 2 befehlen ist bzw wie unterschiedlich sich diese verhalten...gibt es überhaupt unterschiede? beispiel 1: c-quelltextausschnitt: DDRA = 0xff; //port a als ausgang PORTA = 0x04; //ein bit in port a auf 1 setzen beispiel 2: c-quelltextausschnitt: DDRA = 0xff; //port a als ausgang PORTA |0 (1 << 2); //ein bit in port a auf 1 setzen was ist der unterschied zwischen den zwei beispielen? welche methode verwendet man während des eines programms um am ausgang eine veränderung vorzunehmen? was bedeutet eigentlich bei avr studio in der simulation bei den ports PIN? es gibt ja DDR (data direction register) und PORT (ein/ausgänge). aber was ist PIN?
Ich empfehle die Lektüre http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Ansonsten: - |0 gibt es meines Wissens nicht. - PIN ist das EIngangsregister
c-quelltextausschnitt: DDRA = 0xff; //port a als ausgang PORTA = 0x04; //ein bit in port a auf 1 setzen beispiel 2: c-quelltextausschnitt: DDRA = 0xff; //port a als ausgang PORTA |= (1 << 2); //ein bit in port a auf 1 setzen so muss es heissen...da hat sich ein tippfehler eingeschlichen bei dem |=.... ich lese und arbeite mit dem gcc tutorial...aber genau dabei kommt diese frage zu den unterschieden bei mir auf...
pille1990 wrote: > DDRA = 0xff; //port a als ausgang > PORTA = 0x04; //ein bit in port a auf 1 setzen Setzt PORTA.2=1 und alle anderen Bits von PORTA auf 0 > beispiel 2: > > DDRA = 0xff; //port a als ausgang > PORTA |= (1 << 2); //ein bit in port a auf 1 setzen Setzt Bit 2 von PORTA auf 1 Johann
Also mit port ist eben der ganze port gemeint, mit PIND6 z.b. kannst du ganz gezielt ein einzelnes bit setzten oder abfragen. bsp:
1 | sbis PORTA, PINA1 |
Dazu braucht man die zwei verschiedenen ausdrücke. PINA0 ist also der name des 0-ten bits im register PORTA
> PORTA = 0x04; //ein bit in port a auf 1 setzen Weist dem kompletten PORTA auf das Bitmuster 0000 0100 (enspricht 0x04 in hexadezimal) zu. D.h. nach der Anweisung ist auf dem Port A nur das 3. Bit high, alle anderen sind low. > PORTA |= (1 << 2); //ein bit in port a auf 1 setzen Zuerst einmal: mit (1 << 2) wird eine 1 zwei Bits nach links geschoben, was wieder dem Bitmuster 0000 0100 (= 0x04) ergibt. |= ist eine Kurzschreibweise für: PORTA = PORTA | (1 << 2); Es wird also der aktuelle Zustand (Bitmuster) gelesen und dann mit dem Bitmuster 0000 0100 bitweise verodert ( | ). Anschließend wird dieses Ergebnis wieder auf den Port zurückgeschrieben. Als Resultat ist das 3. Bit auf dem Port gesetzt (high), ohne den Zustand der anderen Bits verändert zu haben. Marcel
danke für die ganzen antworten....vor allem marcels beitrag war sehr hilfreich...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.