记住满足条件时的迭代

时间:2016-05-18 17:30:32

标签: c avr avr-gcc

我正在使用Eclipse中的AtMega8。

在for循环中,我想检查PIND的引脚是否为1。如果是这样的话,我希望在某个迭代中使用1的char数组,其中包含该迭代的数量。

如果PIND的某个引脚在某次迭代中为1,则在任何其他迭代中都不会为1

例如:

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

2 个答案:

答案 0 :(得分: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
        }
    }
}

**你可能想要反转写入的数组顺序..

答案 1 :(得分: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;
}