2016-05-18 12 views
0

Ich arbeite an AtMega8 in Eclipse.Erinnere dich an die Iteration, wenn eine Bedingung erfüllt wurde

In einer for-Schleife möchte ich überprüfen, ob die Pins PIND1 sind. Wenn dies der Fall ist, möchte ich ein Char Array von Pins haben, die in einer bestimmten Iteration 1 mit der Nummer dieser Iteration waren.

Wenn ein Pin von PIND in einer bestimmten Iteration 1 war, wird er in keiner anderen Iteration 1 sein.

Zum Beispiel:

1. PIND = 0b00110011 
2. PIND = 0b10001000 
3. PIND = 0b01000100 
Result  23112311 
+0

Es ist nicht klar, was ist die Beziehung zwischen den Zahlen in der Frage ... –

+0

Im tun Kurzschluss Tester. Ich möchte wissen, welche Pins mit welchen Pins kurzgeschlossen sind. In der ersten Iteration werde ich nur einen Pin von PORTD auf "1" setzen und dann andere Pins von PORTD prüfen, wenn sie "high" sind. Wenn ja, sind sie mit diesem exakten Pin kurzgeschlossen, den ich in dieser Iteration auf "1" gesetzt habe. In der nächsten Iteration werde ich den Pinsatz als "1" zum nächsten Pin ändern und erneut prüfen. Wenn einige Pins "high" sind, möchte ich sie erneut markieren. Wenn nicht, möchte ich, dass sie 0 bleiben. Ich muss sie um die Iterationszahl multiplizieren, weil ich wissen muss, welche Pins mit welchen Pins kurzgeschlossen sind, so dass sie nicht alle 0 oder 1 sein können. – Nollie

+0

Viele Worte, keine Erklärung. Was ist die Beziehung zwischen 0b00110011, 0b10001000, 0b01000100 und 23112311? –

Antwort

0

Obwohl die Idee mir peinlich aussieht, kann die Anforderung erfüllt werden, um den folgenden Code:

char arr[]="00000000"; 
uint8_t p; 

for (i=1; i<=ITERATIONS; i++) 
{ 
    p = PIND; 
    for (j=0; j<8; j++) 
    { 
     if ((p >> j) & 1) // Check the `j`s bit 
     { 
      arr[j] = i + '0'; // Convert number `i` into a char representing it 
     } 
    } 
} 

** Sie können die Reihenfolge Array umkehren wollen, ist geschrieben ..

+0

Wäre wirklich nett, wenn der Downvoter ihre Ansicht kommentiert. –

0
int shorted[8] = {0}; // hold results  
int i, pin = 0, iter = 1; 

while(pin < 8) 
{ 
    PORTD = 1 << pin; 

    // find all the pins that are shorted to the pin on this iteration 
    for(i = 0; i < 8; ++i) 
    { 
     if(PIND & (1 << i)) 
     { 
       shorted[i] = iter; 
     } 
    } 

    // Look for the next pin never shorted. Break while loop if all are done 
    pin = 8; 
    for(i = 0; i < 8; ++i) 
    { 
     if(shorted[i] == 0) 
     { 
      pin = i; 
      break; 
     } 
    } 

    ++iter; 
}  
Verwandte Themen