Cấu hình cài đặt các thanh ghi điều khiển, trạng thái cho bộ định thời

Một phần của tài liệu giáo trình học vi điều khiển (Trang 90 - 94)

CHƯƠNG 5. BỘ ĐỊNH THỜI – BỘ ĐẾM

5.2 Cấu hình cài đặt các thanh ghi điều khiển, trạng thái cho bộ định thời

- Thanh ghi chứa giá trị đếm là TMR0 có độ dài 8 bit (số đếm tối đa là 255).

- Nội dung của thanh ghi TMR0 có thể đọc và ghi đƣợc - Hoạt động ở 2 chế độ: bộ định thời và bộ đếm

- Trong chế độ bộ đếm: dạng xung đầu vào có thể lựa chọn (sườn dương hoặc sườn âm)

- Có bộ chia tần số có thể thay đổi tỉ lệ chia bằng chương trình 5.2.2 Các bit điều khiển

a. Bit chọn chế độ

Timer0 hoạt động ở 2 chế độ: bộ định thời và bộ đếm

Để lựa chọn chế độ làm việc, ta gán giá trị cho bit T0CS (Timer0 Clock Select bit- Bit lựa chọn nguồn xung cho Timer), vị trí của bit này là bit 5 của thanh ghi OPTION_REG:

T0CS=1: Timer0 hoạt động ở chế độ bộ đếm (nguồn xung là xung đầu đi vào chân RA4) T0CS=0: Timer0 hoạt động ở chế độ định thời (nguồn xung là dao động thạch anh, tần số=Fosc/4)

b. Bit chọn dạng xung đầu vào

Khi hoạt động ở chế độ bộ đếm, thanh ghi TMR0=TMR0+1 mỗi lần có 1 xung đi vào chân RA4

Vấn đề là dạng xung là xung sườn lên hay sườn xuống

91

Để cài đặt dạng xung ta gán giá trị cho bit T0SE (Timer0 Edge Select Bit- Bít chọn dạng sườn xung), vị trí của bit là bít 4 của thanh ghi OPTION_REG:

T0SE=1: TMR0=TMR0+1 Khi có đổi trạng thái từ cao xuống thấp trên chân RA4 (sườn âm)

T0SE=0: TMR0=TMR0+1 Khi có đổi trạng thái từ thấp lên cao trên chân RA4 (sườn dương)

c. Các bít cài đặt tỉ lệ chia tần số

Nhƣ trong phần a đã khảo sát, nguồn xung tác động có thể xung đi vào chân RA4 (trong chế độ bộ đếm)

Hoặc nguồn xung từ dao động thạch anh (đã đƣợc chia 4- trong chế độ bộ định thời) Trong thực tế, dao động từ nguồn xung trên phải đi qua bộ chia tần số trước khi đi vào tác động đến

Timer0.

Bộ chia tần số này có thể cài đặt tỉ lệ chia tần số Cụ thể ta hiểu đơn giản nhƣ sau:

Trong chế độ bộ đếm, TMR0=TMR0+1 sau mỗi xung của tín hiệu đi vào chân RA4 Vậy tần số cập nhật của TMR0 là bằng tần số xung

Bây giờ do tín hiệu xung từ chân RA4 đi qua bộ chia tần số trước khi tác động thay đổi TMR0

Giả sử tỉ lệ chia là 1:2 nghĩa là tần số của xung đầu ra của bộ chia bằng ẵ tần số của xung vào RA4

Mỗi xung đầu ra của bộ chia làm cho TMR0=TMR0+1 Vậy tần số xung của RA4=2 tần số cập nhật TMR0

Do đó, sau khi có 2 tác động vào RA4 thì TMR0=TMR0+1 Tương tự, đối với chế độ bộ định thời

Sau 2 chu kì lệnh, TMR0=TMR0+1

Điều đặc biệt là tỉ lệ chia này có thể thay đổi đƣợc bằng cách gán giá trị cho các bit PS2,PS1,PS0- Vị trí các bít là bit 2,1,0 của thanh ghi OPTION_REG

Cụ thể tỉ lệ chia tương ứng với giá trị của PS2,PS1,PS0 như sau:

92

PS2 PS1 PS0

Tỉ lệ chia

000 1:2

001 1:4

010 1:8

011 1:16

100 1:32

101 1:64

110 1:128

111 1:256

Bảng 5.1: Chọn tỉ lệ chia tần số cho timer0 d. Bít chọn bộ chia tần số cho TIMER0

Thực ra bộ chia tần số có thể đƣợc lựa chọn làm bộ chia cho Timer0 hoặc Watch Dog Timer

Vì vậy, để cài đặt bộ chia tần số làm việc với Timer0 ta có gán giá trị cho bít PSA , vị trí bit là bít số 3 của thanh ghi OPTION_REG.

PSA=0, bộ chia làm việc cho TIMER0

PSA=1, bộ chia làm việc cho Watch Dog Timer e. Bít cờ trạng thái

Do độ dài của thanh ghi TMR0 là 8 bit, nhƣ vậy tốt đa viết đƣợc 255

Nếu nhƣ TMR0=255, nếu tiếp tục có xung vào (từ nguồn dao động thạch anh trong chế độ định thời hoặc từ chân RA4 trong chế độ bộ đếm), TMR0 = 255+1 = 256 bị tràn và TMR0=0

Mỗi lần TMR0 bị tràn, bit cờ trạng thái sẽ tự động set lên 1 để báo trạng thái tràn đó Bit cờ này có tên là TMR0IF (Timer0 Interrupt Flag- Bít cờ ngắt), vị trí bit là bít 2 của thanh ghi INTCON.

Chú ý là khi có tràn giá trị của thanh ghi TMR0, TMR0IF=1, TMR0=0 Ta phải xóa TMR0IF bằng chương trình.

93

Toàn bộ hoạt động của timer0 có thể tổng kết theo sơ đồ sau:

Hình 5.1: Nguyên lý hoạt động của Timer0 5.2.3 Các thanh ghi liên quan

Thanh ghi TMR0 (Địa chỉ 01h) Chứa giá trị đếm hiện tại của Timer 0 Thanh ghi Option_Reg (Địa chỉ 81h)

T0CS: Bit chọn chế độ

= 0: TMR0 hoạt động chế độ định thời

= 1: TMR0 hoạt động chế độ bộ đếm T0SE: Bit chọn dạng xung cho chế độ bộ đếm

= 0: Xung sườn lên

= 1: Xung sườn xuống

PSA: Bit chọn chế độ cho bộ chia tần số PresCale là WatchDog_Timer hay Timer 0.

= 0: Bộ chia tần số dành cho Timer 0

= 1: Bộ chia tần số dành cho Watch_Dog Timer

PS2-PS0: 3 bit chọn tỉ lệ chia tần số nhƣ đã giới thiệu ở phần trên Thanh ghi INTCON (0Bh):

94

Bit TMR0IE: Bit này bằng 1 cho phép ngắt Timer 0. Sự kiện ngắt xảy ra khi có sự tràn TMR0 từ 255 xuống 0.

Một phần của tài liệu giáo trình học vi điều khiển (Trang 90 - 94)

Tải bản đầy đủ (PDF)

(155 trang)