JavaScript is required

Cho chương trình sau:

DELAY:

MOV TMOD, #02H

MOV TH0, # -100 45

SETB TR0

LOOP:

JNB TF0, LOOP

CLR TF0

CPL P1.1

SJMP LOOP

END

Chương trình này dùng để:

A.

Tạo dòng sóng vuông có chu kỳ 100mS trên chân P1.1

B.

Tạo dòng sóng vuông có chu kỳ 200mS trên chân P1.1

C.

Tạo dòng sóng vuông có chu kỳ 200µS trên chân P1.1

D.

Tạo dòng sóng vuông có chu kỳ 100µS trên chân P1.1

Trả lời:

Đáp án đúng: C


Phân tích chương trình: * **TMOD = #02H:** Chọn Timer 0 ở chế độ 2 (8-bit tự động nạp lại). * **TH0 = # -100:** Giá trị ban đầu của thanh ghi TH0 là -100 (tương đương 256 - 100 = 156). Timer 0 sẽ đếm từ 156 đến 255, sau đó tràn và nạp lại giá trị 156 từ TL0. Khi tràn, cờ TF0 được set. * **SETB TR0:** Bắt đầu Timer 0. * **LOOP:** Vòng lặp kiểm tra cờ TF0. Khi TF0 được set, vòng lặp kết thúc. * **CLR TF0:** Xóa cờ TF0 để chuẩn bị cho lần đếm tiếp theo. * **CPL P1.1:** Đảo trạng thái bit P1.1. Đây là thao tác tạo ra sóng vuông. * **SJMP LOOP:** Quay lại vòng lặp. Tính toán chu kỳ: * Timer 0 ở chế độ 2, sử dụng bộ chia tần số mặc định là 12 (tần số dao động thạch anh chia cho 12). * Giả sử tần số dao động là 12MHz, thì tần số của timer là 1MHz (12MHz / 12). * Thời gian đếm một đơn vị là 1µs (1 / 1MHz). * Timer đếm từ 156 đến 255, tức là đếm 256 - 156 = 100 đơn vị. * Thời gian tràn là 100 * 1µs = 100µs. * Vì bit P1.1 được đảo trạng thái mỗi khi Timer 0 tràn, nên chu kỳ của sóng vuông là 2 * 100µs = 200µs. Vậy, chương trình tạo ra sóng vuông có chu kỳ 200µs trên chân P1.1.

Câu hỏi liên quan