2016-04-04 8 views
2

Ich versuche, das Äquivalent der Arduino shiftOut() Funktion in nativen c auf meinem MCU zu erstellen.arduino `shiftOut()` Funktion in nativen c

Ich möchte den Befehl int gTempCmd = 0b00000011; über eine shiftOut() Typ-Funktion mit MSBFIRST senden.

Wie würde der Pseudocode aussehen, damit ich die gpio-Funktionen meines MCUs zuordnen kann?

Dank

float readTemperatureRaw() 
{ 
    int val; 

    // Command to send to the SHT1x to request Temperature 
    int gTempCmd = 0b00000011; 

    sendCommandSHT(gTempCmd); 
    ... 
    return (val); 
} 


//Send Command to sensor 
void sendCommandSHT(int command) 
{ 
    int ack; 

    shiftOut(dataPin, clockPin, MSBFIRST, command); 
    .... 
} 
+0

Siehe https://www.arduino.cc/en/Reference/ShiftOut – Michael

Antwort

0

Betrachten Sie das folgende 'psuedo-C++'

Der Code funktioniert wie folgt:

  • die höchste nehmen, oder niedrigste Bit in dem Wort von AND-ing mit allen Nullen außer dem MSB oder LSB, je nach MSBFIRST-Flag
  • schreiben Sie es auf den Ausgangspin
  • den Befehl um einen Schritt in der richtigen Richtung verschieben
  • den Taktpin pulsen
  • repeat 8mal für jedes Bit in dem Befehl

Es ist ziemlich trivial dies auf eine beliebige Anzahl von Bits zu erweitern bis 32 durch einen Parameter für die Anzahl der Wiederholungen

void shiftOut(GPIO dataPin, GPIO clockPin, bool MSBFIRST, uint8_t command) 
{ 
    for (int i = 0; i < 8; i++) 
    { 
     bool output = false; 
     if (MSBFIRST) 
     { 
      output = command & 0b10000000; 
      command = command << 1; 
     } 
     else 
     { 
      output = command & 0b00000001; 
      command = command >> 1; 
     } 
     writePin(dataPin, output); 
     writePin(clockPin, true); 
     sleep(1) 
     writePin(clockPin, false); 
     sleep(1) 
    } 
} 
+0

@Lundin Zugabe änderte Code einen Funktionsaufruf verwenden GPIO-Pins zu setzen. Dies verhindert auch, dass der Compiler die Ablagen neu anordnet und die erste Zuweisung los wird. – Pelle