Interrupciones, instrucciones e ISRs

Vale ya casi lo tengo:

void (*isrAUsar)(); //Tiene que ser exactamente *isrAUsar?? o puede ser *isrTMR2
void setup() {
  //Aquí: Configuramos la atención a interrupciones global
void attachSomeInterrupt(void (*funcion)()) {
  isrAUsar = funcion;
  //Aquí: Modificamos los registros para activar y configurar la interrupción y el timer
}
ISR(0x0012_vect) { //podemos poner el nombre del vector o hay que poner el valor?
  isrAUsar(); //Definimos el vector de la interrupción
}
}
void loop() {
//Código del loop principal
}
void funcion() {
//Código de la interrupción 
}

Debería tener esta pinta ? Este código no me compila, podrías ponerme un ejemplo completo del timer0 por ejemplo? que haga algo sencillo, cada 50ms aumentar en uno una variable por ejemplo