Lab 2 (Timer/Counter) ข้อ 1 (4 กันยายน 2550)
2 ตุลาคม 2550
จงอธิบายหน้าที่และความสำคัญของ Timer/Counter ในระบบMicroprocessor โดยละเอียด
Timer : คือวงจรที่นับสัญญาณนาฬิกาจากวงจร Oscillator ที่อยู่ภายใน
Counter : คือวงจรที่นับสัญญาณนาฬิกาจากภายนอก
การเลือกว่าจะใช้งานเป็น Timer หรือ Counter จะต้องพิจารณางานที่เราใช้ เช่น ถ้าเราต้องการใช้งานนาฬิกา หรือฐานเวลา เราต้องใช้งานเป็น Timer แต่ถ้าเราต้องการนับความถี่หรือสัญญาณนาฬิกา เราต้องใช้งานเป็น Counter
รีจิสเตอร์ที่เกี่ยวข้องกับ Timer/Counter
1) Timer Register : TH0 , TL0 , TH1 , TL1
ตำแหน่งหน่วยความจำภายในคือ 8CH , 8AH , 8DH , 8BH
ใน 8051 ปกติจะมีวงจร Timer/Counter อยู่ 2 ชุดโดยเป็นรีจิสเตอร์ขนาด 8 บิตสองตัวต่อเป็นขนาด 16 บิตทำให้ค่าที่นับได้สูงสุดคือ 16 บิต ซึ่งค่าที่เก็บจะอยู่ในรีจิสเตอร์ TH0 , TL0 สำหรับ Timer0 High Byte , Low Byte ตามลำดับ และรีจิสเตอร์ TH1 , TL1 สำหรับ Timer1 High Byte , Low Byte ตามลำดับ
การใช้งานเราสามารถใช้งานทั้งเป็นขนาด 16บิต หรือใช้งานที่ละ 8 บิตได้
2) TMOD : Timer/Counter Mode Register
ตำแหน่งหน่วยความจำภายในคือ 89H
เป็นรีจิสเตอร์ขนาด 8 บิตที่ควบคุม mode ในการทำงานของ Timer โดยมีรายละเอียดคือ

Gate : เป็นบิตที่ควบคุมให้ Timer ทำงานโดยถ้าบิตของ Timer x นี้ถูกกำหนด
ให้เป็น 1 จะทำให้ Timer x ทำงานเมื่อขา INT x มีลอจิกเป็นหนึ่ง
และบิต TR x มีลอจิกเป็น 1 ด้วย
C/T : จะเป็นการกำหนดว่าจะให้วงจร Timer ทำงานเป็น Timer หรือ
Counter โดยถ้าถูกกำหนดเป็น 1 จะทำงานเป็น Counter ถ้าถูกกำหนด
เป็น 0 จะทำงานเป็น Timer
M1,M0 : จะเป็นบิตที่ใช้ในการกำหนด Mode ของ Timer/Counter โดยจะมี
Mode ให้เลือกใช้งานได้ทั้งหมด 4 mode ตามตารางต่อไปนี้
M1 M0 การทำงาน
0 0 Mode 0 :จะเป็น Timer/Counter ขนาด 13 บิต โดยใช้ 8
บิตบนมาจาก THx และ 5 บิตล่างมาจาก 5 บิตล่างของ
TLx
0 1 Mode 1 :Timer/Counter ขนาด 16 บิต โดยใช้ 8 บิตบนมา
จาก THx และ 8 บิตล่างมาจาก 8 บิตของ TLx
1 0 Mode 2 :Timer/Counter ขนาด 8 บิต โดยจะใช้ TLx ใน
การนับจนกระทั่งเกิดการ Over Flow ก็จะไปเอาค่า
(Reloaded)จาก THxไปยัง TLxแล้วเริ่มต้นนับต่อไป
1 1 Mode 3 :การทำงานของ Timer0 และ Timer1 จะแยกกัน
ใน Mode3 นี้ Timer1 จะไม่ทำงาน ส่วน Timer0
จะงานโดยแบ่งออกเป็น 2 ส่วนเหมือนกับว่ามี
Timer/Counter อยู่ 2 ตัวคือ TL0 กับ TH0 โดย
- TL0 จะนับสัญญาณนาฬิกาจากภายนอก
(Counter) หรือสัญญาณนาฬิกาจากภาย
ใน(Timer) ก็ได้
- TH0 จะนับสัญญาณนาฬิกาจากภายใน(Timer)
เท่านั้น
3) TCON :Timer Control Register
ตำแหน่งหน่วยความจำภายในคือ 88H
จะทำหน้าที่ควบคุมการทำงานและคือค่าสภาวะการทำงานต่าง ๆ ของ Timer/Counter

IT0 :Interrupt0 เป็นบิตที่ใช้สำหรับกำหนดวิธีการขัดจังหวะโปรแกรมของ
สัญญาณจาก External Interrupt0(INT0)โดยถ้าเป็น 1จะเกิดการ
ขัดจังหวะเมื่อสัญญาณที่ขา INT0 เปลี่ยนจาก 1 เป็น 0 ถ้าเป็น 0 จะเกิดการ
ขัดจังหวะเมื่อสัญญาณที่ขา INT0 เปลี่ยน เป็น 0
IE0 :บิตนี้จะเป็น 1 เมื่อสัญญาณที่ขา INT0 เป็นไปตามที่กำหนดใน IT0 แล้วทำ
ให้เกิดการขัดจังหวะแล้วโปรแกรมตอบสนองการขัดจังหวะเริ่มทำงาน จะทำให้บิต
นี้เป็น 0
IT1 :Interrupt1 เป็นบิตที่ใช้สำหรับกำหนดวิธีการขัดจังหวะโปรแกรมของ
สัญญาณจาก External Interrupt0(INT1)โดยถ้าเป็น 1 จะเกิดการ
ขัดจังหวะเมื่อสัญญาณที่ขา INT1 เปลี่ยนจาก 1 เป็น 0 ถ้าเป็น 0 จะเกิดการ
ขัดจังหวะเมื่อสัญญาณที่ขา INT1 เปลี่ยน เป็น 0
IE1 :บิตนี้จะเป็น 1 เมื่อสัญญาณที่ขา INT1 เป็นไปตามที่กำหนดใน IT1แล้วทำให้
เกิดการขัดจังหวะแล้วโปรแกรมตอบสนองการขัดจังหวะเริ่มทำงาน จะทำให้บิต
นี้เป็น 0
TR0 :Timer0 Run Control เป็นบิตสำหรับสั่งให้ Timer เริ่มทำงานโดย
เมื่อบิตนี้เป็น0 Timerไม่ทำการนับไม่ว่าจะอยู่ในสถานะใดๆ แต่เมื่อเป็น 1 การ
ทำงานของTimer จะขึ้นอยู่กับขา INT0 และบิต GATE
TF0 :Timer0 Overflow เป็นบิตสำหรับแสดงว่าการนับ Timer นับได้ถึงค่าสูง
สุดที่สามารถนับได้เช่นใน Mode2 ที่มีการนับขนาด 16 บิตจะนับได้สูงสุด ถึง
FFFFH เมื่อทำการนับครั้งจะเกิดการ Overflow คือบิต TF0 จะเป็น 1
และการนับจะกลับไปเริ่มต้นที่ 0 เมื่อโปรแกรมกระโดดไปไปทำงานที่โปรแกรม
ตอบสนอง Interrupt จะทำให้บิตนี้เป็น 0
TR1 :Timer1 Run Control จะเหมือนกับ TR0แต่บิตนี้จะใช้งานสำหรับ
Timer1
TF1 :Timer1 Overflowจะเหมือนกับ TR0 แต่บิตนี้จะใช้งานสำหรับ Timer1
Counter : คือวงจรที่นับสัญญาณนาฬิกาจากภายนอก
การเลือกว่าจะใช้งานเป็น Timer หรือ Counter จะต้องพิจารณางานที่เราใช้ เช่น ถ้าเราต้องการใช้งานนาฬิกา หรือฐานเวลา เราต้องใช้งานเป็น Timer แต่ถ้าเราต้องการนับความถี่หรือสัญญาณนาฬิกา เราต้องใช้งานเป็น Counter
รีจิสเตอร์ที่เกี่ยวข้องกับ Timer/Counter
1) Timer Register : TH0 , TL0 , TH1 , TL1
ตำแหน่งหน่วยความจำภายในคือ 8CH , 8AH , 8DH , 8BH
ใน 8051 ปกติจะมีวงจร Timer/Counter อยู่ 2 ชุดโดยเป็นรีจิสเตอร์ขนาด 8 บิตสองตัวต่อเป็นขนาด 16 บิตทำให้ค่าที่นับได้สูงสุดคือ 16 บิต ซึ่งค่าที่เก็บจะอยู่ในรีจิสเตอร์ TH0 , TL0 สำหรับ Timer0 High Byte , Low Byte ตามลำดับ และรีจิสเตอร์ TH1 , TL1 สำหรับ Timer1 High Byte , Low Byte ตามลำดับ
การใช้งานเราสามารถใช้งานทั้งเป็นขนาด 16บิต หรือใช้งานที่ละ 8 บิตได้
2) TMOD : Timer/Counter Mode Register
ตำแหน่งหน่วยความจำภายในคือ 89H
เป็นรีจิสเตอร์ขนาด 8 บิตที่ควบคุม mode ในการทำงานของ Timer โดยมีรายละเอียดคือ

Gate : เป็นบิตที่ควบคุมให้ Timer ทำงานโดยถ้าบิตของ Timer x นี้ถูกกำหนด
ให้เป็น 1 จะทำให้ Timer x ทำงานเมื่อขา INT x มีลอจิกเป็นหนึ่ง
และบิต TR x มีลอจิกเป็น 1 ด้วย
C/T : จะเป็นการกำหนดว่าจะให้วงจร Timer ทำงานเป็น Timer หรือ
Counter โดยถ้าถูกกำหนดเป็น 1 จะทำงานเป็น Counter ถ้าถูกกำหนด
เป็น 0 จะทำงานเป็น Timer
M1,M0 : จะเป็นบิตที่ใช้ในการกำหนด Mode ของ Timer/Counter โดยจะมี
Mode ให้เลือกใช้งานได้ทั้งหมด 4 mode ตามตารางต่อไปนี้
M1 M0 การทำงาน
0 0 Mode 0 :จะเป็น Timer/Counter ขนาด 13 บิต โดยใช้ 8
บิตบนมาจาก THx และ 5 บิตล่างมาจาก 5 บิตล่างของ
TLx
0 1 Mode 1 :Timer/Counter ขนาด 16 บิต โดยใช้ 8 บิตบนมา
จาก THx และ 8 บิตล่างมาจาก 8 บิตของ TLx
1 0 Mode 2 :Timer/Counter ขนาด 8 บิต โดยจะใช้ TLx ใน
การนับจนกระทั่งเกิดการ Over Flow ก็จะไปเอาค่า
(Reloaded)จาก THxไปยัง TLxแล้วเริ่มต้นนับต่อไป
1 1 Mode 3 :การทำงานของ Timer0 และ Timer1 จะแยกกัน
ใน Mode3 นี้ Timer1 จะไม่ทำงาน ส่วน Timer0
จะงานโดยแบ่งออกเป็น 2 ส่วนเหมือนกับว่ามี
Timer/Counter อยู่ 2 ตัวคือ TL0 กับ TH0 โดย
- TL0 จะนับสัญญาณนาฬิกาจากภายนอก
(Counter) หรือสัญญาณนาฬิกาจากภาย
ใน(Timer) ก็ได้
- TH0 จะนับสัญญาณนาฬิกาจากภายใน(Timer)
เท่านั้น
3) TCON :Timer Control Register
ตำแหน่งหน่วยความจำภายในคือ 88H
จะทำหน้าที่ควบคุมการทำงานและคือค่าสภาวะการทำงานต่าง ๆ ของ Timer/Counter

IT0 :Interrupt0 เป็นบิตที่ใช้สำหรับกำหนดวิธีการขัดจังหวะโปรแกรมของ
สัญญาณจาก External Interrupt0(INT0)โดยถ้าเป็น 1จะเกิดการ
ขัดจังหวะเมื่อสัญญาณที่ขา INT0 เปลี่ยนจาก 1 เป็น 0 ถ้าเป็น 0 จะเกิดการ
ขัดจังหวะเมื่อสัญญาณที่ขา INT0 เปลี่ยน เป็น 0
IE0 :บิตนี้จะเป็น 1 เมื่อสัญญาณที่ขา INT0 เป็นไปตามที่กำหนดใน IT0 แล้วทำ
ให้เกิดการขัดจังหวะแล้วโปรแกรมตอบสนองการขัดจังหวะเริ่มทำงาน จะทำให้บิต
นี้เป็น 0
IT1 :Interrupt1 เป็นบิตที่ใช้สำหรับกำหนดวิธีการขัดจังหวะโปรแกรมของ
สัญญาณจาก External Interrupt0(INT1)โดยถ้าเป็น 1 จะเกิดการ
ขัดจังหวะเมื่อสัญญาณที่ขา INT1 เปลี่ยนจาก 1 เป็น 0 ถ้าเป็น 0 จะเกิดการ
ขัดจังหวะเมื่อสัญญาณที่ขา INT1 เปลี่ยน เป็น 0
IE1 :บิตนี้จะเป็น 1 เมื่อสัญญาณที่ขา INT1 เป็นไปตามที่กำหนดใน IT1แล้วทำให้
เกิดการขัดจังหวะแล้วโปรแกรมตอบสนองการขัดจังหวะเริ่มทำงาน จะทำให้บิต
นี้เป็น 0
TR0 :Timer0 Run Control เป็นบิตสำหรับสั่งให้ Timer เริ่มทำงานโดย
เมื่อบิตนี้เป็น0 Timerไม่ทำการนับไม่ว่าจะอยู่ในสถานะใดๆ แต่เมื่อเป็น 1 การ
ทำงานของTimer จะขึ้นอยู่กับขา INT0 และบิต GATE
TF0 :Timer0 Overflow เป็นบิตสำหรับแสดงว่าการนับ Timer นับได้ถึงค่าสูง
สุดที่สามารถนับได้เช่นใน Mode2 ที่มีการนับขนาด 16 บิตจะนับได้สูงสุด ถึง
FFFFH เมื่อทำการนับครั้งจะเกิดการ Overflow คือบิต TF0 จะเป็น 1
และการนับจะกลับไปเริ่มต้นที่ 0 เมื่อโปรแกรมกระโดดไปไปทำงานที่โปรแกรม
ตอบสนอง Interrupt จะทำให้บิตนี้เป็น 0
TR1 :Timer1 Run Control จะเหมือนกับ TR0แต่บิตนี้จะใช้งานสำหรับ
Timer1
TF1 :Timer1 Overflowจะเหมือนกับ TR0 แต่บิตนี้จะใช้งานสำหรับ Timer1
posted @ 21:35:07 น. | Not Allow Comments
