|
|
|
|
การใช้งาน
Timer1 ด้วยภาษา C |
|
|
|
|
|
|
การใช้งานฟังก์ชัน |
|
|
setup_timer_1
(mode) |
|
|
|
|
|
mode
ประกอบด้วย 2 ส่วนคือ |
|
|
ส่วนควบคุม |
|
|
T1_DISABLED |
หยุดการทำงานของไทเมอร์1 |
|
T1_INTERNAL |
ใช้สัญญาณนาฬิกาภายในมีความถี่เท่ากับ
fosc/4 |
|
T1_EXTERNAL |
ใช้สัญญาณนาฬิกาภายนอกแบบไม่
synconize |
|
T1_EXTERNAL_SYNC
|
ใช้สัญญาณนาฬิกาภายนอกแบบ
synconize กับสัญญาณนาฬิกาภายใน |
|
T1_CLK_OUT |
Enable ให้ส่งเอาต์พุตออกทาง
RB6/T1CKI |
|
|
|
|
ส่วนกำหนดอัตราส่วนปรีสเกลเลอร์ |
|
|
T1_DIV_BY_1 |
|
|
T1_DIV_BY_2 |
|
|
T1_DIV_BY_4 |
|
|
T1_DIV_BY_8
|
|
|
|
|
|
|
|
|
|
|
โดยนำค่าทั้งสองมา
OR กัน ด้วยเครื่องหมาย | เช่น |
|
|
|
setup_timer_1(T1_INTERNAL
| T1_DIV_BY_8); |
.ใช้แหล่งสัญญาณนาฬิกาจากภายในและ
เลือกเลือกตัวหาร 1:8 |
|
|
|
|
|
|
Interruptจาก Timer1 |
|
|
เมื่อการนับเปลี่ยนจาก FFFFhไปเป็น 0000h (overflow ) หากต้องการให้เกิด
Interrupt จะต้อง Enable Interrupt ด้วยฟังก์ชั่น |
|
|
|
enable_interrupts(GLOBAL); |
Enable Interrupt ทั้งหมด |
|
enable_interrupts(INT_TIMER1); |
Enable Interrupt Timer1 |
|
|
|
|
|
|
|
|
|
- และกำหนด interrupt sevice ด้วยคำสัง #INT_TIMER1
ไว้หน้าฟังชั่น ที่ต้องการให้ทำงานเมื่อเกิด interrupt |
|
|
ในฟังก์ชั่น จะต้องกำหนดค่าเริ่มต้นในการนับใหม่ (Reload ) |
|
|
|
|
|
โดยปกติแล้ว CCS จะ Clear interrupt เมื่อเข้าสู่ interrupt sevice หากไม่ต้องการให้
complier สร้างคำสั่ง clear ให้ใช้คำสั่ง NOCLEAR
ไว้หลัง preprocessor นั้นเช่น |
|
|
|
|
|
#INT_TIMER1
NOCLEAR |
|
|
|
|
|
|
|
|
การเขียนและอ่านค่าจาก Timer1 |
|
|
|
set_timer1(0); |
กำหนดค่าให้ Timer1 |
|
get_timer1(); |
อ่านค่าจาก Timer1 |
|
|
|
|
|
|
|
|
|
ตัวอย่างการใช้งาน
Timer1เป็นนาฬิกาจับเวลา |
|
|
ตัวอย่างการใช้งาน
Capture
ร่วมกับ Timer1เป็นเครื่องนับความถี่ |
|
|
|
|