Como te ha indicado el amigo BrunoF, tienes que poner los corchetes '{ }' respectivos en cada condición o bucle siempre que la condición o el bucle en cuestón tenga más de una línea de código.
La solución que te ha dado el amigo BrunoF es totalmente válida, aunque si no quieres usar un bucle do-while, y quieres usar un bucle while sólamente, sería así:
#INT_EXT void IntRB0(){
while(true){
i++; //incremento contador
if(i==18)
output_high(PIN_a0);
else
output_low(PIN_a0);
if(i>18)
i=0;
if(input(PIN_b1)){
output_high(PIN_a0);
delay_ms(500);
output_low(PIN_a0);
delay_ms(500);
}
}
}
Aunque digo yo una cosa, ¿para que quieres hacer un bucle infinito en la primera llamada de la interrupción externa? cuando se produzca la ejecución de dicha función de interrupción, ya no saldrá más de esa porción de código
PD: A no ser que tengas otras funciones de interrupción....
Suerte!!!