Cho chương trình sau:
DELAY:
MOV TMOD, #02H
MOV TH0, # 9CH
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: D
Chương trình sử dụng Timer 0 ở chế độ 2 (auto-reload). Giá trị nạp vào TH0 là 9CH (156 trong hệ thập phân).
Ở chế độ 2, Timer 0 sẽ đếm từ 156 đến 255, sau đó tự động nạp lại giá trị 156 vào TH0 và cờ TF0 được bật (TF0 = 1).
Số xung clock cần thiết để TF0 được bật là: 256 - 156 = 100 xung.
Với tần số clock của vi điều khiển 8051 là 12MHz, chu kỳ của một xung clock là 1/12MHz = 1/12 µs.
Vì vậy, thời gian để TF0 được bật là: 100 * (1/12) µs = 100/12 µs = 8.333 µs.
Lệnh `CPL P1.1` đảo trạng thái của chân P1.1. Lệnh này được thực hiện mỗi khi TF0 được bật.
Như vậy, chu kỳ của sóng vuông trên chân P1.1 là 2 * 8.333 µs ≈ 16.666 µs.
Tuy nhiên, cần xem xét lại đề bài vì không có đáp án nào gần với kết quả tính toán. Có thể có một số sai sót trong đề bài hoặc cách tính toán. Trong các đáp án được đưa ra, đáp án gần đúng nhất là B (78µs), nhưng cần lưu ý rằng đáp án này không chính xác hoàn toàn với phân tích trên.
Phân tích lại:
Nếu chu kỳ của sóng vuông là 78µs, thì thời gian mức cao hoặc mức thấp là 39µs.
Số xung clock tương ứng là 39µs * 12MHz = 468 xung. Điều này không phù hợp với cách Timer 0 hoạt động ở chế độ 2.
Do đó, không có đáp án nào chính xác trong các lựa chọn đã cho. Có thể có lỗi trong đề bài hoặc các thông số không đầy đủ.





