Microcontroller      Mr.Adisak Chinawong

 Adisak chinawong   
         ปรับปรุงข้อมูลเมื่อวันที่  8 กันยายน 2546              

     Back to menu    

     ตัวนับและตัวกำหนดเวลา Counter/Timer
          
การทำงานของ Timer/Counter ในโหมด 1


รูปที่ 1 แสดงการทำงานของ Timer/Counter ในโหมด1 (16 บิต)


      การทำงานของโหมด1 จะมีลักษณะการทำงานคล้ายกับโหมด 0 เพียงแต่ค่าของการนับในโหมด 1 จะมีได้ถึง 16 บิต โดยการนำเอาข้อมูลในรีจิสเตอร์ TL0 กับ TH0 หรือรีจิสเตอร์ TL1 กับ TH1 ที่มีขนาดตัวละ 8 บิตมารวมกัน เพื่อให้ได้ รีจิสเตอร์ขนาด 16 บิต ซึ่งค่าของการนับจะอยู่ในช่วง 0000H-FFFFH หรือ 0 - 65,536 ตำแหน่ง วิธีการใช้งานจะให้นับไป จนครบรอบโดยให้ค่าของการนับเปลี่ยนจาก FFFFH เป็น 0000H หรือให้นับเกินค่า 65,536 ก็จะทำให้บิต TFx ซึ่งจะแสดงสถานะค่านับเกิน ( Over flow flag ) ในรีจิสเตอร์ TCON ทำการเซตบิตเป็นลอจิก "1" ไมโครคอนโทรลเลอร์ก็จะรู้ว่ามีการนับครบกำหนดแล้ว แสดงการทำงานของ Timer/Counter ในโหมด1 (16 บิต) ได้ดังรูปที่ 1

การทำงานของTimer/Counter ในโหมด 2
      ในการทำงานของโหมด 2 จะเป็นแบบโหลดค่าข้อมูลใหม่ในการเริ่มนับ หรือตั้งเวลาอัตโนมัติ (Auto reloads mode) แสดงการทำงานของ Timer/counter ในโหมด 2 ได้ ในรูปที่ 2 การใช้งานในโหมดนี้จะแยกรีจิสเตอร์ไทม์เมอร์ออกเป็น 2 ตัว ซึ่งมีขนาดตัวละ 8 บิต การเก็บค่าเริ่มต้นการนับจะกำหนดให้อยู่ในข้อมูลของรีจิสเตอร์ THx ค่าของการนับสูงสุดคือ 256 ครั้ง (THx = 00) ในขณะที่ Timer ทำงานรีจิสเตอร์ TLx ก็จะทำหน้าที่เป็นตัวนับค่าข้อมูลซึ่งมีขนาด 8 บิต โดยนำค่าเริ่มต้นที่จะนับมาจากค่าข้อมูลในรีจิสเตอร์ THx ดังนั้นค่าข้อมูลที่อยู่ในรีจิสเตอร์ TLx จะถูกเพิ่มขึ้นทุกแมชชีนไซเคิลจนมีค่าข้อมูลถึง FF เมื่อนับต่ออีก 1 แมชชีนไซเคิล ก็จะวนกลับไป 00 อีกครั้ง ซึ่งคือค่านับเกิน (Over flow) นั้นเองทำให้แฟลก TF0 (หรือTF1 ) ถูกเซตเป็นลอจิก 1 และหลังจากนั้นค่าข้อมูลเดิมที่อยู่ในรีจิสเตอร์ THx ก็จะถูกนำไปกำหนดให้กับข้อมูลในรีจิสเตอร์ TLx ใหม่อีกครั้ง เพื่อเป็นค่าเริ่มต้นของการนับในรอบต่อไปอีก การทำงานจะเป็นเช่นนี้ตลอดไป (ที่เราเรียกว่า Auto reload ) ส่วนของแฟลก TFx จะถูกเคลียร์โดยอัตโนมัติเมื่อไมโครคอนโทรลเลอร์กระโดดไปทำโปรแกรมตอบสนองอินเตอร์รัพต์ของ Timer ในแต่ละรอบ

 


รูปที่ 2 แสดงการทำงานของ Timer/counter ในโหมด 2 (8 bit Auto reload)

การทำงานของTimer/Counter ในโหมด 3

รูปที่ 3 แสดงการทำงานของ Timer0 ในโหมด 3 (8 bit Auto reload)


      ลักษณะการทำงานของโหมด 3 นั้น จะแบ่งการใช้งานของ Timer0 และ Timer1 ออกจากกัน โดยการใช้งาน Timer 0 เราก็จะแยกรีจิสเตอร์ TH0 และ TL0 ทำให้เกิดเป็นตัวนับ 2 ตัวทำงานอิสระต่อกัน และให้ใช้งานได้เพียงแค่ 8 บิตเท่านั้น ที่รีจิสเตอร์ TL0 จะสามารถเลือกการทำงานทั้งโหมดตั้งเวลา (Timer) และโหมดตัวนับ (Counter) ได้ตามปกติ พิจารณา ดังรูปที่ 3ก. ตัวนับที่รีจิสเตอร์ TL0 จะใช้บิตควบคุมการทำงานของTimer 0 โดยการกำหนดที่บิต C/T, Gate, TR0, INT0 และแฟลก TF0 เป็นตัวควบคุมการทำงานขณะเกิดค่านับเกิน (Over flow)
ส่วนการทำงานของ Timer1 จะไม่มีการทำงานในโหมด 3 แต่เราจะใช้งานในส่วนของบิต TF1 และบิต TR1 เป็น ตัวควบคุมการทำงานร่วมกับรีจิสเตอร์ TH0 (Timer0) แทน สังเกตจากรูปที่ 3 ข. ในการใช้งานเราจะกำหนดให้เป็นส่วนของตัวตั้งเวลาเท่านั้น (นับค่าของแมชชีนไซเคิลจากความถี่ภายในไอซี) โดยกำหนดให้บิต TR1 มีค่าเป็นสถานะลอจิก "1" ตัวนับ TH0 ก็จะเริ่มทำการนับ และเมื่อค่าข้อมูลของ TH0 เกิดค่านับเกิน (ค่าใน TH0 กลับไปเป็นค่า 00H อีก) จะทำให้ บิต TF1 เกิดการเซตค่าเป็นสถานะลอจิก "1" ซึ่งเป็นการร้องขอการอินเตอร์รัพท์ต่อไมโครคอนโทรลเลอร์
ดังนั้นการใช้งาน Counter/Timer ในโหมดที่ 3 จึงเหมือนกับว่าไอซีไมโครคอนโทรลเลอร์ 8051(AT89C2051) มี Counter/Timer อยู่ถึง 3 ชุด และถ้าหากเป็นไอซีไมโครคอนโทรลเลอร์ 8052 ก็เหมือนกับว่ามีถึง 4 ชุด

การกำหนดโหมดทำงานของไทม์เมอร์ 0 และ ไทม์เมอร์1


      การกำหนดการใช้งานไทม์เมอร์ 0 และ ไทม์เมอร์1 สามารถกระทำได้โดยโหลดค่าที่ต้องการไว้ในรีจิสเตอร์ที่ ใช้งานเฉพาะ TMOD ดังแสดงเป็นตารางในรูปที่ 4 ในแต่ละตารางจะให้ไทม์เมอร์ 0 หรือ ไทม์เมอร์ 1 ถูกใช้งานเพียงตัวเดียว เท่านั้น หากเราต้องการใช้งาน ไทม์เมอร์0 และไทม์เมอร์1ทำงานเป็นตัวตั้งเวลา(Timer) พร้อมกัน หรืออาจจะทำคนละหน้าที่เช่นให้ไทม์เมอร์ 0 เป็นตัวนับ(Counter) ส่วนไทม์เมอร์ 1 ให้เป็นตัวตั้งเวลา(Timer) เราก็จะนำค่าในตารางของ ไทม์เมอร์ 0 มาทำการ OR กับค่าในตารางของไทม์เมอร์ 1 แล้วจะนำมากำหนดค่าให้กับรีจิสเตอร์ TMOD ยกตัวอย่างเช่น ถ้าต้องการให้ ไทม์เมอร์ 0 เป็นตัวตั้งเวลา(Timer)ในโหมด 2 และควบคุมด้วยขา INT0 (External control) ซึ่งในตารางจะได้ค่าข้อมูลเป็น 0AH ส่วน ในไทม์เมอร์1 กำหนดให้เป็นตัวนับ (Counter) ในโหมด 2 และควบคุมด้วยซอฟต์แวร์ภายใน (Internal control) ซึ่งในตารางจะได้ค่าข้อมูลเป็น 60H เมื่อนำมารวมกันจะได้ค่าเท่ากับ 0A60H ซึ่งจะเป็นการกำหนดให้กับค่า ข้อมูลในรีจิสเตอร์ TMOD และในการที่เราจะใช้ตัวตั้งเวลาหรือตัวนับ โดยการควบคุมจากโปรแกรมแกรม เราจะต้องทำการเซตที่บิตTRx ในรีจิสเตอร์ใช้งานเฉพาะ TCON เพื่อให้ไทม์เมอร์เริ่มทำงานนั้นเอง


NOTE1: ควบคุมการทำงานจากภายใน (Internal control) ให้เริ่มต้นทำงานโดยการกำหนดสถานะของบิต TRx ให้เป็นลอจิก "1"
NOTE2: ควบคุมการทำงานจากภายนอก(External control) โดยการกระตุ้นที่ขา INTX และจะต้องกำหนดให้บิต TRxเป็นลอจิก "1" ด้วย
[TRx = TR0 หรือ TR1, INTX = INT0 หรือ INT]

รูปที่ 4 แสดงการกำหนดการทำงานของ Timer/Counter

Designed by Mr.Adisak chinawong

Main | Menu | Web board | Link | มโนสาเร