Tôi khởi tạo Timer 1 như thế này:
Code:
//Timer 1 initialisation
void Init_TMR1(void) {
T1CON = 0xB0; //Timer 1 is a 16-bit timer, 1:8 prescale
TMR1H = 0xFF; //Count number for 1 ms period @ 8 MHz clock
TMR1L = 0x06;
PIR1bits.TMR1IF = 0; //Clear TMR1 interrupt flag
IPR1bits.TMR1IP = 0;
PIE1bits.TMR1IE = 1; //Enable TMR1 interrupt
T1CONbits.TMR1ON = 1; //Turn Timer 1 on
}
Đoạn code xử lý ngắt như sau:
Code:
if (PIR1bits.TMR1IF == 1) {
PIE1bits.TMR1IE = 0;
TMR1H = 0xFF; //Count number for 1 ms period @ 8MHz clock
TMR1L = 0x06;
flag2 |= 1;
PIE1bits.TMR1IE = 1;
PIR1bits.TMR1IF = 0;
}
Tất cả code chỉ nằm trong 1 tập tin (có chứa main và các chương trình con, chương trình xử lý ngắt khác). Mọi sự diễn ra bình thường, cờ flag2 bị đổi trạng thái mỗi 1 ms, với tần số clock là 8 MHz (thử bằng phần cứng, đo thời gian bằng DSO).
Thân,