Tải bản đầy đủ (.pdf) (18 trang)

Chuong 5 PIC TIMER edit compatibility mode (1)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (463.51 KB, 18 trang )

CHƯƠNG 5

HOẠT ĐỘNG CỦA
BỘ ĐỊNH THỜI

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

1. Bộ định thời TIMER0
Bộ định thời có 2 chức năng chính:
định thời (Timer) và đếm xung (Counter).
-

TIMER0 là bộ định thời / bộ đếm 8 bit.

-

Gồm 1 bộ tiền định tỉ lệ (Prescaler) 8 bit.

-

Có bit chọn xung (Clock) nội hay xung bên ngoài.

-

Có bit lựa chọn cạnh tác động của xung Clock.

-

Có thanh ghi chứa số đếm TMR0.

1




CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

a. Bộ tiền định tỉ lệ (Prescaler)
- Là bộ đếm 8 bit đóng vai trò:
+ Bộ tiền chia tỉ lệ cho Timer0
+ Bộ hậu chia tỉ lệ cho bộ WDT
- Bit PSA lựa chọn Prescaler dùng cho Timer/WDT
- Giá trị tỉ lệ được xác định bởi 3 bit PS2 : PS0.

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

b. Hoạt động bộ định thời TIMER0
Có 2 chế độ hoạt động được chọn bởi bit T0CS
(OPTION<5>).
- Ở chế độ định thời: thanh ghi TMR0 sẽ tăng lên
sau mỗi chu kỳ máy Tcy (khi Prescaler không có
tác dụng hoặc có tỉ lệ là 1:1)
- Ở chế độ đếm xung: TMR0 sẽ tăng lên khi có
sườn cạnh lên hay sườn cạnh xuống (qui định bởi
bit T0SE) xuất hiện tại chân T0CLK.

2


CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

-


Khi Timer0 dùng xung Clock ngoài, ta phải đảm
bảo xung Clock ngoài đồng bộ với xung Clock nội.

-

Với giá trị tỉ lệ Prescaler là 1:1, chu kỳ xung Clock
ngoài sẽ bằng với xung Clock nội.

-

Do đó trong 1 chu kỳ T của xung Clock ngoài, thời
gian Ton hoặc Toff phải ít nhất là 2 Tosc.

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
DATA BUS
Fosc/4

8
synchronize

TMR0

scaled clock

T0CKI
pin

prescaler

Watchdog Timer


RBPU

WDT out

INTEDG TOCS TOSE

OPTION

PSA

PS2

PS1

PS0

Prescaler Assignment
1= prescaler assigned to WDT
0= prescaler assigned to Timer 0

TMR0 Clock
Source Select

Source Edge Select

1 = T0CKI, 0 = Fosc/4

1 = High-to-Low
0 = Low-to-High


PS2

PS1

PS0

TMR0
RATE

0

0

0

1:2

0

0

1

1:4

0

1


0

1:8

0

1

1

1:16

1

0

0

1:32

1

0

1

1:64

1


1

0

1:128

1

1

1

1:256

Hình 5.1: Cấu trúc Bộ định thời TIMER0

3


CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
DATA BUS
Fosc/4

8
synchronize

T0CKI
pin

scaled clock


TMR0
PS2

PS1

PS0

TMR0
RATE

0

0

0

1:2

0

0

1

1:4

0

1


0

1:8

0

1

1

1:16

1

0

0

1:32

1

0

1

1:64

1= prescaler assigned to WDT

1
0= prescaler assigned to Timer 0

1

0

1:128

1

1

1

1:256

prescaler

Watchdog Timer

WDT out

OPTION register
RBPU

INTEDG TOCS TOSE

PSA


PS2

PS1

PS0

Prescaler Rate Select Bits
Prescaler Assignment
TMR0 Clock
Source Select
1 = TOCK1, 0 = Fosc/4

Source Edge Select

1 = increment TMR0 on high-to-low transition
0 = increment TMR0 on low-to-high transition

Hình 5.2: Hoạt động định thời TIMER0

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
DATA BUS
Fosc/4

8
synchronize

T0CKI
pin

scaled clock


Watchdog Timer

TMR0

prescaler
INTCON register
TMR0IF

• Công thức tính thời gian định thời của TIMER0

4


CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

c. Ngắt TIMER0
-

Ngắt Timer0 xảy ra khi bộ đếm TMR0 tràn, nghĩa là
số đếm từ FF → 00.

-

Khi tràn thì cờ tràn T0IF = 1. Bit này được xóa bởi
phần mềm.

-

Ngắt Timer0 không làm PIC thoát khỏi chế độ ngủ

(SLEEP).

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

d. Khởi tạo TIMER0

COUNTER
TRISA4 = 1, RA4 = 1: T0CKI là Input

TIMER
TMR0 = XX

: nạp giá trị đầu

TMR0 = XX

T0CS = 0

: Clock nội

T0CS = 1
T0SE = 0

PSA = 0

: dùng Prescaler

PS<2:0>

: chọn tỉ lệ Prescaler


Sử dụng NGẮT
T0IE = 1
T0IF = 0
GIE = 1

: bật NGẮT Timer0
: xóa cờ NGẮT
: bật NGẮT toàn cục

PSA = 1
PS<2:0>

: nạp giá trị đầu
: Clock bên ngoài
: t.động ở cạnh lên

: không dùng Prescaler
: chọn tỉ lệ Prescaler

Sử dụng NGẮT
T0IE = 1
T0IF = 0
GIE = 1

: bật NGẮT Timer0
: xóa cờ NGẮT
: bật NGẮT toàn cục

5



CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

2. Bộ định thời TIMER1
-

TIMER1 là bộ định thời / bộ đếm 16 bit.

-

Gồm 2 thanh ghi 8 bit TMR1H và TMR1L.

-

Cờ TMR1IF =1 khi xảy ra tràn bộ đếm TMR1.

 Thanh ghi điều khiển T1CON

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

- Bit 5:4 - T1CKPS<1:0> chọn tỉ lệ xung vào
00 = 1:1

10 = 1:4

01 = 1:2

11 = 1:8


- Bit 3 - T1OSCEN: Chọn chế độ của bộ dao động
1 = Bật chế độ dao động LP(Low Power crystal)
0 = Tắt chế độ dao động LP

6


CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

- Bit 2 - T1SYNC\ : Bit cho phép đồng bộ nguồn
xung bên ngoài (TMR1CS=1).
1 = Không đồng bộ với xung ngoài
0 = Đồng bộ
- Bit 1 - TMR1CS : Bit lựa chọn nguồn xung.
1 = chọn xung ngoài qua chân T1CKI
0 = chọn xung bên trong ( Fosc /4 )

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

- Bit 0 - TMR1ON : Bit cho phép Timer1 Run/Stop
1 = Cho phép Timer1 hoạt động.
0 = Không cho phép.

7


CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
T1OSI

T1

OSC

T1OS0

synchronize

prescaler

Fosc/4

T1CKI
pin

TMR1L

TMR1H

Enable
Timer1 Gate Enable
Timer1 Gate Invert

1 = Không cho phép
0 = Cho phép đồng bộ

T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS

T1GINV

TMR1GE


T1CKPS1

T1CKPS0

scale

1

1

1:8

LP Oscillator Enable

1

0

1:4

0

1

1:2

1 = T1OSC selected
0 = T1CKI can be used

0


0

1:1

TMR1ON

T1CON

TMR1ON

Timer1 On
1 = Enable Timer1

Clock Source Select
1 = External (T1CKI)
0 = Internal (FOSC/4)

Hình 5.3: Cấu trúc Bộ định thời TIMER1

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

T1OSI

T1
OSC

T1OS0

prescaler


synchronize

Fosc/4
T1CKI
pin

TMR1H

TMR1L
Enable

Timer1 Control Register (T1CON)

TMR1ON

T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON

T1GINV

TMR1GE

T1CKPS1

T1CKPS0

scale

1


1

1:8

1

0

1:4

0

1

1:2

0

0

1:1

Timer1 On
LP Oscillator Enable
1 = T1OSC selected
0 = T1CKI can be used

1 = Enable Timer1

Clock Source Select

1 = External (T1CKI)
0 = Internal (FOSC/4)

Hình 5.4: Hoạt động định thời TIMER1

8


CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

T1OSI

T1
OSC

T1OS0

prescaler

synchronize

Fosc/4
T1CKI
pin

TMR1H

TMR1L
Enable
TMR1ON


Timer1 Control Register (T1CON)
T1GINV

TMR1GE

T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON

Timer1 Gate Enable and
Timer1 Gate Invert are
available on some devices

Timer1 External Clock Input Synchronization
1 = do not synchronize external clock input
0 = synchronize external clock input with
internal clock (Fosc/4)

Hình 5.4: Hoạt động định thời TIMER1

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

a. Các chế độ hoạt động của TIMER1
 Chế độ định thời đồng bộ (TMR1CS =0)
-

Xung clock cấp từ bộ dao động nội (Fosc/4).
(Bit T1SYNC\ không có tác dụng ở chế độ này)

-


Trong chế độ SLEEP, bộ đếm sẽ ngưng hoạt động.

-

Công thức tính thời gian định thời của Timer1:

9


CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

 Chế độ đếm - đồng bộ (TMR1CS =1,T1SYNC\=0)
-

Bộ đếm Timer1 tăng khi xuất hiện xung cạnh lên tại
+ chân T1OSI/RC1

khi

T1OSCEN =1

+ chân T1OSO/RC0

khi

T1OSCEN =0

-

Xung ngoài sẽ được đồng bộ với xung nội.


-

Việc đồng bộ được thực hiện ngay sau hoạt động
của bộ Prescaler.

-

Trong chế độ SLEEP, bộ đếm sẽ ngưng hoạt động.

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

 Chế độ đếm - không đồng bộ
-

Ở chế độ này, bit T1SYNC\ =1: xung ngoài sẽ
không được đồng bộ với nguồn xung bên trong.

-

Timer1 sẽ tiếp tục đếm trong chế độ SLEEP, và chỉ
thoát khỏi trạng thái SLEEP khi NGẮT xảy ra.

Chú ý:
+ Khi đọc (Read) thanh ghi TMR1 trong khi Timer
đang chạy, ta sẽ nhận được giá trị tức thời.
+ Khi ghi (Write) vào Timer ta nên dừng Timer lại.

10



CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

b. Bộ dao động riêng của TIMER1
-

Tạo ra bộ dao động Low power Crystal (LP) cho
Timer1 bằng cách sử dụng Thạch anh có tần tối đa
200KHz, tại 2 chân T1OSC0 và T1OSC1.

-

Khi đó, bộ đếm có thể hoạt động ở chế độ SLEEP.
OSC Type

Crystal

C1

C2

LP

32,768 KHz

33pF

33pF

100 KHz


15pF

15pF

200 KHz

15pF

15pF

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

c. Ngắt TIMER1
- Ngắt Timer1 xảy ra khi tràn bộ đếm TMR1, nghĩa
là từ FFFF → 0000.
- Khi Timer1 tràn TMR1IF = 1, cờ này được xóa
bằng phần mềm.
- Ngắt Timer1 ở chế độ định thời/đếm đồng bộ
không làm PIC thoát khỏi SLEEP, điều này chỉ xảy
ra ở chế độ đếm Không đồng bộ.

11


CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
COUNTER

d. Khởi tạo TIMER1
TIMER

TMR1ON = 0
: STOP Timer1
TMR1 = xx
: nạp giá trị đầu
TMR1CS = 0

: Clock nội

( T1SYNC\ = x : không quan tâm )

T1CKPS<1:0> : chọn tỉ lệ Prescaler

TMR1 = xx

: nạp giá trị đầu

TMR1CS = 1

: Clock ngoài

T1SYNC\ = 0/1

: cho phép đồng bộ ?

T1OSCEN=1: xung ở chân T1OSI/RC1
T1CKPS<1:0>

Nếu sử dụng NGẮT
TMR1IE = 1
TMR1IF = 0

PEIE = 1
GIE = 1
TMR1ON = 1

: bật NGẮT Timer1
: xóa cờ NGẮT
: bật NGẮT ngoại vi
: bật NGẮT toàn cục
: cho Timer 1 chạy

: chọn tỉ lệ Prescaler

Nếu sử dụng NGẮT
TMR1IE = 1
TMR1IF = 0
PEIE = 1
GIE = 1

: bật NGẮT Timer1
: xóa cờ NGẮT
: bật NGẮT ngoại vi
: bật NGẮT toàn cục

TMR1ON = 1

: cho Timer chạy

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

3. Bộ định thời TIMER2

-

TIMER2 là bộ định thời 8 bit, bao gồm:
+ Bộ tiền định tỉ lệ (PreScaler)
+ Bộ hậu định tỉ lệ (PostScaler)
+ Thanh ghi chu kỳ PR2.

-

Ngoài chức năng định thời, Timer2 còn có chức
năng tạo ra khoảng thời gian hoạt động (Ton) trong
chế độ điều biến xung PWM (Module CCP).

12


CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
TMR2
OUTPUT

Fosc/4

TMR2
Prescaler
1:1, 1:4, 1:16
Postscaler
1:1  1:16

COMPARATOR
PR2


TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1

T2CON

T2CKPS0

T2CKPS1

T2CKPS2

Scale

0

0

1:1

0

1

1:4

1

X

1:16


Timer2 ON
1 = Timer2 enabled

Hình 5.5: Cấu trúc bộ định thời Timer2

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Start Timer2
Counting

TMR2
OUTPUT

TMR2
Fosc/4

Prescaler
1:1, 1:4, 1:16

COMPARATOR

Load Period
Register

PR2

Postscaler
1:1  1:16

PIR1

1
TMR2IF

Flag set on first
match with
postscaler = 1:1

Hình 5.5: Cấu trúc bộ định thời Timer2

13


CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
TMR2
OUTPUT

TMR2
Prescaler
1:1, 1:4, 1:16

Fosc/4

COMPARATOR

Postscaler
1:1  1:16

PR2

Timer2 Control Register (T2CON)

TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0

T2CKPS1

T2CKPS2

Scale

0

0

1:1

0

1

1:4

1

X

1:16

Timer2 ON
1 = Timer2 enabled

Hình 5.6: Hoạt động định thời TIMER2


CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
TOUTPS3

TOUTPS2

TOUTPS1

TOUTPS0

SCALE

0

0

0

0

1:1

0

0

0

1


1:2

0

0

1

0

1:3

0

0

1

1

1:4
TMR2

1
Prescaler
0 1:1, 1:4,
1 1:16

0


0

1:5

0

1

1:6

0

1

1

0

1:7

0

1

1

1

1


0

0

0

1

0

0

1

1

0

1

0

1:11

1

0

1


1

PR21:12

1

1

0

0

1:13

1

1

0

1

1:14

1

1

1


0

1:15

1

1

1

1

1:16

0

Fosc/4

TMR2
OUTPUT

1:8
1:9
COMPARATOR
1:10

Postscaler
1:1  1:16

Timer2 Control Register (T2CON)


TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0

T2CKPS1

T2CKPS2

Scale

0

0

1:1

0

1

1:4

1

X

1:16

Timer2 ON
1 = Timer2 enabled


Hình 5.6: Hoạt động định thời TIMER2

14


CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

a. Thanh ghi T2CON

- Bit 7
- Bit 6:3 – TOUTPS<3:0> chọn giá trị tỉ lệ của bộ
Postscaler (nằm tại ngõ ra của Timer2).
0000 = 1:1
0001 = 1:2
….. 1111 = 1:16

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

- Bit 2 - TMR2ON: Bit cho phép Timer2 hoạt động
1 = Cho phép
0 = Không cho phép
- Bit 1:0 - T2CKPS<1:0> Bit chọn giá trị tỉ lệ ngõ vào
của Timer2 (Prescaler).
00 = 1:1
01 = 1:4
1x = 1:16

15



CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

b. Nguồn xung Clock của Timer2
-

Nguồn xung cấp cho Timer2 từ bộ dao động nội,
được định tỉ lệ bởi 3bit T2CKPS<1:0> (Prescaler).

c. Thanh ghi TMR2 và PR2
-

TMR2 và PR2 có thể được Ghi / Đọc.

-

TMR2 sẽ tăng từ giá trị 00H đến giá trị trong PR2,
sau đó được Reset về 00H cho chu kỳ đếm kế tiếp.

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

d. Tín hiệu báo trạng thái cân bằng
- Khi giá trị trong thanh ghi TMR2 và PR2 bằng nhau,
bộ so sánh sẽ tạo ra một tín hiệu xung.
- Xung này tiếp tục được đưa qua bộ hậu định tỉ lệ
(PostScaler) và có thể được sử dụng làm xung Clock
cho Module truyền nối tiếp hoặc có thể làm tín hiệu
Reset cho Timer2.
- Công thức tính thời gian định thời của Timer2:

16



CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

e. Reset các Bộ định tỉ lệ
Các bộ định tỉ lệ sẽ bị Reset khi:
-

Ghi một giá trị vào thanh ghi TMR2.

-

Ghi một giá trị vào thanh ghi T2CON.

-

Khi xảy ra bất kỳ 1 trạng thái Reset thiết bị.

f. Chế độ SLEEP
-

Trong chế độ này, Timer2 không hoạt động.

-

Giá trị của bộ định tỉ lệ sẽ được lưu và khôi phục lại
sau khi thoát khỏi chế độ SLEEP.

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI


g. Khởi tạo TIMER2
TIMER
PR2 = xxx

: đặt giá trị vào thanh ghi đặt trước PR2

T2CKPS<1:0>

: chọn tỉ lệ Prescaler

T2OUTPS<3:0>

: chọn tỉ lệ Postscaler

Nếu sử dụng NGẮT
TMR2IE = 1
TMR2IF = 0
PEIE = 1
GIE = 1

: bật NGẮT Timer2
: xóa cờ NGẮT
: bật NGẮT ngoại vi
: bật NGẮT toàn cục

TMR2ON = 1

: cho Timer 2 chạy

17



CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

4. Bảng tóm tắt các bộ Timer
TIMER0
TIMER1

TIMER2

SIZE OF
REGISTER

8-bits (TMR0)

16-bits
(TMR1H:TMR1L)

8-bits (TMR2)

CLOCK SOURCE
(Internal)

Fosc/4

Fosc/4

Fosc/4

CLOCK SOURCE

(External )

T0CKI pin

T1CKI pin or
Timer 1 oscillator
(T1OSC)

None

CLOCK SCALING
AVAILABLE
(Resolution)

Prescaler 3-bits
(1:21:256)

Prescaler 2-bits
(÷1,÷2,÷4,÷8)

Prescaler
(1:1,1:4,1:8)
Postscaler
(1:11:16)

On overflow
FFFFh0000h
(TMR1IF in PIR1)

TMR2 matches

PR2
(TMR2IF in PIR2)

YES

NO

INTERRUPT
On overflow
EVENT and FLAG
FFh00h
LOCATION
(TMR0IF in INTCON)
CAN WAKE PIC
FROM SLEEP?

NO

CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI

6. Các Ví dụ và Bài tập

18



×