spi befehl

Gast #499570
Lesenswert?

Also das ganze Unterprogramm sieht so aus

void SPI_MasterInit(void)
{
/* Set MOSI and SCK output, all others input */
DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
/* Enable SPI, Master, set clock rate fck/16 */
SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
}
void SPI_MasterTransmit(char cData)
{
/* Start transmission */
SPDR = cData;
/* Wait for transmission complete */
while(!(SPSR & (1<<SPIF)))
;
}

Das einzige was ich daraus erkennen kann, ist, dass irgendwelche Bits um 
eine Stelle nach links verschoben werden
Gast #499579
Lesenswert?

>Also das ganze Unterprogramm sieht so aus

Zu einem Unterprogramm gehört i.d.R. auch ein "Überprogramm" (auch 
"Hauptprogramm" genannt").
Dort solltest du ein paar "#define" (oder ein paar "#include") finden.
"#define" vereinbart Makros. Und das ist Teil der C-Grundlagen, die 
jeder C-Programmierer haben sollte.
Gast #499581
Lesenswert?

Hallo,

falschrum. Es wird eine 1 um DD_MOSI stellen nach links verschoben.

Dazu gehört noch die Definition für DD_MOSI und DD_SCK, vermutlich 
DataDirection MOSI usw.
Dort sollte die Bit-Nummer des Ports zugewiesen sein.

Sowas hat immer zwei Vorteile: man kann lesen, daß er DD_MOSI und DD_SCK 
auf Ausgang setzt, bei z.B. DDR_SPI = $28 (BEISPIEL!) kann man das nicht 
ohne Nachblättern. Außerdem muß man bei einem Wechsel auf einen anderen 
AVR, der SPI an anderen Potrbits hat, nur die Zuordnungen in der 
Definition anpassen und überall im Programm werden ohne weitere Änderung 
die passenden Bits angefasst.

Gruß aus Berlin
Micahel

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren