Timer, USART, ADC, etc. Interrupts

Hello!
I have seen people used timer ISRs, USART0 ISRs, ADC ISRs. There are probably more types of ISRs. I only know how to use pin change interrupts. I found some code like this:

#define ledPin 13

void setup()
{
  pinMode(ledPin, OUTPUT);
  
  // initialize timer1 
  noInterrupts();           // disable all interrupts
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1  = 0;

  OCR1A = 31250;            // compare match register 16MHz/256/2Hz
  TCCR1B |= (1 << WGM12);   // CTC mode
  TCCR1B |= (1 << CS12);    // 256 prescaler 
  TIMSK1 |= (1 << OCIE1A);  // enable timer compare interrupt
  interrupts();             // enable all interrupts
}

ISR(TIMER1_COMPA_vect)          // timer compare interrupt service routine
{
  digitalWrite(ledPin, digitalRead(ledPin) ^ 1);   // toggle LED pin
}

void loop()
{
  // your program here...
}

All the manipulating of the constants are very confusing. How can I change that code to make the ISR trip at different intervals (100ms, 1000ms, 50ms, etc.)? What's the prescaler, and all that? Most of these ISRs use a syntax like this:

ISR(USART0_TX_vect){ /*Some code*/ }
ISR(ADC_vect){ /*Some code*/}

Can someone show me good guides to all kinds of interrupts, or teach me how to use these kinds of interrupts?
Thanks!

EDIT: Meant to add, see section 12 in the datasheet for the interrupt vectors.

For the moment I'm trying to work with USART0_RX_vect but I'm in trouble with compilation.
Have you take a look on AVR-GCC interrupt library ?
http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html

May be it can help you

TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;

OCR1A = 31250; // compare match register 16MHz/256/2Hz
TCCR1B |= (1 << WGM12); // CTC mode
TCCR1B |= (1 << CS12); // 256 prescaler
TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt

I'm just learning how to do all this myself. Those callouts are for the registers in
the ATmega328. It will help to download the datasheet for the chip, and cross-
reference the code with the actual register info, then it's very easy to figure out
how to modify the register values.

Code such as TCCR1B |= (1 << WGM12); is simply shifting a "1" into the proper
bitwise position, and then setting the bit in the register.

Another thing that will help is to get a copy of Dale Wheat's book "Arduino
Internals", as he spends a lot of time describing examples of how to do Timer
register settings and interrupts.