Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe: Programm übersetzen C -> BasCom
Hallo ihr Spezialisten,
ich habe auch mal eine Frage zum umsetzen von C-Code nach Bascom Basic. Und zwar gibt es in dem C-Code mehrere Zeilen in der Form:
PORTB |= (1<<ENC28J60_PIN_SCK);
Der zweite Teil ist mir bereits klar. Mit (1<<ENC28J60_PIN_SCK) werden alle bits von ENC28J60_PIN_SCK um eins nach links verschoben. Nur das |= krieg ich nicht gebacken. Was bewirkt das genau?
Cu,
Samson2
Der Befehl setzt das Bit in PORTB mit der Nummer ENC28J60_PIN_SCK (müsste irgendwo als define stehen).
Könnte man so in Bascom umsetzen (das x steht für die Pinnummer)
Config Pinb.x = Output
ENC28J60_PIN_SCK Alias Portb.x
ENC28J60_PIN_SCK =1
Der Befehl setzt das Bit in PORTB mit der Nummer ENC28J60_PIN_SCK (müsste irgendwo als define stehen).
Könnte man so in Bascom umsetzen (das x steht für die Pinnummer)
Config Pinb.x = Output
ENC28J60_PIN_SCK Alias Portb.x
ENC28J60_PIN_SCK =1
Also hab ich das mit dem bit-Shiften falsch interpretiert?
Zum Vergleich, dass ich das richtig verstanden habe:
#define ENC28J60_DDR DDRB
#define ENC28J60_PIN_CS 4
ENC28J60_DDR |= (1<<ENC28J60_PIN_CS);
ENC28J60_DDR ist das Datenrichtungsregister für Port B.
ENC28J60_PIN_CS ist der Pin4 also wird Pinb.4 durch den Befehl auf 1 (also Ausgang) gesetzt.
Eine andere Sache:
#define ENC28J60_CS_HI() ENC28J60_PORT |= (1<<ENC28J60_PIN_CS);
#define ENC28J60_CS_LO() ENC28J60_PORT &= ~(1<<ENC28J60_PIN_CS);
Definiert die erste Zeile ein Makro (Funktion?), mit dem ich Pinb.4 auf 1 setze? Die zweite Zeile müßte dann ja das Pendant zum setzen auf 0 sein. Aber warum schreibt er dann nicht
#define ENC28J60_CS_LO() ENC28J60_PORT |= (0<<ENC28J60_PIN_CS);
???
Cu,
Samson2
Aber warum schreibt er dann nicht
#define ENC28J60_CS_LO() ENC28J60_PORT |= (0<<ENC28J60_PIN_CS);
Für HI wird Bit 4 gesetzt durch eine ODER-Funktion:
ENC28J60_PORT |= (0b00010000);
Für LO wird Bit 4 gelöscht durch eine UND-Funktion:
ENC28J60_PORT &= (0b11101111);
Deine Version wäre dies:
ENC28J60_PORT |= (0b00000000);
... und würde nichts bewirken.
Gruß Dirk
Ahhh!
Danke, das hilft mir erstmal weiter.
Cu,
Samson2
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.