我正在使用Eclipse中的AtMega8。
在for循环中,我想检查PIND
的引脚是否为1
。如果是这样的话,我希望在某个迭代中使用1
的char数组,其中包含该迭代的数量。
如果PIND
的某个引脚在某次迭代中为1
,则在任何其他迭代中都不会为1
。
例如:
1. PIND = 0b00110011
2. PIND = 0b10001000
3. PIND = 0b01000100
Result 23112311
答案 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;
}