Forum: Mikrocontroller und Digitale Elektronik Bitzuweisung eines PortPins


von Steffen B. (Gast)


Lesenswert?

Hallo zusammen,

ich stehe im Moment mal wieder total auf dem Schlauch. Das gehört 
eigentlich zu den Grundlagen, aber ich komme im Moment nicht darauf und 
finde auch nichts. Ich stell mich wahrscheinlich nur blöd an.

Ich möchte einem Port eine 1 bzw 0 zuweisen und möchte einen "Trick" 
anwenden.
1
#define LED PB1    // PB1 als LED definiert
2
3
#define ein 1 // habe auch schon #define ein true versucht
4
#define aus 0 
5
6
uint8_t Anzeige = 1;
7
8
[...]
9
if (anzeige == ein) // Wenn Anzeige erfolgen soll
10
{
11
  LED = ein;    // LED's einschalten
12
  /* anstelle von PORTB = (1 << PB1); */
13
}
14
LED = aus;    // LED's ausschalten
15
/* anstelle von PORTB = (0 << PB1); */
16
[...]

Ich hoffe ihr habt das Prinzip, das ich damit erreichen will, 
verstanden.

Kann man es in solch einer Form machen?

von Volker (Gast)


Lesenswert?

meine Güte, benutzt doch einfach mal die Suche!

Das geht beim AVR gcc nur über spezielle Macros:

siehe hier:
Beitrag "sbit macro für avr-gcc"

Gruß
Volker

von Analog (Gast)


Lesenswert?

#define LED PORTB    // PB1 als LED definiert
#define PIN 1

#define LEDein LED|=(1<<PIN)  // habe auch schon #define ein true 
versucht
#define LEDaus LED&=~(1<<PIN)

uint8_t Anzeige = 1;

[...]
if (anzeige == ein) // Wenn Anzeige erfolgen soll
{
  LEDein;    // LED's einschalten
  /* anstelle von PORTB = (1 << PB1); */
}
LEDaus;    // LED's ausschalten
/* anstelle von PORTB = (0 << PB1); */
[...]

von Analog (Gast)


Lesenswert?

achso ein else fehlt übrigens auch , sonst immer aus...

von Steffen B. (Gast)


Lesenswert?

>meine Güte, benutzt doch einfach mal die Suche!
>

Das habe ich, ist nur blöd wenn man nicht auf die richtigen suchwörter 
kommt. ich hatte beispielsweise mit "bit" probiert

>Das geht beim AVR gcc nur über spezielle Macros:
>
>siehe hier:
>Beitrag "sbit macro für avr-gcc"

Danke für den Hinweis! Werde mir das mal zu gemüte führen.

von Steffen B. (Gast)


Lesenswert?

Hallo, ich habe jetzt die Zuweisung in einem struct gemäß den anderen 
Beiträgen vorgenommen:
1
struct test {
2
  unsigned b0:1;
3
  unsigned b1:1;
4
  unsigned b2:1;
5
  unsigned b3:1;
6
  unsigned b4:1;
7
  unsigned b5:1;
8
  unsigned b6:1;
9
  unsigned b7:1;
10
} __attribute__((_packed_));
11
12
#define Last ((volatile struct test*)&PORTB)->b0
13
#define LED ((volatile struct test*)&PORTB)->b1

und bekomme die Fehlermeldung:
1
../main.c:37: warning: '_packed_' attribute directive ignored

unsigned habe ich auch schon ersetzt durch int oder byte mit gleichem 
ergebnis

von Johannes M. (johnny-m)


Lesenswert?

Wie wäre es denn mit unsigned char oder uint8_t ? Einen Datentyp 
"unsigned" gibt es nicht...

von Steffen B. (Gast)


Lesenswert?

Dann kommt trotzdem der gleiche Fehler.

von Peter D. (peda)


Lesenswert?


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.