การใช้งานไทเมอร์ 1 ของ PIC16F877
     ไทเมอร์เป็นส่วนสำคัญสำหรับไมโครคอนโทรเลอร์ PIC เพื่อนำมาสร้างฐานเวลา โดยไท
เมอร์ 1 มีขนาด 16 บิต สามารถใช้กำเนิดสัญญาณอินเทอร์รัปต์เมื่อเกิดการนับค่าเกินหรือโอ
เวอร์โฟลว (overflow) นอกจากนี้ยังนำมาใช้งานเป็นตัวสร้างฐานเวลาให้กับโมดูลตรวจจับ สัญญาณ/เปรียบเทียบ/สร้างสัญญาณ PWM หรือ โมดูล CCP    
     การกำหนดให้ไทเมอร์ทำงานในโหมด ไทเมอร์หรือเคาน์เตอร์จะขึ้นอยู่กับการนับสัญญาณ
ถ้าเป็นการนับสัญญาณนาฬิกาจากภายในก็ทำงานเป็นตัวตั้งเวลาหรือไทเมอร์ แต่ถ้าเป็นการ
นับสัญญาณจากภายนอกก็จะเป็นตัวนับหรือเคาน์เตอร์
การใช้งานไทเมอร์ 1 ด้วยโปรแกรม CCS
ฟังก์ชั่น setup_timer_1() กับการใช้งานในโหมดไทเมอร์ 1
     รูปแบบการใช้งาน
          setup_timer_1(mode)
          โดยที่ mode คือ ค่าคงที่ที่กำหนดไว้ในเฮดเดอร์ มีรายละเอียดดังนี้

          Mode                                                      ความหมาย
          T1_DISABLED                                       หยุดการทำงานของไทเมอร์ 1
          T1_INTERNAL                                      ไทเมอร์ 1 ทำงาน,
                                                                          ใช้สัญญาณนาฬิกาภายในความถี่ 1/4 เท่าของความถี่หลัก
          T1_EXTERNAL                                      ไทเมอร์ 1 ทำงาน,
                                                                          ใช้สัญญาณนาฬิกาภายนอก,
                                                                          สัญญาณภายนอกไม่สัมพนธ์กับสัญญาณนาฬิกาภายใน
                                                                          หรือไม่เกิดการซิงโครไนซ์
          T1_EXTERNAL_SYNC                         ไทเมอร์ 1 ทำงาน,  
                                                                          ใช้สัญญาณนาฬิกาภายนอก,
                                                                          กำหนดให้สัญญาณกระตุ้นจากภายนอกสัมพันธ์กับนาฬิกา 
                                                                          ภายในหรือการซิงโครไนซ์
          T1_DIV_OUT                                         เอ็นเอเบิลการส่งสัญญาณออกไปทางเอาต์พุตของวงจร
                                                                          กำเนิดสัญญาณนาฬิกา
          T1_DIV_BY_1                                        อัตราส่วนการทำงานของปรีสเกลเลอร์ 1 : 1
          T1_DIV_BY_2                                        อัตราส่วนการทำงานของปรีสเกลเลอร์ 1 : 2
          T1_DIV_BY_4                                        อัตราส่วนการทำงานของปรีสเกลเลอร์ 1 : 4
          T1_DIV_BY_8                                        อัตราส่วนการทำงานของปรีสเกลเลอร์ 1 : 8
ฟังก์ชั่น set_timer1() สำหรับเซตไทเมอร์ 1
     รูปแบบการใช้งาน
          set_timer1(value)
          โดยที่ value คือ กำหนดค่าเริ่มต้นในการนับให้กับไทเมอร์ 1 มีค่าตั้งแต่ 0 - 65535
ฟังก์ชั่น get_timer1() สำหรับอ่านค่าไทเมอร์ 1
     รูปแบบการใช้งาน
          value = get_timer1() 
          โดยที่ value คือ ตัวแปรสำหรับเก็บค่าที่อ่านจากไทเมอร์ 1
กลับสู่หน้าหลัก
ตัวอย่างการใช้งาน
     เป็นโปรแกรมไฟกระพริบติดดับทุกๆ 1 วินาที ใช้ไทเมอร์ 1 เป็นตัวสร้างฐานเวลา โดยกำหนดให้ไทเมอร์เกิดอินเทอร์รัปต์ ์ทุกๆ 52.43 มิลลิวินาที ที่ความถี่ 20 Mhz และปรีสเกลเลอร์ 1 : 4 และกำหนดตัวแปรขึ้นมาหนึ่งตัวสำหรับนับจำนวนครั้งของ การเกิดอินเทอร์รัปต์ไทเมอร์ 1

#include <16F877.h>
#fuses HS
#fuses NOLVP
#fuses NOWDT
#fuses NOPROTECT
#use delay(clock = 20000000)

int overflow=0;

#INT_TIMER1
void Isr_TMR1(void)
{
     if(++overflow == 18)
     {
     overflow = 0;
     output_toggle(PIN_B0); // Toggle PORTB.0
     }
}

void main (void)
{
     enable_interrupts(INT_TIMER1);
     enable_interrupts(GLOBAL);

     setup_timer_1(T1_INTERNAL|T1_DIV_BY_4);
     set_timer1(0);

     while(true)
          {
          ;// Statement
          }
}

CODE
ผลการทำงาน
     LED จะสลับติดดับทุกๆ 1 วินาที (เมื่อตัวแปร overflow เท่ากับ 18 จะใช้เวลาประมาณ 1 วินาที)

การคำนวณเวลา
     TMR0 = 65536 - (Tdelay / PR) x (Fosc / 4)

เมื่อ
     TMR      คือ ค่าที่กำหนดให้กับฟังก์ชั่น set_timer1()
     Tdelay    คือ ค่าหน่วงเวลาในหน่วยวินาที 
     PR         คือ ค่าของปรีสเกลเลอร์
     Fosc      คือ ความถี่ของสัญญานนาฬิกาหลักในหน่วยเฮิรตซ์

ดังนั้น
     0 = 65536 - (Tdelay / 4) x (20 Mhz / 4)
     Tdelay = 52.43 ms