www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Port/Pin-deklaration


Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Im GCC-Tutorial ist die Deklaration ja so gelöst:
    DDRB = (1 << DDB0) | (1 << DDB1) | (1 << DDB2) | (1 << DDB3) | (1 << DDB4); 

Nun meine Frage, ob man es auch in etwa so schreiben könnte:
  DDRB.1=0;
  DDRB.2=1;
    .
    .
  DDRB.7=0;
   
Einfach nur der Übersicht halber, damit ich das für mich schön 
auskommentieren kann, was an welchem Pin hängt.

Danke Euch!

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

Bewertung
0 lesenswert
nicht lesenswert
Johannes Hofmann wrote:
>
>   DDRB.1=0;
>   DDRB.2=1;
>     .
>     .
>   DDRB.7=0;
>    
Das ist nicht standardkonform und wird vom GCC so nicht unterstützt. Man 
kann sich das über ein Bitfeld zwar selber "bauen", aber die im Tutorial 
benutzte Methode ist die ANSI-C-konforme und sollte auch benutzt werden.

Siehe auch Bitmanipulation

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes Hofmann wrote:
> Hallo
>
> Im GCC-Tutorial ist die Deklaration ja so gelöst:
>
>
    DDRB = (1 << DDB0) | (1 << DDB1) | (1 << DDB2) | (1 << DDB3) |
> (1 << DDB4); 
>
> Nun meine Frage, ob man es auch in etwa so schreiben könnte:
>
>
>   DDRB.1=0;
>   DDRB.2=1;
>     .
>     .
>   DDRB.7=0;
>    

könnte man, wenn dein Compiler (IAR?) die .-Snytax für Ports 
unterstützt. Der gcc machts nicht.

Aber selbst dann: Was hindert dich, das so zu formatieren:
      DDRB = (1 << DDB0) |      // Led an Pin 0
             (1 << DDB1) |      // noch ne Led an Pin 1
             (1 << DDB2) |
             (1 << DDB3) |
             (1 << DDB4); 

> Einfach nur der Übersicht halber, damit ich das für mich schön
> auskommentieren kann, was an welchem Pin hängt.

Wenn du das kommentieren willst, dann gib den Pins zb per #define schöne 
Namen
#define PERIPHERY_DDR        DDRB
#define PERIPHRY_PORT        PORTB
#define ALARM_LED_PIN        PB0
#define READY_LED_PIN        PB1
#define BUZZER_PIN           PB2


int main()
{
  PERIPHERY_DDR =   ( 1 << ALARM_LED_PIN )
                  | ( 1 << READY_LED_PIN )
                  | ( 1 << BUZZER_PIN );

  PERIPHERY_PORT = ( 1 << READY_LED_PIN );

  ...

}


Das Ziel ist es immer, den Code so zu gestalten, dass du nach 
Möglichkeit keinen zusätzlichen Kommentar brauchst. Dann kann auch der 
Kommentar nie falsch sein und bei Änderungen nicht mehr zum Code passen.

Ganz abgesehen davon, dass du bei Hardwareänderungen (der Buzzer wandert 
vom Pin PB2 zum Pin PB5) nur mehr an einer Stelle ändern musst und der 
Rest des Programms passt sich bei einem Neukompilieren ganz von alleine 
an.

Autor: Johannes H. (menschenskind)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Cool!
Danke für die Tipps.

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.