- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: Hilfe: Programm übersetzen C -> BasCom

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    02.02.2004
    Alter
    57
    Beiträge
    13

    Hilfe: Programm übersetzen C -> BasCom

    Anzeige

    Powerstation Test
    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:
    Code:
    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

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    38
    Beiträge
    4.255
    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

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    02.02.2004
    Alter
    57
    Beiträge
    13
    Zitat Zitat von uwegw
    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:
    Code:
    #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:
    Code:
    #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
    Code:
    #define ENC28J60_CS_LO()    ENC28J60_PORT |=  (0<<ENC28J60_PIN_CS);
    ???


    Cu,
    Samson2

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    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

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    02.02.2004
    Alter
    57
    Beiträge
    13
    Ahhh!

    Danke, das hilft mir erstmal weiter.

    Cu,
    Samson2

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress