ระบบฝังตัว - ตัวจับเวลา / ตัวนับ

timerเป็นนาฬิกาชนิดพิเศษที่ใช้วัดช่วงเวลา ตัวจับเวลาที่นับตั้งแต่ศูนย์ขึ้นไปสำหรับการวัดเวลาที่ผ่านไปมักเรียกว่า astopwatch. เป็นอุปกรณ์ที่นับถอยหลังจากช่วงเวลาที่กำหนดและใช้ในการสร้างการหน่วงเวลาเช่นนาฬิกาทรายคือตัวจับเวลา

counterเป็นอุปกรณ์ที่จัดเก็บ (และบางครั้งจะแสดง) จำนวนครั้งที่เกิดเหตุการณ์หรือกระบวนการใด ๆ ขึ้นตามสัญญาณนาฬิกา ใช้เพื่อนับเหตุการณ์ที่เกิดขึ้นภายนอกไมโครคอนโทรลเลอร์ ในอุปกรณ์อิเล็กทรอนิกส์เคาน์เตอร์สามารถใช้งานได้ค่อนข้างง่ายโดยใช้วงจรประเภทรีจิสเตอร์เช่นฟลิปฟล็อป

ความแตกต่างระหว่าง Timer และ Counter

จุดที่ทำให้ตัวจับเวลาแตกต่างจากตัวนับมีดังนี้ -

จับเวลา เคาน์เตอร์
การลงทะเบียนเพิ่มขึ้นสำหรับทุกรอบเครื่อง การลงทะเบียนจะเพิ่มขึ้นโดยพิจารณาจากการเปลี่ยน 1 ถึง 0 ที่สอดคล้องกับขาอินพุตภายนอก (T0, T1)
อัตราการนับสูงสุดคือ 1/12 ของความถี่ออสซิลเลเตอร์ อัตราการนับสูงสุดคือ 1/24 ของความถี่ออสซิลเลเตอร์
ตัวจับเวลาใช้ความถี่ของนาฬิกาภายในและสร้างความล่าช้า ตัวนับใช้สัญญาณภายนอกเพื่อนับพัลส์

ตัวจับเวลาของ 8051 และทะเบียนที่เกี่ยวข้อง

8051 มีตัวจับเวลา 2 แบบคือ Timer 0 และ Timer 1 สามารถใช้เป็นตัวจับเวลาหรือเป็นตัวนับเหตุการณ์ ทั้ง Timer 0 และ Timer 1 มีความกว้าง 16 บิต เนื่องจาก 8051 เป็นไปตามสถาปัตยกรรม 8 บิตแต่ละ 16 บิตจึงถูกเข้าถึงเป็นสองรีจิสเตอร์ที่แยกจากกันของไบต์ต่ำและไบต์สูง

จับเวลา 0 ลงทะเบียน

การลงทะเบียน 16 บิตของ Timer 0 ถูกเข้าถึงเป็นไบต์ต่ำและสูง รีจิสเตอร์ไบต์ต่ำเรียกว่า TL0 (Timer 0 low byte) และ high-byte register เรียกว่า TH0 (Timer 0 high byte) การลงทะเบียนเหล่านี้สามารถเข้าถึงได้เหมือนกับการลงทะเบียนอื่น ๆ ตัวอย่างเช่นคำแนะนำMOV TL0, #4H ย้ายค่าไปที่ไบต์ต่ำของ Timer # 0

ตัวจับเวลา 1 ลงทะเบียน

การลงทะเบียน 16 บิตของ Timer 1 ถูกเข้าถึงเป็นไบต์ต่ำและสูง รีจิสเตอร์ไบต์ต่ำเรียกว่า TL1 (Timer 1 low byte) และ high-byte register เรียกว่า TH1 (Timer 1 high byte) การลงทะเบียนเหล่านี้สามารถเข้าถึงได้เหมือนกับการลงทะเบียนอื่น ๆ ตัวอย่างเช่นคำแนะนำMOV TL1, #4H ย้ายค่าไปยังไบต์ต่ำของ Timer 1

TMOD (โหมดตั้งเวลา) ลงทะเบียน

ทั้ง Timer 0 และ Timer 1 ใช้รีจิสเตอร์เดียวกันเพื่อตั้งค่าโหมดการทำงานของตัวจับเวลาต่างๆ เป็นรีจิสเตอร์ 8 บิตซึ่ง 4 บิตล่างจะถูกตั้งไว้สำหรับตัวจับเวลา 0 และสี่บิตบนสำหรับตัวจับเวลา ในแต่ละกรณีจะใช้ 2 บิตล่างเพื่อตั้งค่าโหมดจับเวลาล่วงหน้าและ 2 บิตบนจะใช้เพื่อระบุตำแหน่ง

Gate - เมื่อตั้งค่าตัวจับเวลาจะทำงานในขณะที่ INT (0,1) สูงเท่านั้น

C/T - บิตเลือกตัวนับ / ตัวจับเวลา

M1 - บิตโหมด 1

M0 - โหมดบิต 0

ประตู

ตัวจับเวลาทุกครั้งมีวิธีการเริ่มต้นและการหยุด ตัวจับเวลาบางตัวทำสิ่งนี้โดยซอฟต์แวร์บางตัวใช้ฮาร์ดแวร์และบางตัวมีการควบคุมทั้งซอฟต์แวร์และฮาร์ดแวร์ ตัวจับเวลา 8051 มีการควบคุมทั้งซอฟต์แวร์และฮาร์ดแวร์ การเริ่มและหยุดของตัวจับเวลาจะถูกควบคุมโดยซอฟต์แวร์โดยใช้คำสั่งSETB TR1 และ CLR TR1 สำหรับตัวจับเวลา 1 และ SETB TR0 และ CLR TR0 สำหรับตัวจับเวลา 0.

คำสั่ง SETB ใช้เพื่อเริ่มต้นและหยุดโดยคำสั่ง CLR คำแนะนำเหล่านี้เริ่มต้นและหยุดตัวจับเวลาตราบเท่าที่ GATE = 0 ในทะเบียน TMOD ตัวจับเวลาสามารถเริ่มและหยุดโดยแหล่งภายนอกได้โดยการสร้าง GATE = 1 ในทะเบียน TMOD

C / T (นาฬิกา / จับเวลา)

บิตนี้ในทะเบียน TMOD ใช้เพื่อตัดสินใจว่าจะใช้ตัวจับเวลาเป็นไฟล์ delay generator หรือ event manager. ถ้า C / T = 0 จะใช้เป็นตัวจับเวลาสำหรับการสร้างการหน่วงเวลา แหล่งสัญญาณนาฬิกาที่ใช้สร้างการหน่วงเวลาคือความถี่คริสตัลของ 8051 ถ้า C / T = 0 ความถี่คริสตัลที่ติดกับ 8051 จะกำหนดความเร็วที่ตัวจับเวลา 8051 ทำเครื่องหมายในช่วงเวลาปกติ

ความถี่ของตัวจับเวลาจะอยู่ที่ 1/12 ของความถี่ของคริสตัลที่ติดกับ 8051 เสมอแม้ว่าระบบที่ใช้ 8051 ต่างๆจะมีความถี่ XTAL ตั้งแต่ 10 MHz ถึง 40 MHz แต่โดยปกติเราจะทำงานกับความถี่ XTAL ที่ 11.0592 MHz เป็นเพราะอัตราการรับส่งข้อมูลสำหรับการสื่อสารแบบอนุกรมของ 8051.XTAL = 11.0592 ช่วยให้ระบบ 8051 สามารถสื่อสารกับพีซีได้โดยไม่มีข้อผิดพลาด

M1 / M2

M1 M2 โหมด
0 0 โหมดจับเวลา 13 บิต
0 1 โหมดจับเวลา 16 บิต
1 0 โหมดรีโหลดอัตโนมัติ 8 บิต
1 1 โหมดหก

โหมดต่างๆของตัวจับเวลา

โหมด 0 (โหมดจับเวลา 13 บิต)

ทั้งตัวจับเวลา 1 และตัวจับเวลา 0 ในโหมด 0 ทำงานเป็นตัวนับ 8 บิต (โดยมีตัวตั้งค่าเริ่มต้นแบบหารด้วย 32) ไทม์เมอร์รีจิสเตอร์ได้รับการกำหนดค่าเป็นรีจิสเตอร์ 13 บิตซึ่งประกอบด้วย 8 บิตทั้งหมดของ TH1 และ 5 บิตล่างของ TL1 TL1 3 บิตบนนั้นไม่แน่นอนและควรละเว้น การตั้งค่าแฟล็กรัน (TR1) ไม่ล้างรีจิสเตอร์ ค่าสถานะขัดจังหวะตัวจับเวลา TF1 ถูกตั้งค่าเมื่อการนับหมุนจาก 1 ทั้งหมดไปเป็น 0 ทั้งหมด การทำงานของโหมด 0 จะเหมือนกันสำหรับ Timer 0 เช่นเดียวกับ Timer 1

โหมด 1 (โหมดตั้งเวลา 16 บิต)

โหมดจับเวลา "1" คือตัวจับเวลา 16 บิตและเป็นโหมดที่ใช้กันทั่วไป มันทำงานในลักษณะเดียวกับโหมด 13 บิตยกเว้นว่าจะใช้ทั้งหมด 16 บิต TLx จะเพิ่มขึ้นโดยเริ่มจาก 0 ถึงสูงสุด 255 เมื่อถึงค่า 255 TLx จะรีเซ็ตเป็น 0 จากนั้น THx จะเพิ่มขึ้นทีละ 1 เนื่องจากเป็นตัวจับเวลาแบบ 16 บิตเต็มตัวจับเวลาอาจมีค่าที่แตกต่างกันได้ถึง 65536 ค่า จะล้นกลับไปที่ 0 หลังจาก 65,536 รอบเครื่อง

โหมด 2 (โหลดอัตโนมัติ 8 บิต)

ตัวจับเวลาทั้งสองได้รับการกำหนดค่าเป็นตัวนับ 8 บิต (TL1 และ TL0) พร้อมการโหลดซ้ำอัตโนมัติ โอเวอร์โฟลว์จาก TL1 (TL0) จะตั้งค่า TF1 (TF0) และโหลด TL1 (TL0) ใหม่ด้วยเนื้อหาของ Th1 (TH0) ซึ่งกำหนดไว้ล่วงหน้าโดยซอฟต์แวร์ การโหลดซ้ำทำให้ TH1 (TH0) ไม่เปลี่ยนแปลง

ข้อดีของโหมดโหลดอัตโนมัติคือคุณสามารถตั้งเวลาให้มีค่าตั้งแต่ 200 ถึง 255 ได้เสมอหากคุณใช้โหมด 0 หรือ 1 คุณจะต้องตรวจสอบโค้ดเพื่อดูโอเวอร์โฟลว์และในกรณีนั้น รีเซ็ตตัวจับเวลาเป็น 200 ในกรณีนี้คำแนะนำที่มีค่าจะตรวจสอบค่าและ / หรือโหลดซ้ำ ในโหมด 2 ไมโครคอนโทรลเลอร์จะดูแลสิ่งนี้ เมื่อคุณกำหนดค่าตัวจับเวลาในโหมด 2 แล้วคุณไม่ต้องกังวลเกี่ยวกับการตรวจสอบว่าตัวจับเวลาล้นหรือไม่และคุณไม่ต้องกังวลกับการรีเซ็ตค่าเนื่องจากฮาร์ดแวร์ไมโครคอนโทรลเลอร์จะทำทั้งหมดให้คุณ โหมดโหลดซ้ำอัตโนมัติใช้สำหรับกำหนดอัตรารับส่งข้อมูลทั่วไป

โหมด 3 (โหมดจับเวลาแยก)

โหมดตั้งเวลา "3" เรียกว่า split-timer mode. เมื่อ Timer 0 ถูกวางไว้ในโหมด 3 มันจะกลายเป็นตัวจับเวลา 8 บิตสองตัวที่แยกจากกัน Timer 0 คือ TL0 และ Timer 1 คือ TH0 ทั้งไทม์เมอร์นับตั้งแต่ 0 ถึง 255 และในกรณีที่โอเวอร์โฟลว์ให้รีเซ็ตกลับเป็น 0 บิตทั้งหมดที่เป็นของไทเมอร์ 1 จะถูกผูกกับ TH0

เมื่อ Timer 0 อยู่ในโหมดแยกตัวจับเวลาจริง 1 (เช่น TH1 และ TL1) สามารถตั้งค่าได้ในโหมด 0, 1 หรือ 2 แต่ไม่สามารถเริ่ม / หยุดได้เนื่องจากบิตที่เชื่อมโยงกับ TH0 ในขณะนี้ ตัวจับเวลาจริง 1 จะเพิ่มขึ้นทุกรอบเครื่อง

การเริ่มต้นตัวจับเวลา

เลือกโหมดจับเวลา พิจารณาตัวจับเวลา 16 บิตที่ทำงานอย่างต่อเนื่องและไม่ขึ้นกับพินภายนอกใด ๆ

เริ่มต้น TMOD SFR ใช้ TMOD 4 บิตต่ำสุดและพิจารณา Timer 0 เก็บสองบิตคือ GATE 0 และ C / T 0 เป็น 0 เนื่องจากเราต้องการให้ตัวจับเวลาเป็นอิสระจากพินภายนอก เนื่องจากโหมด 16 บิตคือโหมดจับเวลา 1 ให้ล้าง T0M1 และตั้งค่า T0M0 อย่างมีประสิทธิภาพบิตเดียวที่จะเปิดคือบิต 0 ของ TMOD ตอนนี้ดำเนินการตามคำสั่งต่อไปนี้ -

MOV TMOD,#01h

ตอนนี้ Timer 0 อยู่ในโหมดจับเวลา 16 บิต แต่ตัวจับเวลาไม่ทำงาน ในการเริ่มจับเวลาในโหมดการทำงานให้ตั้งค่าบิต TR0 โดยดำเนินการตามคำสั่งต่อไปนี้ -

SETB TR0

ตอนนี้ตัวจับเวลา 0 จะเริ่มนับทันทีโดยจะเพิ่มขึ้นทุกครั้งในรอบเครื่อง

การอ่านตัวจับเวลา

ตัวจับเวลา 16 บิตสามารถอ่านได้สองวิธี อ่านค่าจริงของตัวจับเวลาเป็นตัวเลข 16 บิตหรือตรวจพบเมื่อตัวจับเวลาล้น

ตรวจจับ Timer Overflow

เมื่อตัวจับเวลาล้นจากค่าสูงสุดเป็น 0 ไมโครคอนโทรลเลอร์จะตั้งค่าบิต TFx ในทะเบียน TCON โดยอัตโนมัติ ดังนั้นแทนที่จะตรวจสอบค่าที่แน่นอนของตัวจับเวลาคุณสามารถตรวจสอบบิต TFx ได้ หากตั้งค่า TF0 แสดงว่าตัวจับเวลา 0 ล้น ถ้า TF1 ถูกตั้งค่าตัวจับเวลา 1 จะล้น