Bit Adressierung beim ATMEGA8

Gast #167139
Gibt es denn beim GCC die Möglichkeit einzelne Bits direkt zu
adressieren?

Ich denke dabei an sowas: (so hab ich beim C515C z.B. Taster
definiert)

sbit Schalter1 = PortB.7;

Im Programm muss ich dann nur noch:

Schalter1 = EIN;
Schalter1 = AUS;

(natürlich mit der entsprechenden define Anweisung)
Gast
Naja, das mein ich nicht. Dass man die Portregister maskieren kann ist
schon klar.

Was ich möchte ist eine Variable, die direkt auf die einzelnen Portpins
zugreift.

Also Schalter1 = 1; --> z.B. PortD.5 hat 5V
Gast
Tja, und das geht nunmal so nicht, es sei denn du definierst dir ein
Makro. Lies mal ein bischen im Datenblatt und dir wird vielleicht sogar
klar, warum das so ist.
Dann hast du auch ein wenig mehr verstanden, wie ein Mikrocontroller
funktioniert.
Gast
Es gibt AVR Kompiler, die sowas können, aber der GCC definitiv nicht.

Mich hat das auch schon gestört.

Man muß also für jeden einzelnen Pin umständlich 2 defines machen:

#define KEY1_PIN  PINB  ;Input port
#define KEY1_NO   PINB2 ;pin number

if( KEY1_PIN & 1<<KEY1_NO )
  mache was

usw.


Peter
Gast
@Peter:
stimmt, das ist ziemlich umständlich.
Ich bin mir jetzt nicht ganz sicher, aber es könnte sein, dass die Pins
in der "avr/io.h" schon definiert sind.
Sonst ist es mit "1<<n" doch relativ elegant, wobei n ja die
Pin-Nummer angibt.

für das Ein- bzw. Ausschalten kann man sich natürlich Makros scheiben,
die die Arbeit erleichtern.

Ich verwechsle auch regelmässig PORTA &= ~(1<<N) mit PORTA |= (1<<N).
Ich weiß dann immer nicht welche Variante den Ausgang auf ein- und
welche ihn ausschaltet.
Erschwerend kommt dann noch das Leuchten der LEDs auf dem STK550 hinzu
(L-aktiv).

Gruß Rahul
Gast
Hi

ich definier mir deshalb immer für jeden Ausgangspin zwei Makros der
Art

#define HS1_ON          PORTC|=(1<<0)
#define HS1_OFF         PORTC&=((unsigned char)(~(1<<0)))

wobei ON und OFF nicht unbedingt High und Low entsprechen müssen. Für
Eingänge gibts dann noch

#define IN1             (PINA&(1<<6))

Matthias

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.