Bitzuweisung eines PortPins

Gast #788067
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?
Gast #788093
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); */
[...]
Gast #788167
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.
Gast #788980
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren