Cho chương trình sau:
DELAY:
MOV TMOD, #01H
LOOP:
MOV TH0, #3CH
MOV TL0, #0B0H
SETB TR0
JNB TF0, $
CLR TR0
CLR TF0
CPL P1.1
SJMP LOOP
END
Chương trình này dùng để:
Trả lời:
Đáp án đúng: D
Để giải bài này, chúng ta cần phân tích đoạn chương trình và tính toán chu kỳ của sóng vuông tạo ra trên chân P1.1.
- Khởi tạo Timer 0: TMOD = #01H: Timer 0 được cấu hình ở chế độ 1 (16-bit timer).
- Giá trị nạp cho Timer 0: TH0 = #3CH và TL0 = #0B0H. Giá trị này cần được chuyển đổi sang số thập phân để tính toán. Giá trị ban đầu của timer là: (3C * 256) + B0 = (60 * 256) + 176 = 15360 + 176 = 15536.
- Tính toán thời gian đếm: Timer 16-bit có thể đếm từ 0 đến 65535. Vậy số xung clock cần thiết để tràn timer là: 65536 - 15536 = 50000 xung.
- Giả sử tần số clock của vi điều khiển là 12MHz: Chu kỳ của một xung clock là 1 / 12MHz = 1 / (12 * 10^6) giây = 0.0833 µs. Vì Timer 0 được cấu hình ở chế độ 1 (16-bit), bộ chia tần số là 12. Do đó, thời gian cho một xung timer là 1 µs.
- Thời gian để Timer 0 tràn: Thời gian tràn = 50000 * 1µs = 50000µs = 50ms.
- Tạo sóng vuông: Chân P1.1 được đảo trạng thái (CPL P1.1) mỗi khi Timer 0 tràn. Điều này có nghĩa là thời gian ở mức cao và thời gian ở mức thấp bằng nhau. Do đó, chu kỳ của sóng vuông là gấp đôi thời gian tràn của Timer 0. Chu kỳ = 2 * 50ms = 100ms.
Vậy, chương trình này tạo ra sóng vuông có chu kỳ 100ms trên chân P1.1.





