CL RA ;Nội dung thanh ghi Ab ằng zero.
45. Lệnh giả mô nhớ trực tiếp và nhảy
3.4.5.1. Các thanh ghi phục vụ cho Timer/counter
Thanh ghi của 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 …
MOV TL0, #55H MOV R0, TH0
Hình 5.3.1a. Các thanh ghi của Timer 0.
Hình 5.3.1b. Các thanh ghi của 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.
- 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ụ: 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
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
Giải:
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 Giải: a) 12 12MHz 1MHz 1 × = và T 1MHz 1µs 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. 3.4.5.2. Lập trình các bộđịnh thời gian của 8051 Lập trình chếđộ 1 (Model 1)
Dưới đây là những đặc trưng và những phép toán của Model 1.
- Đó là bộ định thời 16 bit, do vậy các giá trị từ 0000 – FFFFH được nạp vào thanh ghi TL và TH của bộđịnh thời.
- Sau đó bộđịnh thời được khởi động nhờ lệnh “SETB TR0” cho Timer 0 và “SETB TR1” cho Timer 1.
- Sau khi được khởi động thì bộ định thời bắt đầu đếm tăng. Bộ định thời đếm lên cho đến khi đạt giới hạn FFFFH. Khi đó nó sẽ quay vòng từ FFFFH về 0 và bật cờđịnh thời TF (Timer Flag) lên mức cao. - Bộ định thời sau khi đạt giá trị giới hạn thì thực hiện quay vòng về 0.
Để lặp lại quá trình đếm thì các thanh ghi TH và TL phải được nạp lại giá trị ban đầu và cờ TF cần được xoá về 0.