Bernd Vogt schrieb:
> Und, unter welchen Umständen kann es passieren, dass man in das letzte
> 'if' reinläuft. Was läuft da falsch?
Unter dem Umstand, dass in der Variable status z.B. der Wert 0 ist.
Das könnte sein, wenn z.B. das RFM12 Modul nicht versorgt wird, oder,
oder...
> was macht rfm12_trans (0x0000) überhaupt?
Das sieht man, wenn man sich die Funktion mal genauer ansieht...
1 | uint16_t
|
2 | rfm12_trans(uint16_t wert)
|
3 | {
|
4 | uint16_t werti = 0;
|
5 |
|
6 | PIN_CLEAR(SPI_CS_RFM12);
|
7 |
|
8 | /* spi clock down */
|
9 | #ifdef CONF_RFM12_SLOW_SPI
|
10 | _SPCR0 |= (uint8_t)_BV(SPR1);
|
11 | #else
|
12 | _SPCR0 |= (uint8_t)_BV(SPR0);
|
13 | #endif
|
14 |
|
15 | werti = (uint16_t)(spi_send ((uint8_t)((0xff00U & wert) >> 8)) << 8);
|
16 | werti += spi_send ((uint8_t)(0x00ffU & wert));
|
17 |
|
18 | /* spi clock high */
|
19 | #ifdef CONF_RFM12_SLOW_SPI
|
20 | _SPCR0 &= (uint8_t)~_BV(SPR1);
|
21 | #else
|
22 | _SPCR0 &= (uint8_t)~_BV(SPR0);
|
23 | #endif
|
24 |
|
25 | PIN_SET(SPI_CS_RFM12);
|
26 | return werti;
|
27 | }
|
Dann wird klar: damit wird eine SPI-Übertragung abgewickelt. Und mit dem
Wort 0x0000 wird der Status abgefragt:
http://www.mikrocontroller.net/articles/RFM12#Register