Dieser Text ist aus einem AVR-Datenblatt zum Thema SPI: /* Set MOSI and SCK output, all others input */ DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK); damit die Zeile compiliert, müßte ich erstmal definieren #define DDR_SPI DDRB aber was für DD_MOSI? Ist das schon irgendwo vordefiniert? Ich lese das so, daß eine "1" von rechts in ein leeres Byte gschoben wird, und dann werden diese Bytes "oder"-Verknüpft ond dem DDRB zugewiesen. Aber wäre es nicth besser, erst zu lesen? Falls ich noch andere Bits verwende, die unverändert bleiben sollen? Sorry, ich finde das in C ein bischen kompliziert. In Assembler kann ich einfach "SBI DDRB,7" machen, in Bascom "DDRB.7 = 1" ..
In C kannst Du auch statt SBI DDRB,7 // Setze Bit 7 in DDRB auch DDRB |= (1<<7) // Setze Bit 7 in DDRB statt CBI DDRB,7 // Loesche Bit 7 in DDRB auch DDRB &= ~(1<<7) // Loesche Bit 7 in DDRB machen. Die Dinge mit den Defines, so was gibt es auch in Assembler. Sie sind dafür gedacht das ganze übersichtlicher und Hardwareunabhängiger aufbeuen zu können.
> aber was für DD_MOSI? Das entscheidest Du - an welchem Pin von Port B ist MOSI und wo ist SCK? Die Bitnummern (0..7) dieser Pins weist du den Konstanten DD_MOSI und DD_SCK zu. Beispiel: MOSI ist PortB.3, also #define DD_MOSI 3 > Aber wäre es nicth besser, erst zu lesen? Falls ich noch > andere Bits verwende, die unverändert bleiben sollen? Richtig. DDR_SPI = DDR_SPI | (1<<DD_MOSI)|(1<<DD_SCK); oder, C-typisch knapper geschrieben: DDR_SPI |= (1<<DD_MOSI)|(1<<DD_SCK); Allerdings sagt der Kommentar oberhalb Deiner Zeile, daß alle anderen Pins Eingänge werden sollen, und dem entspricht die direkte Zuweisung.
Ah ja, danke. Ich hab eben gedacht, wenn man schon controller-spezifische Dateien einbindet, respektive einstellt im AVR-Studio, dann wären vielleicht controller-passend schon Konstanten wie MOSI, MISO, CLK darin definiert..? So wie für die Portadressen PORTA, PORTB usw.
CAnfänger wrote: > Ah ja, danke. Ich hab eben gedacht, wenn man schon > controller-spezifische Dateien einbindet, respektive einstellt im > AVR-Studio, dann wären vielleicht controller-passend schon Konstanten > wie MOSI, MISO, CLK darin definiert..? Sowas ist immer ein zweischneidiges Schwert. Für dich mag das jetzt nach Arbeitserleichterung aussehen und im Prinzip geb ich dir damit sogar recht. Für jemanden der sich eine Software Implementierung baut und daher diese Funktionen auf ganz andere Pins verteilt ist das ein Grund für heftiges Fluchen. Je mehr defines vordefiniert sind, desto höher sind die Chancen, dass sie mit den Vorstellungen des Anwendungsprogrammierers kollidieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.