best view IE mode 800x600 Text Size Medium

Home
แผนที่เว็บไซต์

 

 

 

บทความ

การใช้งาน 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 รีจีสเตอร์กำหนดการทำงานว่าเป็นตัวนับหรือจับเวลาและโหมดการทำงาน ไม่สามารถเข้าถึงในระดับบิตได้

ชื่อบิต ตำแหน่ง ความหมาย
GATE1

C/T1

M1

M0

TMOD.7

TMOD.6

TMOD.5

TMOD.4

บิตควบคุม GATE สำหรับ Timer 1 (บิตนี้เซตวงจรจำทำงานเมื่อ /INT1 เป็น High)

บิตกำหนดการทำงานว่าเป็น Timer หรือ Counter (1=Counter, 0=Timer)

บิตบนกำหนดโหมดการทำงานของ Timer 1

บิตล่างกำหนดโหมดการทำงานของ Timer 1

GATE0

C/T0

M1

M0

TMOD.3

TMOD.2

TMOD.1

TMOD.0

บิตควบคุม GATE สำหรับ Timer 0

บิตกำหนดการทำงานว่าเป็น Timer หรือ Counter

บิตบนกำหนดโหมดการทำงานของ Timer 0

บิตล่างกำหนดโหมดการทำงานของ Timer 0

    จากตารางด้านบน จะเห็นว่าบิตของ TMOD จะแบ่งออกเป็นสองส่วนอย่างชัดเจนคือ 4 บิตบนจะเป็นของ T1 และ 4 บิตล่างจะเป็นของ T0 เมื่อเราใช้งานเป็นตัวจับเวลา(Timer) รีจีสเตอร์จะทำการเพิ่มค่าขึ้นที่ละหนึ่งในทุก ๆ แมชชีนไซเคิลของการทำงานของ CPU นั้นคือการจับเวลาเป็นการนับหน่วยเวลาที่ถูกสร้างมาจากวงจรออสซิลเลเตอร์ของ CPU นั้นเอง โดยการคำนวณค่าระยะเวลาของ หนึ่งแมชชีนไซเคิลจะใช้เวลาเท่ากับ 12 คาบเวลาของสัญญาณนาฬิกา(คาบเวลาของ
ออสซิลเลเตอร์จำนวน
12 คาบ)

          ความเร็วในการทำงานภายในของไมโครคอนโทรลเลอร์  = ความถี่ของสัญญาณนาฬิกา/12
         
1 แมชชีนไซเคิล = 1/ความเร็วในการทำงานภายในของไมโครคอนโทรลเลอร์

ตัวอย่างเช่น ไมโครคอนโทรลเลอร์ ทำงานที่สัญญาณนาฬิกา 12 MHz (คริสตอล) หนึ่งแมชชีนไซเคิลจะเท่ากับดังนี้

          1 แมชชีนไซเคิล = 1/(12MHz/12)

                                   = 1/(1MHz)

                                   = 1 ไมโครวินาที

การกำหนดโหมดของ Timer
    ในการกำหนดโหมดการทำงานของ Timer เราจะกำหนดในบิต M0 และ M1 ซึ่งมีรายละเอียดการกำหนดดังนี้
 

M1 M0 โหมดการทำงาน ความหมาย
0


0


1




1
0


1


1




1
0


1


2




3
 
จับเวลา ในโหมด 0 โดยใช้ 13 บิต คือ TH0 หรือ TH1 เป็นตัวนับขนาด 8 บิต และใช้ TL0 และ TL1 ขนาด 5 บิต

จับเวลา ในโหมด
1 โดยใช้ 16 บิต โดยที่ TH0 หรือ TH1 จะเก็บค่าไบต์บน และ TL0 หรือ TL1 จะเก็บค่าไบต์ล่าง

จับเวลา ในโหมด
2 โดยใช้ 8 บิต คือ TL0 หรือ TL1  และจะใช้ TH0 หรือ TH1 เป็นตัวเก็บค่าเริ่มต้นของการนับ เมื่อเกิดโอเวอร์โฟลว์จาก FFH เป็น 00H ระบบจะนำค่าใน TH0 หรือ TH1 มาใส่ให้กับ TL0 หรือ TL1 โดยอัตโนมัติที่เรียกว่า Auto Reload

จับเวลา ในโหมด
3 นี้จะใช้งานได้เพียง Timer 0 เท่านั้น คือ TL0 และ TH0 เมื่อเกิดโอเวอร์โฟลว์บิต TF0 และ TF1 จะถูกเซ็ต ควบคุมโดย
รีจีสเตอร์
TCON

เนื่องจาก TMOD เป็นรีจีสเตอร์ที่ไม่สามารถอ้างถึงในระดับบิตได้จึงต้องอ้างถึงและใช้งานเป็นไบต์ และสามารถทำได้ดังนี้

สำหรับ Timer ในโหมด 0 ใช้ 13-bit timer

  TMOD &= 0xF0;

สำหรับ Timer ในโหมด 1 ใช้ 16-bit timer

TMOD = (TMOD&0xF1) | 0x01;

สำหรับ Timer ในโหมด 2 ใช้ 8-bit timer (auto reload)

TMOD = (TMOD&0xF2) | 0x02;
 TH0 = 0x20;                   // ใช้เพื่อ auto reload

ตัวอย่างการใช้งาน Timer0 ในโหมด 0


void SetupTimer0(void){

// initialize Timer 0 (configure TMOD low nibble)
TMOD &= 0xF0;              // Mode=0, 13-bit timer

ET0=1;                               // enable Timer 0 interrupt (IE bit)
TR0=1;                               // start Timer 0 (TCON bit)
TF0=0;                                // Timer 0 overflow flag (TCON bit)
EA=1;                                  // finally... master interrupt enable (IE bit)

}

    จากตัวอย่างฟังก์ชัน SetupTimer0 จะเห็นได้ว่า TMOD ไม่สามารถที่จะอ้างอิงในระดับบิตได้ และในตัวอย่างเป็นการกำหนดให้ทำงาน Timer ในโหมด 0 ซึ่งกำหนดค่าของ TMOD จะมีรายละเอียดดังนี้

TMOD &= 0xF0;             // โดยกำหนดค่าในส่วนของ 4 บิตล่าง

ค่าที่ถูกกำหนดในแต่ละบิตของ TMOD ใน 4 บิตล่างจะเป็นดังนี้

GATE0 = 0              ความหมาย   เนื่องจากกำหนด TR1 หรือ TR0 เท่ากับ 1(ในรีจิสเตอร์ TCON)
C/T0 = 0                  ความหมาย   กำหนดให้ทำงานเป็นตัวจับเวลา (C/T0 = 1 กำหนดเป็นตัวนับ)
M1 = 0 และ M0 = 0  ความหมาย   ให้ทำงานในโหมด 0

    จากข้อมูล TMOD &= 0xF0;  นั้นคือ เป็นการทำงานในโหมด 0 และกำหนด C/T0 และ GATE0 เท่ากับ 0 เป็นการใช้สัญญาณนาฬิกาจากภายในหรือเป็นการใช้งาน Timer แต่ Timer จะยังไม่ทำงานจนกว่าจะมีการเซตบิตควบคุม TR0 ก่อน

โดยที่ฟังก์ชัน SetupTimer0 จะใช้งานอินเตอร์รัปต์ด้วย เนื่องจากมีการกำหนดค่าบิตที่เกี่ยวข้องกับการอินเตอร์รัปต์ของ Timer คือบิต ET0 และ EA ในรีจีสเตอร์ IE ที่สามารถอ้างอิงในระดับบิตได้ ส่วนที่ต้องไปเขียนเพิ่มก็จะเป็นเรื่องของการเรียกใช้งานฟังก์ชันอินเตอร์รัปต์ ซึ่งก็จะขึ้นอยู่กับ C51 คอมไพเลอร์ของแต่ละตัวที่ท่านใช้อยู่ ว่ามีการเรียกใช้งานฟังก์ชันอินเตอร์รัปต์อย่างไร

 

Home Page
>> หากมีข้อเสนอและแนะนำส่ง email มาได้ที่ support@appsofttech.com  ครับ

 

Home Page

best view IE mode 1024x768 Text Size Medium
ผู้จำหน่ายไมโครคอนโทรลเลอร์และอุปกรณ์อิเล็กทรอนิกส์ทุกประเภท
Copyright © 2005 Appsofttech Co., Ltd.


บริษัท แอพซอฟต์เทค จำกัด 19/6 หมู่ 6 หมู่บ้านเอกวัฒนา ซ.เพชรเกษม 53 ถนนเพชรเกษม แขวงบางแค เขตบางแค กรุงเทพฯ  10160 Tel: 0-2413-3985-6, Fax: 0-2413-3165(auto)
Hotline 081-4850870, 081-4316541

[ วิธีสั่งซื้อ | บริษัท | Term of use | Privacy Policy ]
 
Contact email: info@appsofttech.com  Designed by : : Appsofttech Co.,Ltd.