welcome to
http://www.geocities.com/aon_micro
|
การหน่วงเวลาโดยใช้ 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 ได้จากข้างล่างนี้ครับ
ใครที่อยาก Simulate ดูก็เลือก Peripherals - - -> Timer - - -> Timer0 ก็จะเห็นการเปลี่ยนแปลงของ TH0,TL0 .ให้ลองกด F11 แล้วค่อยๆ สังเกตการทำงานแล้วจะเข้าใจหลักการทำงานได้อย่างดี สำหรับวงจรนั้นยังใช้วงจรจากตอนที่แล้วอยู่ สามารถเบิร์นแล้วใช้กับวงจรเดิมได้เลย ไม่ต้องเสียเวลาต่อใหม่ ลองทำดูกันนะครับ แล้วเมลมาแสดงความคิดเห็นกันที่ [email protected] |
Copyright © 2003 Aon micro. All rights reserved
E-mail:[email protected]