www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bitzuweisung eines PortPins


Autor: Steffen B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
#define LED PB1    // PB1 als LED definiert

#define ein 1 // habe auch schon #define ein true versucht
#define aus 0 

uint8_t Anzeige = 1;

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

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

Kann man es in solch einer Form machen?

Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Analog (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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); */
[...]

Autor: Analog (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
achso ein else fehlt übrigens auch , sonst immer aus...

Autor: Steffen B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steffen B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe jetzt die Zuweisung in einem struct gemäß den anderen 
Beiträgen vorgenommen:
struct test {
  unsigned b0:1;
  unsigned b1:1;
  unsigned b2:1;
  unsigned b3:1;
  unsigned b4:1;
  unsigned b5:1;
  unsigned b6:1;
  unsigned b7:1;
} __attribute__((_packed_));

#define Last ((volatile struct test*)&PORTB)->b0
#define LED ((volatile struct test*)&PORTB)->b1

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

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

Autor: Johannes M. (johnny-m)
Datum:

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

Autor: Steffen B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann kommt trotzdem der gleiche Fehler.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.