![]() |
|
|
|
การใช้งาน timer ใน MCS-51 ในการเรียนรู้การใช้งานไมโครคอนโทรลเลอร์ MCS-51 Timer/Counter จัดว่าเป็นเรื่องที่น่าปวดหัวสำหรับผู้เริ่มต้นเป็นจำนวนมาก ในบทความนี้จะแสดงถึงพื้นฐานการใช้งาน Timer/Counter โดยจะเริ่มที่การใช้งาน Timer ในไมโครคอนโทรลเลอร์ MCS-51 สิ่งที่ต้องรู้และทำความเข้าใจเกี่ยวกับ Timer โดยพื้นฐานของไมโครคอนโทรลเลอร์ MCS-51 จะมี Timer ให้เราใช้งานได้อย่างน้อย 2 ตัวคือ T0 (Timer 0) และ T1 (Timer 1) ซึ่งสามารถใช้งานได้อย่างอิสระ เมื่อใช้งานเป็น Timer ก็คือ การนับจำนวนพัลส์สัญญาณนาฬิกาภายใน สำTimer 0 และ Timer 1 สามารถแยกเป็นรีจีสเตอร์ขนาด 8 บิต คือ TH0 กับ TL0 สำหรับรีจีสเตอร์ T0 และ TH1 กับ TL1 สำหรับรีจีสเตอร์ T1 และรีจีสเตอร์ที่สำคัญในการควบคุมการทำงานของ Timer นี้ คือ TMOD (Timer mode control register) และ TCON (Timer/Counter control register) โดยที่รีจีสเตอร์ TCON สามารถอ้างถึงได้ในระดับบิต ทำความเข้าใจกับรีจีสเตอร์ TMOD และ TCON TMOD รีจีสเตอร์กำหนดการทำงานว่าเป็นตัวนับหรือจับเวลาและโหมดการทำงาน ไม่สามารถเข้าถึงในระดับบิตได้
จากตารางด้านบน จะเห็นว่าบิตของ TMOD
จะแบ่งออกเป็นสองส่วนอย่างชัดเจนคือ 4 บิตบนจะเป็นของ
T1 และ 4 บิตล่างจะเป็นของ
T0 เมื่อเราใช้งานเป็นตัวจับเวลา(Timer)
รีจีสเตอร์จะทำการเพิ่มค่าขึ้นที่ละหนึ่งในทุก ๆ แมชชีนไซเคิลของการทำงานของ
CPU
นั้นคือการจับเวลาเป็นการนับหน่วยเวลาที่ถูกสร้างมาจากวงจรออสซิลเลเตอร์ของ
CPU นั้นเอง โดยการคำนวณค่าระยะเวลาของ หนึ่งแมชชีนไซเคิลจะใช้เวลาเท่ากับ
12 คาบเวลาของสัญญาณนาฬิกา(คาบเวลาของ
ความเร็วในการทำงานภายในของไมโครคอนโทรลเลอร์ =
ความถี่ของสัญญาณนาฬิกา/12 ตัวอย่างเช่น ไมโครคอนโทรลเลอร์ ทำงานที่สัญญาณนาฬิกา 12 MHz (คริสตอล) หนึ่งแมชชีนไซเคิลจะเท่ากับดังนี้ 1 แมชชีนไซเคิล = 1/(12MHz/12) = 1/(1MHz) = 1 ไมโครวินาที
การกำหนดโหมดของ Timer
เนื่องจาก TMOD เป็นรีจีสเตอร์ที่ไม่สามารถอ้างถึงในระดับบิตได้จึงต้องอ้างถึงและใช้งานเป็นไบต์ และสามารถทำได้ดังนี้ สำหรับ Timer ในโหมด 0 ใช้ 13-bit timer
สำหรับ Timer ในโหมด 1 ใช้ 16-bit timer
สำหรับ Timer ในโหมด 2 ใช้ 8-bit timer (auto reload)
ตัวอย่างการใช้งาน Timer0 ในโหมด 0
จากตัวอย่างฟังก์ชัน SetupTimer0 จะเห็นได้ว่า TMOD ไม่สามารถที่จะอ้างอิงในระดับบิตได้ และในตัวอย่างเป็นการกำหนดให้ทำงาน Timer ในโหมด 0 ซึ่งกำหนดค่าของ TMOD จะมีรายละเอียดดังนี้
จากข้อมูล TMOD &= 0xF0; นั้นคือ เป็นการทำงานในโหมด 0 และกำหนด C/T0 และ GATE0 เท่ากับ 0 เป็นการใช้สัญญาณนาฬิกาจากภายในหรือเป็นการใช้งาน Timer แต่ Timer จะยังไม่ทำงานจนกว่าจะมีการเซตบิตควบคุม TR0 ก่อน โดยที่ฟังก์ชัน SetupTimer0 จะใช้งานอินเตอร์รัปต์ด้วย เนื่องจากมีการกำหนดค่าบิตที่เกี่ยวข้องกับการอินเตอร์รัปต์ของ Timer คือบิต ET0 และ EA ในรีจีสเตอร์ IE ที่สามารถอ้างอิงในระดับบิตได้ ส่วนที่ต้องไปเขียนเพิ่มก็จะเป็นเรื่องของการเรียกใช้งานฟังก์ชันอินเตอร์รัปต์ ซึ่งก็จะขึ้นอยู่กับ C51 คอมไพเลอร์ของแต่ละตัวที่ท่านใช้อยู่ ว่ามีการเรียกใช้งานฟังก์ชันอินเตอร์รัปต์อย่างไร
|
|
||||||