Forum: Compiler & IDEs Noch einmal RFM 02 Sendemodul -das Testprogramm


von lothilein (Gast)


Lesenswert?

Hallo und Frohe Ostern!
Erst mal zu meiner Person:
Ich bin weder Schüler noch Student und habe auch in meinem  Berufsleben 
nichts mit Informatik oder mit Elektronik zu tun. Also  -Learning by 
doing-.

Nun zu meinem Problem:
Ich habe mir die HF-Module RFM01-RFM02-bestellt und möchte diese 
natürlich zum Senden/Empfangen bringen. Dazu habe ich mir das 
Testprogramm RFM02 (in Mikrocontroller.net veröffentlicht) kopiert. 
Dieses Testprogramm versuche ich nun zu verstehen und nachzuvollziehen, 
was sich der Programmierer dabei gedacht hat. Hierzu nun einen Auszug 
aus dem Testprogramm.

Beispiel: cmd = 0XCC00
void sendCommand(uint16_t cmd){
  uint8_t i;
  SCK_LOW;
  SELECT;
  for(i=0;i<16;i++){
    SCK_LOW;
    if(cmd&0x8000){  //mein Problem
      SDI_HIGH;
    }else{
      SDI_LOW;
    }
    SCK_HIGH;
    cmd = cmd << 1;
  }
  SCK_LOW
  asm("nop");
  UNSELECT;
}
Nun verstehe ich die Bedingung in der IF-Anweisung 
--if(cmd&0x8000)—nicht.
If—ok--
cmd --dürfte der Funktionsparameter sein
0X—zeigt das es eine hexadezimal ist
8000 –hexadezimalzahl—
Aber was ist mit--&-- gemeint, der Bitweise Operator – and-- ??
Wie muss ich diese Anweisung lesen? Welche Bedingungen müssen erfüllt 
werden damit der Befehl-- SDI_HIGH –ausgeführt wird  bzw. die else 
Anweisung ausgeführt wird?
Danke
Lothilein

von Markus F. (mfro)


Lesenswert?

Bitweises "AND".
1
cmd & 0x8000
"verunded" cmd mit 0x8000. Das Ergebnis ist entweder 0 oder != 0.

Letztendlich wird in der Zeile also schlicht geprüft, ob Bit 15 in cmd 
gesetzt ist oder nicht.

Ein Buch wär' wahrscheinlich wesentlich effizienter als die Operatoren 
hier einzeln abzufragen ;)

von Wolfgang (Gast)


Lesenswert?

Markus F. schrieb:
> Ein Buch wär' wahrscheinlich wesentlich effizienter als die Operatoren
> hier einzeln abzufragen ;)

Wenn das Internet wieder geht, kann man dort auch nachsehen, z.B.
http://de.wikibooks.org/wiki/C-Programmierung unter "Ausdrücke und 
Operatoren"

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
Noch kein Account? Hier anmelden.