การหน่วงเวลาโดยใช้ Timer

ในการเขียนโปรแกรมหน่วงเวลาให้กับไมโครคอนโทรลเลอร์นั้น ปกติเราจะใช้วิธีวนลูปไปเรื่อยๆ วิธีนี้ใช้ได้ง่ายแต่ค่าเวลาที่ถูกหน่วงนั้นเราจะคำนวณได้ยาก ในการหน่วงเวลาที่ต้องการความแม่นยำอาจใช้ Timer ช่วยในการหน่วงเวลาวิธีนี้มีการคำนวณเล็กน้อยซึ่งไม่ยากเกินความสามารถหรอก ตามปกติแล้ว Timer จะ overflow ที่ค่า FFFFH ซึ่งเท่ากับ 65535 ในเลขฐาน10 ดังนั้นเวลาที่ถูกหน่วงคือช่วงเวลาตั้งแต่ที่เริ่มทำการนับจบถึงเวลาที่ overflow โดยทั่วไปแล้ว MCS-51 ทำงานหนึ่งแมชชีนไซเคิลใช้เวลา 1/12 ของความถี่คริสตัล ถ้าคริสตัลมีความถี่ 12 MHz แล้ว MCS-51 จะใช้เวลา 1 แมชชีนไซเคิลเท่ากับ 1 uS ถ้าต้องการให้หน่วงเวลาไป 10 mS จะต้องคำนวณดังนี้

1. หาจำนวนแมชชีนไซเคิลที่ทำให้เกิดการ overflow

จำนวนแมชชีนไซเคิล = เวลาที่หน่วง / เวลา1แมชชีนไซเคิล

จำนวนสัญญาณนาฬิกา = 10mS/1uS = 10,000

2. กำหนดค่าเริ่มต้นให้กับรีจิสเตอร์ Timer

ค่าเริ่มต้น (TH0,TL0) = 65,535 - จำนวนแมชชีนไซเคิล

= 65,535 - 10,000 = 55,535 = 0xD8EF

TH0 = D8

TL0 = EF

Lab 3 การหน่วงเวลาโดยใช้ Timer

หลังจากได้เรียนรู้หลักการคำนวณไปแล้ว ลองมาเขียนโปรแกรมหน่วงเวลาให้กับไมโครคอนโทรลเลอร์ดูกัน ซึ่งเป็นวงจรไฟกระพริบ ทำการหน่วงเวลาเพื่อสลับกันกระพริบโดยจะส่งค่า 0xF0 และ 0x0F สลับกันไปกับการหน่วงเวลา ผลลัพท์ที่ได้จะเป็นดังรูป

สำหรับ source code copy ได้จากข้างล่างนี้ครับ

/*************Lab 3 Timer*************/
/* Source code by Aon micro */
/* http://www.geocities.com/aon_micro */


#include<reg51.h>
/*******Timer Function*******/
void delay(unsigned char time)
{
unsigned char i;
for (i=0;i<time;i++)
{ TH0 = 0x05;
TL0 = 0x00;
TF0 = 0;
TR0 = 1;
while(TF0 == 0); /*If overflow TR=0 */
TR0 = 0;
}
}
/*******Main*********/
void main(void)
{
while(1) /* Loop forever */
{
P0 = 0xf0; /* P0 = 11110000 */
delay(100); /* Call delay */
P0 = 0x0f; /* P0 = 00001111 */
delay(100); /* Call delay */
}
}
/***********************END***************************/

ใครที่อยาก Simulate ดูก็เลือก Peripherals - - -> Timer - - -> Timer0 ก็จะเห็นการเปลี่ยนแปลงของ TH0,TL0 .ให้ลองกด F11 แล้วค่อยๆ สังเกตการทำงานแล้วจะเข้าใจหลักการทำงานได้อย่างดี สำหรับวงจรนั้นยังใช้วงจรจากตอนที่แล้วอยู่ สามารถเบิร์นแล้วใช้กับวงจรเดิมได้เลย ไม่ต้องเสียเวลาต่อใหม่ ลองทำดูกันนะครับ แล้วเมลมาแสดงความคิดเห็นกันที่ [email protected]

 

 


Copyright © 2003 Aon micro. All rights reserved

E-mail:[email protected]

 

 

 

Hosted by www.Geocities.ws

1