การหน่วงเวลาโดยอาศัยการทำงานของวงจรไทเมอร์เคาน์เตอร์
ไมโครคอนโทรลเลอร์มีวงจรไทเมอร์เคาน์เตอร์อยู่ภายในตัวซึ่งวงจรนี้ทำงานได้ 2 แบบขึ้นอยู่กับแหล่งสัญญาณนาฬิการที่ป้อนให้วงจร หากใช้สัญญาณนาฬิกาจากภายใน(คริสเตอร์ที่ใช้งาน) วงจรจะทำหน้าที่เป็นวงจรไทเมอร์ แต่หากใช้สัญญาณนาฬิกาจากภายนอกก็จะเป็นวงจรนับสัญญาณหรือที่เรียกว่าวงจรเคาน์เตอร์
วงจรไทเมอร์เคาน์เตอร์มีโหมดการทำงานอยู่ด้วยกัน 4 โหมดคือโหมด 0 ถึงโหมด 3 แต่ที่มักใช้กันบ่อยมี 2 โหมดคือ
โหมด 1 ใช้ในการหน่วงเวลา
โหมด 2ใช้ในการกำหนดค่าอัตราบอด (Baud Rate)
ในการกำหนดโหมดกำหนดที่รีจิสเตอร์ TMOD
เมื่อกำหนดโหมด 1 สำหรับวงจรไทเมอร์ 0 ใช้คำสั่ง
TMOD=0x01;
เมื่อกำหนดโหมด 1 สำหรับวงจรไทเมอร์ 1 ใช้คำสั่ง
TMOD=0x10;
เมื่อกำหนดโหมด 1 สำหรับวงจรไทเมอร์ 0 และ วงจรไทเมอร์ 1 ใช้คำสั่ง
TMOD=0x11;
วงจรในโหมด 1 (จากรูปยกตัวอย่างเพียงวงจรไทเมอร์ 1เท่านั้น)
บิตที่ใช้ควบคุมและตรวจสอบมี 2 บิตคือTR1 (วงจรไมเมอร์ 0 คือบิต TR0) ซึ่งเป็นบิตควบคุมการทำงาน(ตัดต่อสวิตช์ดังรูป) และบิตแสดงผลเมื่อทำงานครบคือ TF1ตัวอย่างโปรแกรมหน่วงเวลาดังนี้
void delay(void)
{
int i;
TMOD=0x10;
for(i=0;i<50;i++)
{
TH1=0xDC;
TL1=0x00;
TF1=0;
TR1=1;
while(TF1==0)
{}
TR1=0;
}
}
ซึ่งการกำหนดค่าในรีจิสเตอร์ TH,TL เป็นการกำหนดคาบเวลาในการทำงานในแต่ละครั้งของวงจรไทเมอร์
ค่า THTL คือค่าที่ต้องกำหนดลงในรีจิสเตอร์ สำหรับในการคำนวณจะคำนวณเป็นเลขฐานสิบก่อนเมื่อนำไปใช้งานถึงเปลี่ยนเป็นเลขฐาน 16 แล้วแยกใช้งานโดยสองหลักหลังจะกำหนดในรีจิสเตอร์ TLและสองหลักหน้าจะไว้ใน TH
ถ้าใช้คริสตอล 11.0592MHz และ 12MHz จะได้ดังนี้
ต่อครับ
ในการคำนวณจริงๆค่าที่ได้จะไม่ลงตัวทั้งนี้อันเนื่องมาจากค่าคริสตอล (ค่าในตารางเป็นค่าที่ปัดเศษแล้วครับ)
โปรดติดตามบทความอื่นๆในตอนต่อไป
ครูประภาส สุวรรณเพชร