TIMER 1
Έχει ακριβώς την ίδια λειτουργία με τον προηγούμενο αλλά είναι 16bit και μπορούμε αν θέλουμε να έχουμε πρόσβαση σε όποιον καταχωρητή θέλουμε (TMR1L και TMR1H), επιπλέον ο prescaler που έχει μας δίνει τρεις τιμές διαίρεσης 1,2,4,8 και μπορεί να δεχθεί εξωτερικό κρύσταλλο στα πιν T1OSI και T1OSO (timer 1 oscillator input και timer 1 oscillator output) σαν RTC.
Και τέλος συνεργάζεται με την CCP module για την λειτουργία capture ή compare.
TIMER 2
Ο timer 2 χρησιμοποιείτε κυρίως από την CCP module για την δημιουργία του PWM.
Είναι 8bit και έχει επιπλέον (σε σχέση με τους προηγούμενους) και άλλον έναν 8bit καταχωρητή τον period register, αυτός και ο tmr register έχουν την δυνατότητα να γράφονται και να διαβάζονται.
Επιπλέον εκτός από τον prescaler (1:1, 1:4 και 1:16) έχει και postscaler που η δουλεία του είναι να διαιρεί την τιμή του comparator (tmr2/pr2 match) σε τιμές από 1 έως και 16 με αποτέλεσμα να καθυστερεί ελεγχόμενα την δημιουργία της υπερχείλισης .
Παράδειγμα:
#include <18F2550.h>
#FUSES NOWDT, INTRC_IO, NOPUT, NOMCLR
#use delay(clock=4M)
#int_TIMER2
void TIMER2_isr(void)
{
output_toggle(PIN_A0);
}
void main()
{
setup_wdt(WDT_OFF);
setup_timer_2(T2_DIV_BY_16,199,2);
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
while (1);
}
Το t2_div_by_16 μπορεί να γίνει και _4 ή χωρίς prescaler _1.
Το 199 είναι η οριζόμενη 8bit τιμή του period register (που όταν o tmr register γίνει ίση με αυτήν θα δώσει το TMR2/PR2 Match) που αυτό με την σειρά του θα οδηγηθεί στον postscaler και έτσι θα έχουμε interrupt ανά, 1μS(instruction clock) * 16(τιμή prescaler) * 200(τιμή του period register +1) * 2(τιμή postscaler).
(1*16*200)*2=6,4mS, το παραπάνω παράδειγμα λοιπόν θα μας δώσει στο πιν Α0 έναν παλμό 78hz (6,4mS hi και 6,4mS low).