BỘ ĐẾM/ĐỊNH THỜI CỦA 8051 VÀ LẬP TRÌNH

Một phần của tài liệu Hệ vi điều khiển - Chương 3 ppsx (Trang 41 - 44)

CL RA ;Nội dung thanh gh iA bằng zero.

45. Lệnh giả mô nhớ trực tiếp và nhảy

3.4.5. BỘ ĐẾM/ĐỊNH THỜI CỦA 8051 VÀ LẬP TRÌNH

Trong những ứng dụng kỹ thuật nhiều khi ta phải tạo ra khoảng thời gian trễ để điều khiển các thiết bị theo thời gian hoặc đếm sự kiện từ bên ngoài, khi đó ta phải sử dụng các Timer và Counter để thực hiện nhiệm vụ trên.

Trong vi điều khiển 8051 có 2 timer/counter T0 và T1. Các timer hay counter chỉ là một và chính là bộ đếm có chức năng đếm xung.

Nếu ta sử dụng ở chế độ timer thì thời gian định thời nhân với chu kỳ của mỗi xung sẽ có được lượng thời gian cần thiết – ở chế độ timer vi điều khiển thường đếm xung nội lấy từ mạch dao động bên trong vi điều khiển có chu kỳ ổn định. Chế độ timer dùng để định thời gian chính xác để điều khiển các thiết bị theo thời gian.

Nếu chúng ta sử dụng ở chế độ counter thì ta chỉ cần quan tâm đến số lượng xung đếm được – không cần quan tâm đến chu kỳ của xung đếm. Chế độ counter thường thì đếm xung nhận từ bên ngoài đưa đến ngõ vào T0 đối với timer/counter thứ 0 và ngõ vào T1 đối với timer/counter thứ 1. Đếm xung từ bên ngoài còn gọi là đếm sự kiện. Một ứng dụng cho chế độ counter là có thể sử dụng vi điều khiển làm các mạch đếm sản phẩm.

Đến đây ta có thể xem timer hay counter là 1 và chú ý rằng tại mỗi một thời điểm ta chỉ sử dụng một trong 2 hoặc là timer hoặc là counter.

Các timer/counter của vi điều khiển sử dụng 16 bit và số lượng xung mà timer/counter có thể đếm được tính theo số nhị phân bắt đầu từ 0000 0000 0000 00002 đến 1111 1111 1111 11112 , nếu viết theo hệ 16 thì bắt đầu từ 0000H đến FFFFH và nếu tính theo giá trị thập phân thì bắt đầu từ 0 đến 65535.

Khi đạt đến giá trị cực đại và nếu có thêm 1 xung nữa thì bộ đếm sẽ bị tràn, khi bị tràn thì giá trị đếm sẽ tự động về 0 và cờ tràn của timer/counter lên 1 để báo hiệu timer/counter đã bị tràn (trước khi đếm thì phải xoá cờ tràn).

Người lập trình sử dụng trạng thái cờ tràn lên 1 để rẽ nhánh hoặc chấm dứt thời gian cần thiết đã định để chuyển sang làm một công việc khác. Và khi cờ tràn lên 1 sẽ tạo ra ngắt cũng để rẽ nhánh chương trình để thực hiện một chương trình khác.

Các giá trị đếm được của timer/counter T0 thì lưu trong 2 thanh ghi TH0 và TL0 – mỗi thanh ghi 8 bit kết hợp lại thành 16 bit.

Tương tự, các giá trị đếm được của timer/counter T1 thì lưu trong 2 thanh ghi TH1 và TL1 – mỗi thanh ghi 8 bit kết hợp lại thành 16 bit.

Ngoài các thanh ghi lưu trữ số xung đếm vừa giới thiệu thì còn có 2 thanh ghi hổ trợ kèm theo: thanh ghi TMOD và thanh ghi TCON dùng để thiết lập nhiều

chế độ hoạt động khác nhau cho timer để đáp ứng được sự đa dạng các yêu cầu ứng dụng thực tế.

3.4.5.1. Các thanh ghi phc v cho Timer/counter

Thanh ghi ca b Timer 0 và Timer 1 (hình 5.3.1a và 5.3.1b)

Như ta đã giới thiệu ở trên thanh ghi 16 bit của Timer 0 được truy cập như một byte cao và byte thấp (TH0 và TL0). Các thanh ghi này cũng có thể được truy cập và được đọc như các thanh ghi khác như thanh ghi A, B, R0, R1 …

Ví d:

MOV TL0, #55H MOV R0, TH0

Hình 5.3.1a. Các thanh ghi ca Timer 0.

Hình 5.3.1b. Các thanh ghi ca Timer 1

Thanh ghi TMOD (hình 5.3.1c)

Cả hai bộ định thời Timer 0 và Timer 1 đều sử dụng chung một thanh ghi được gọi là TMOD để thiết lập các chế độ khác nhau của bộ định thời. Thanh ghi TMOD là thanh ghi 8 bit gồm 4 bit thấp cho Timer 0 và 4 bit cao cho Timer 1. Trong đó 2 bit thấp dùng để thiết lập chế độ của bộ định thời còn 2 bit cao dùng để xác định phép toán.

- Các bit M0, M1: Là các bit chế độ dùng để chọn chế độ 0, 1, 2 và 3 của các bộ Timer 0 và Timer 1 (bảng 5.3.1). Ta chỉ tập trung vào các chế độ được sử dụng rộng rãi là chế độ 1 và 2.

Hình 5.3.1c. Thanh ghi TMOD

- Bit C/T (đồng hồ/bộ định thời): Là bit dùng để xác định bộ định thời được sử dụng làm bộ tạo trễ hay bộ đếm sự kiện. Nếu C/T = 0 thì nó là bộ tạo trễ. Nguồn đồng hồ cho chế độ trễ là tần số thạch anh của 8051. C/T = 1 thì bộ định thời được chọn là bộ đếm sự kiện và nhận các xung đồng hồ từ bên ngoài của 8051.

D15 D14 D13 D12 D11 D10 D9 D8 TH1 D7 D6 D5 D4 D3 D2 D1 D0 TL1 D15 D14 D13 D12 D11 D10 D9 D8 TH0 D7 D6 D5 D4 D3 D2 D1 D0 TL0 (MSB) GATE C/T M1 M0 Timer1 GATE C/T M1 M0 Timer0 (LSB)

- Bảng 5.3.1: các chế độ làm việc M1 M0 Mode Chế độ hoạt động

0 0 0 Chế độ định thời 13 bit.

Bộ định thời/bộ đếm 8 bit, định tỉ lệ trước 5 bit 0 1 1 Chế độ định thời 16 bit, không định tỉ lệ trước 1 0 2 Chế độ 8 bit tự nạp lại

1 1 3 Chế độ bộ định thời chia tách

Ví d:

Xác định chế độ và bộ định thời của các trường hợp sau: a) MOV TMOD, #20H

b) MOV TMOD, #12H

Gii:

Trường hợp a: TMOD = 20H = 0010 0000B . Đối chiếu với thanh ghi TMOD ta thấy đây là chế độ 2 bộ định thời Timer 1 được chọn.

Trường hợp b: TMOD = 12H = 0001 0010B . Đối chiếu với thanh ghi TMOD ta thấy đây là chế độ 1 bộ định thời Timer 1 và chế độ 2 bộ định thời Timer 0 được chọn.

Nếu C/T = 0 thì tần số thạch anh trên chip 8051 làm nguồn cho đồng hồ bộ định thời. Điều đó có nghĩa là giá trị của tần số thạch anh của 8051 quyết định tốc độ đồng hồ của bộ định thời 8051. Tần số của bộ định thời luôn bằng 1/12 tần số của thạch anh trên 8051.

Ví dụ: Tìm tần số đồng hồ và chu kỳ của bộ định thời của các hệ thống xây dựng trên 8051 với tần số thạch anh như sau:

a) fXTAL = 12MHz b) fXTAL = 16MHz c) fXTAL = 11, 0592MHz Gii: a) 12 12MHz 1MHz 1 = × và T 1MHzs 1 = = b) 12 16MHz 1,333Mz 1 = × và T 1,333MHz 0,75µs 1 = = c) 12 11,0592MHz 0,9216MHz 1 = × và T 0,9216MHz 1,085µs 1 = =

Mặc dù các hệ thống xây dựng trên 8051 thường có tần số từ 10 – 40MHz. Song ở đây ta chỉ quan tâm đến tần số thạch anh 11, 0592MHz. Tần số này cho phép 8051 truyền thông không có lỗi với IBM PC.

- Bit cổng GATE: Mỗi bộ định thời đều có cách khởi động và dừng khác nhau. Một số bộ định thời thực hiện điều này bằng phần mềm, một số bằng phần cứng, một số khác kết hợp cả phần mềm và phần cứng. Bộ định thời của 8051 dùng phương pháp kết hợp. Khởi động và dừng bộ định thời bằng được thực hiện bằng phần mềm nhờ các bit khởi động bộ định thời TR (Timer Start) là TR0 và TR1 (hai bit này nằm trên thanh ghi TCON (hình 5.3.1d). Lệnh thực hiện khởi động và dừng Timer 0 tương ứng là “SETB TR0” và “CLR TR0” còn đối với Timer 1 là “SETB TR1” và “CLR TR1”. Các lệnh này được sử dụng khi mà bit GATE = 0. Nếu dùng phần cứng từ bên ngoài để khởi động và dừng bộ định thời thì ta cần đặt bit GATE = 1.

Hình 5.3.1d. Thanh ghi TCON

+ TF1: Cờ tràn của Timer 1

+ TR1: Điều khiển hoạt động của Timer 1. Nó được thiết lập bằng phần mềm để bật/tắt Timer 1.

+ TF0: Cờ tràn của Timer 0

+ TR0: Điều khiển hoạt động của Timer 1. Nó được thiết lập bằng phần mềm để bật/tắt Timer 0.

+ IE1, IT1, IE0, IT0: Các bít phục vụ cho ngắt.

Ví d:

Tìm giá trị của TMOD nếu muốn lập trình bộ Timer 1 ở chế độ 1 và sử dụng thạch anh XTLA 8051 làm nguồn đồng hồ và sử dụng lệnh để khởi động và dừng bộ định thời.

TMOD = 0001 0000

Chế độ 1 và chế độ 2 là hai chế độ được sử dụng khá phổ biến, vì vậy chúng ta sẽ nghiên cứu kỹ hơn.

Một phần của tài liệu Hệ vi điều khiển - Chương 3 ppsx (Trang 41 - 44)

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

(80 trang)