2016-05-18 2 views
0

Я работаю над AtMega8 в Eclipse.Вспомните итерацию при выполнении условия

В петле цикла я хочу проверить, если контакты PIND: 1. Если это так, я хочу иметь массив символов, который был 1 на определенной итерации с номером этой итерации.

Если какой-либо вывод PIND был 1 в определенной итерации, он не будет 1 в любой другой итерации.

Например:

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

Неясно, какова связь между цифрами в вопросе ... –

+0

Im делает тестер короткого замыкания. Я хочу знать, какие штырьки закорочены с помощью штифтов. На первой итерации я установлю только один вывод PORTD на «1», а затем проверьте другие контакты из PORTD, если они «высоки». Если это так, они замыкаются этим точным знаком, который я задал как «1» в этой итерации. В следующей итерации я изменил значение «1» на следующий вывод и снова проверил. Если некоторые контакты будут «высокими», я хочу их снова пометить. Если нет, я хочу, чтобы они оставались 0. Мне нужно несколько их по количеству итераций, потому что мне нужно знать, какие штырьки закорочены с помощью штифтов, поэтому они не могут быть всего 0 или 1. – Nollie

+0

Многие слова, без пояснений. Какова связь между '0b00110011',' 0b10001000', '0b01000100' и' 23112311' ??? –

ответ

0

Хотя идея выглядит неловко мне, требование может быть выполнено с помощью следующего кода:

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 
     } 
    } 
} 

** Вы можете захотеть отменить массив заказ написанный ..

+0

Было бы очень приятно, если бы downvoter прокомментировал их мнение. –

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; 
}