isn't this:
while((micros() - delaycounter) < 100000) {
}
just a long-winded this:
delay(100);
they both block...
my point was that if a is incremented in your ISR, (and that WILL happen if your ISR is called during a blocking delay like the above two, you could miss an increment of the a when you get back to your array management...