การใช้งานโมดูลTimer0
 
     
  Timer0 (Timer/Counter/WatchDog timer)  
     
  หลักการใช้งาน Timer0 เป็นตัวตั้งเวลา (Timer)
 
  - สัญญาณนาฬิกาที่ได้ จะได้จากสัญญาณนาฬิกาจากภายใน โดยจะมีความถี่เท่ากับ F= fosc/4  
  - การเพิ่มขึ้นของ Timer0 จะเพิ่มขึ้นตามจังวังของสัญญาณนาฬิกาจากภายใน
หากมีการเขียนข้อมูล TMR0
ด้วยฟังก์ชั่น set_timer0(); จะทำให้ Timer0 หยุดไป 2 cycle และไม่สามารถอ่านได้ในช่วงนี้
เมื่อใช้ Timer0 ในการวัดคาบเวลา จะต้องบวกค่าเวลาไปอีก 2 cycle จึงจะได้เวลาที่ถูกต้อง
 
     
  เมื่อเราต้องการหน่วงเวลา 150 us ที่ความถี่ 4 MHz จะได้คาบเวลา fosc เท่ากับ 4/4x10^6 = 1 us  
  เมื่อ timer0 นับ 1 จะมีคาบเวลาเท่ากับ 1 us  
  หากต้องการให้หน่วง 150 us จึ่งต้องนับ 150 ครั้ง  
  ค่าเริ่มต้นที่ต้องโหลดให้ TMR0 = 256-150 =106  
  เมื่อให้ timer0 เริ่มนับก็จะนับต่อไปจาก 106 จนถึง 255 แล้วเปลี่ยนเป็น 0 ก็จะได้จำนวนนับเท่ากับ 150 ครั้งพอดี  
     
  วิธีการคำนวน  
 
เมื่อไม่ใช้ prescaler คาบเวลาที่ต้องการหาได้จากสมการ  
     
  Td = cycle * T สมการที่ 1
  Td = cycle *(4/fosc )  
  cycle = Td /(4/fosc )  
     
  Td เป็นคาบเวลาทั้งหมด ,cycle เป็นจำนวนรอบการนับ ,fosc เป็นความถี่ของ XTAL, Tเป็นคาบเวลาของสัญญาณนาฬิกาของระบบ
 
เมื่อใช้ prescaler  
  Td =(cycle*(4/fosc ))*PR จะได้คาบเวลาเพิ่มขึ้นเป็นจำนวนเท่าของ PR
หรือ cycle = (Td/Pr) /(4/fosc )  
  cycle = (Td/Pr) *(fosc/4 ) สมการที่ 2
   
  Pr เป็นค่าของ prescaler
     
 
     
  ดังนั้นสูตรการหาค่าเริ่มต้นในการนับของ TMR0 ในการใช้งานโหมด timer  
-ใช้สัญญาณนาฬิกา จากแหล่งกำเนิด สัญญาณภายใน  
 
  TMR0 = 256-cycle  
  TMR0 = 256-(Td/Pr) /(4/fosc )  
  TMR0 = 256-(Td/Pr) *(fosc/4 ) สมการที่ 3
     
  TMR0 เป็นค่าที่จะต้องโหลดเข้า timer0 ,Pr เป็นค่าของ prescaler
  Td เป็นคาบเวลาทั้งหมด ,fosc เป็นความถี่ของ XTAL
     
 
   
  สูตรการหาค่าเริ่มต้นในการนับของ TMR0 ในการใช้งานโหมด Counter  
  -ใช้สัญญาณนาฬิกา จากแหล่งกำเนิด สัญญาณภายนอก ผ่านขา RA4/TOCKI  
  - การอ่านค่าจากสัญญาณภายนอก จะต้องสอดคล้องกันกับสัญญาณภายใน ดังนั้นคาบเวลาของสัญญาณภายนอกที่เข้ามาทางขา RA4 นั้นควรมีค่าอย่างน้อยเป็น 2 เท่า ของค่าสัญญาณภายใน  
     
 
  TMR0 = 256-(Time/Pr) *fext สมการที่ 4
     
  TMR0 เป็นค่าที่จะต้องโหลดเข้า timer0 ,Time ค่าเวลาของการนับ มีหน่วยเป็น วินาที
  fext คือความถี่ของสัญญาณนาฬิกาจากภายนอก ที่เข้ามาทางขา RA4/TOCK1
     
 
     
  การคำนวนหาคาบเวลาสูงสุด tdmax  
  TMR0 =256-cycle = 0 คือ cycle มีค่าเท่ากับ 256  
  ค่าเริ่มต้นในการนับ TMR0 = 0 (timer จะนับ 0-255) และค่า prescaler มีค่าสูงสุด PR=256  
     
  จาก สมการที่ 2  
 
  cycle=(Td/Pr)*(fosc/4 )=256  
  Td = 256*(4/fosc)*PR  
  Tdmax = 256*(4/fosc)*256 PR=256
  Tdmax = 65536*(4/fosc)  
  Tdmax = 262144/fosc สมการที่ 4
     
 
     
  เช่น fosc = 4 MHz ค่าคาบเวลาสูงสุดที่ timer0 จะทำได้คือ  
  262144/4*10^6 = 0.065536 sec หรือ 65.536 ms  
     
     
  การใช้งาน WatchDog timer (WDT)  
  การใช้งาน Timer0 ด้วยภาษา C  
  ตัวอย่างการใช้งาน Timer0 ในการหาคาบเวลา