www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kleine Frage zum Tutorial Assembler I/O-Grundlagen


Autor: Darius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich beschäftige mich gerade mit dem Tutorial um das programmieren eines 
µC zu erlernen.
http://www.mikrocontroller.net/articles/AVR-Tutori...
Doch leider stellt sich hier für mich schon eine Frage, die sicherlich 
durch einen Profi leicht zu beantworten ist.
Beim Tutorial wird ein Atmega8 programmiert.
Der Code lautet folgendermaßen:

.include "m8def.inc"         ; Definitionsdatei für den Prozessortyp 
einbinden

         ldi r16, 0xFF       ; lade Arbeitsregister r16 mit der 
Konstanten 0xFF
         out DDRB, r16       ; Inhalt von r16 ins IO-Register DDRB 
ausgeben

         ldi r16, 0b11111100 ; 0b11111100 in r16 laden
         out PORTB, r16      ; r16 ins IO-Register PORTB ausgeben

ende:    rjmp ende           ; Sprung zur Marke "ende" -> Endlosschleife

In der Beschreibung steht, dass in der Zeile "out DDRB, r16" das 
Datenrichtungsregister mit dem Wert von r16 geladen wird, folglich mit 
0xFF oder 0b11111111, also 8 mal die binäre 1.
Weiterhin steht in der Beschreibung folgendes:
In diesem Fall sind also alle 6 Pins von Port B Ausgänge.

Da der Atmega8 nur 6 Pins für Port B hat, ist das soweit klar, wieso nun 
alle Ausgänge sind.
Unklar ist mir jedoch, wieso man 8 mal eine binäre 1 benötigt und nicht 
6 mal, da ja nur 6 Pins vorhanden sind.
Ich gehe mal davon aus, dass man das bei einem Atmega16, welcher 8 Port 
B Pins hat, ebenso programmieren würde. Verstehe aber nicht, wieso man 
bei nur 6 Pins ebenfalls 8 binären Einsen in das Datenrichtungsregister 
schreibt.

Würde mich freuen, wenn mir das jemand kurz erklären könnte, möchte das 
nämlich von Grund auf verstehen und nicht mit vielen Fragezeichen 
weitermachen.

Vielen Dank.

Gruß
Darius

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
6 würden auch reichen. Für die beiden letzten Ports fehlt einfach nur 
der Pin, was du mit denen machst ist deshalb egal.

Autor: Darius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

vielen Dank. Dann habe ich ja doch nicht ganz so falsch gedacht und es 
eigentlich verstanden.

Gruß
Darius

Autor: space (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Du hast recht. Du verwendest wahrscheinlich die PDIP-Version. Das
Tutorial ist aber für alle Versionen (auch MLP und TQFP) gültig.
Diese haben nämlich alle Portpins für Port B.
Du bist schon auf dem richtigen Weg.
Viel Spass
Stefan

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.