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 để:
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.





