Forum: Mikrocontroller und Digitale Elektronik Mehrere Pins gleichzeitig auf high setzen? (myAVRBoardMK3)


von samsung (Gast)


Lesenswert?

Hallo, besitze ein myAVRBoardMK3 und möchte gerne 2 PINs gleichzeitig 
auf hight setzen - jedoch wird immer nur die erste auf high gesetzt.

1
#define F_CPU 16000000
2
#include <avr/io.h>
3
#include <util/delay.h>
4
5
uint64_t foo;
6
7
int main(void)
8
{
9
DDRD = 0xff  // PORTD ALS AUSGANG DEFINIEREN
10
11
do {
12
13
PORTD |= (1<<0x00) | (1<<0x01);  // PIN 0 und 1 auf high setzen
14
_delay_ms (1000);
15
PORTD &= ~(1<<0x00) | (1<<0x01);  // PIN 0 und 1 auf low setzen
16
17
} while (1);
18
       
19
    return 0;
20
}
Nur die LED an PIN 0 geht an und aus, aber nicht die am PIN 1 ??

schreibe ich sie untereinander, funktioniert alles einwandfrei
1
PORTD |= (1<<0x00);  // PIN 0 auf high setzen
2
PORTD |= (1<<0x01);  // PIN 1 auf high setzen
3
_delay_ms (1000);
4
PORTD &= ~(1<<0x00);  // PIN 0 auf low setzen
5
PORTD &= ~(1<<0x01);  // PIN 1 auf low setzen

Was mache ich verkehrt, denn laut "AVR-GCC-Tutorial (Seite 18)" ist 
obige Schreibweise doch richtig?

Danke
samsung

von pastscho (Gast)


Lesenswert?

Hi
Haste auch schon das ganze so probiert dann müste es gehen

PORTD |= ((1<<0x00) | (1<<0x01));
_delay_ms (1000);
PORTD &= ~((1<<0x00) | (1<<0x01));

mfg
pastscho

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Siehe Vorrangregeln für C-Operatoren
http://www.ostc.de/c-precedence.pdf

bei http://www.ostc.de/

von samsung (Gast)


Lesenswert?

Hey danke euch es funktioniert

PORTD |= ((1<<0x00) | (1<<0x01));
_delay_ms (1000);
PORTD &= ~((1<<0x00) | (1<<0x01));

und dank der Erklärung auf ostc weiß ich nun auch warum

Danke

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
Noch kein Account? Hier anmelden.