Khởi tạo và truy xuất thanh ghi Timer

Một phần của tài liệu gt-lap-trinh-vi-dieu-khien (Trang 122 - 126)

1.2 .Khai báo dữ liệu

6. Khởi tạo và truy xuất thanh ghi Timer

Các bộ định thời thường được khởi động một lần ở thời điểm bắt đầu chương trình để thiết lập chế độ hoạt động yêu cầu.Trong thân của chương trình,các bộ định thời được điều khiển hoạt động, dừng, kiểm tra các bit cờ và xóa, cá thanh ghi định thời được đọc hoặc cập nhật tuỳ theo yêu cầu ứng dụng. TMOD là thanh ghi được khởi động trước tiên vì đây là thanh ghi thiết lập chế độ hoạt động.

Các tác vụ:

- Đặt chế độ làm việc. - Cho timer chạy. - Dừng timer. - Kiểm tra cờ tràn. - Xóa cờ tràn.

- Đọc và cập nhật các thanh ghi timer.

- Chú ý: khi có sử dụng ngắt ngoài ( TD: chế độ 1)

Ví dụ:

Đặt chế độ làm việc: Khởi động bộ định thời 1 hoạt động ở chế độ 16-bit (chế độ 1), xung clock được cấp từ mạch dao động trên chip(định thời một khỏang thời gian). MOV TMOD,#00010000B

Timer 1: Gate = 0, C/T = 0, M1M0 = 01 (mode 1) Timer 0 : Gate = 0, C/T = 0, M1M0 = 00(mode 0)

Trong trường hợp cần đến số đếm ban đầu, các thanh ghi định thời TL1/TH1 cũng phải được khởi động. Cần nhớ là các bộ định thời đếm lên và thiết lập cờ tràn bằng 1 khi xảy ra tràn số đếm từ FFFFH xuống 0000H, vậy thì một khoảng thời gian 100us có thể được định thời bằng cách khởi động TL1/TH1 chứa số đếm nhỏ hơn 0000H một lượng là 100 nghĩa là -100 hay FF9CH. Các lệnh sau thực hiện điều này.

MOV TL1,#9CH MOV TH1,#0FFH

Cho timer chạy: Kế đến bộ định thời bắt đầu hoạt động bằng cách thiết lập bit điềukhiển hoạt động bằng 1 như sau :

SETB TR1

Cờ tràn được tự động sau khoảng thời gian 100us. Phần mềm có thể chứa 1 vịng lặp trì hỗn thời gian 100us bằng cách sử dụng một lệnh rẽ nhánh và lặp lại chính lệnh này trong khi cờ tràn chứa được set bằng 1.

WAIT : JNB TF1, WAIT

Dừng timer: Khi bộ định thời tràn ta cần dừng bộ định thời và xóa cờ tràn bằng phần mềm:

CLR TR1 CLR TF1 Kiểm tra cờ và xóa cờ:

WAIT: JNB TF1,WAIT

CLR TR1 ;dừng timer T1 CLR TF1 ; xóa cờ báo tràn Cập nhật các thanh ghi timer

MOV TL1,#9CH MOV TH1,#0FFH

6.1. Đọc thời gian đang hoạt động.

Trong một số ứng dụng ta cần phải đọc giá trị (nội dung) chứa trong các thanh ghi định thời đang hoạt động. Do ta phải đọc 2 thanh ghi định thời bằng 2 dòng lệnh liên tiếp (do không có lệnh đọc đồng thời cả hai thanh ghi định thời này), một số pha có thể xuất hiện nếu có tràn từ byte thấp chuyển sang byte cao giữa hai lần đọc và do vậy không thể đọc đúng được giá trị cần đọc. Giải pháp đưa ra là trước tiên ta phải đọc byte cao kế đến đọc byte thấp rồi đọc byte cao lần nữa.

Nếu byte cao thay đổi giá trị, ta lặp lại các thao tác đọc vừa nêu. Các lênh sau đây đọc nội dung các thanh ghi định thời TL1/TH1, đưa vào các thanh ghi R6/R7 và giải quyết vấn đề vừa nêu:

AGAIN : MOV A, TH1 MOV R6,TL1

CJNE A,TH1, AGAIN MOV R7,A

Ví dụ 1: Viết chương trình tạo sóng vuông 10KHz trên chân P0.0 bằng cách sử dụng bộ định thời 0. ( Thạch anh 12MHz )

ORG 0030H ; thiết lập gốc của chương trình

MOV TMOD,#00000010B ;( #02H ) chế độ tự nạp lai MOV TH0,#206 ; TH0 chứa giá trị 206 =0CEH= -50 SETB TR0 ; cho phép bộ định thời hoạt động

LOOP: JNB TF0,LOOP ; chờ timer 0 tràn CLR TF0 ; xóa cờ tràn chuẩn bị cho lần sau CPL P0.0 ; đổi trạng thái bit P0.0

SJMP LOOP ; nhảy về nhãn LOOP, lăp lại END

Ví dụ 2: Viết chương trình tạo sóng vuông 1KHz trên chân P1.0 sử dụng bộ định thời 0. ORG 0030H ; thiết lập gốc của chương trình

MOV TMOD,#00000001B ; chế độ định thời 16 bit LOOP:

MOV TH0,#0FEH ; nạp trước cho TH0 byte cao của -500 MOV TL0,#0CH ; nạp trước cho TL0 byte thấp của -500 SETB TR0 ; cho phép bộ định thời hoạt động

JNB TF0,WAIT ; chờ timer 0 tràn CLR TR0 ; dừng bộ định thời CLR TF0 ; xóa cờ tràn CPL P1.0 ; lấy bù SJMP LOOP ; lặp lại END

6.2. Thời gian ngắn và thời gian dài.

Khoảng thời gian định thời cực đại (µs)

Khoảng thời gian Kỹ thuật

≈ 10 Điều chỉnh phần mềm

256 Bộ định thời 8 bit tự động nạp lại

65536 Bộ định thời 16 bit

Không giới hạn Bộ định thời 16 bit + các vòng lặp Ví dụ: Tạo dạng xung trên chân P1.0

Viết một chương trình tạo ra dạng sóng có chu kỳ trên P1.0 với tần số cao nhất có thể được. Tần số và chu kỳ nhiệm vụ của dạng sóng này là bao nhiêu? (giả sử dùng XTAL = 12MHz  1MC = 1µs).

 Với dạng sóng rất ngắn: không cần timer ORG 8000H

LOOP: SETB P1.0 ; 1MC

CLR P1.0 ; 1MC

SJMP LOOP ; 2MC

Tần số = 250 Khz (1/4 µs).

TON = 1µs, TOFF = 3µs  duty cycle = TON/(TON + TOFF) = 25Khz (1/4 μs). Tạo sóng vuông 10KHz ở chân P1.0

Tạo sóng vuông 10KHz

Tần số = 10KHz chu kỳ T=1/10000 = 10 us TON = 50 US, TOFF = 50 us

Dùng mode 2 ( 8 bit mode ), vì khoảng thời gian <256 us ORG 8000H

MOV TH0,#-50 ; 256-50=206

SETB TR0 ; cho timer T0 chạy

LOOP: JNB TF0,LOOP ; đợi timer T0 tràn

CLR TF0 ; xóa cờ báo tràn

CPL P1.0 ; đảo bit cổng

SJMP LOOP ; lặp lại END

Một phần của tài liệu gt-lap-trinh-vi-dieu-khien (Trang 122 - 126)

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

(188 trang)