|
|
|
|
|
|
|
|
|
|
การใช้งานฟังก์ชัน |
|
|
setup_timer_0
(mode) |
|
|
mode
ประกอบด้วย 2 ส่วนคือ |
|
ส่วนควบคุม |
|
|
RTCC_INTERNAL
|
ใช้สัญญาณนาฬิกาภายในมีความถี่เท่ากับ fosc/4 |
|
RTCC_EXT_L_TO_H |
ใช้สัญญาณนาฬิกาภายนอกที่ขอบขาขึ้น |
|
RTCC_EXT_H_TO_L
|
ใช้สัญญาณนาฬิกาภายนอกที่ขอบขาลง |
|
|
|
|
ส่วนกำหนดอัตราส่วนปรีสเกลเลอร์ |
|
|
RTCC_DIV_1 |
|
|
RTCC_DIV_2 |
|
|
RTCC_DIV_4 |
|
|
RTCC_DIV_8 |
|
|
RTCC_DIV_16 |
|
|
RTCC_DIV_32 |
|
|
RTCC_DIV_64 |
|
|
RTCC_DIV_128 |
|
|
RTCC_DIV_256 |
|
|
|
|
|
|
|
|
โดยนำค่าทั้งสองมา
OR กัน ด้วยเครื่องหมาย | เช่น |
|
|
|
setup_timer_0(RTCC_INTERNAL
| RTCC_DIV_4); |
.ใช้แหล่งสัญญาณนาฬิกาจากภายในและ
เลือกเลือกตัวหาร 1:4 |
|
|
|
|
|
|
Interruptจาก Timer0 |
|
|
เมื่อการนับเปลี่ยนจาก FFhไปเป็น 00h (overflow ) หากต้องการให้เกิด Interrupt
จะต้อง Enable Interrupt ด้วยฟังก์ชั่น |
|
|
|
enable_interrupts(GLOBAL); |
Enable Interrupt ทั้งหมด |
|
enable_interrupts(INT_TIMER0); |
Enable Interrupt Timer0 |
|
|
|
|
|
|
|
|
|
- และกำหนด interrupt sevice ด้วยคำสัง preprocessor
#INT_TIMER0 (#INT_RTCC) ไว้หน้าฟังชั่น ที่ต้องการให้ทำงานเมื่อเกิด
interrupt |
|
|
ในฟังก์ชั่น จะต้องกำหนดค่าเริ่มต้นในการนับใหม่ (Reload ) |
|
|
|
|
|
โดยปกติแล้ว CCS จะ Clear interrupt เมื่อเข้าสู่ interrupt sevice หากไม่ต้องการให้
complier สร้างคำสั่ง clear ให้ใช้คำสั่ง NOCLEAR
ไว้หลัง preprocessor นั้นเช่น |
|
|
|
|
|
#INT_TIMER0
NOCLEAR |
|
|
|
|
|
การเขียนและอ่านค่าจาก Timer0 |
|
|
|
set_timer0(0); |
กำหนดค่าให้ Timer0 เมื่อใช้คำสั่งนี้ จะทำให้ Timer0
หยุดไป
2 cycle |
|
|
และไม่สามารถอ่านได้ในช่วงนี้ |
|
get_timer0(); |
อ่านค่าจาก Timer0 |
|
|
|
|
|
|
|
|
|
clear
the interrupt flag. To prevent the flag from being cleared add NOCLEAR after
the #INT_xxxx |
|
|
|
|
|
การใช้งานเป็น
Counter (ตัวนับ)
- สัญญาณนาฬิกาที่ได้ จะได้จากสัญญาณนาฬิกาภายนอกที่ขา RA4
โดยสามารถเลือกได้ว่าจะนับที่ขอบขาขึ้นหรือขาลง RTCC_EXT_L_TO_H ,RTCC_EXT_H_TO_L
|
|
|
|
|
|
ตัวอย่างการใช้งาน
Timer0 ในการหาคาบเวลา |
|
|
|
|