Cho chương trình sau:
DELAY:
MOV TMOD, #02H
MOV TH0, #0CEH
SETB TR0
LOOP:
JNB TF0, LOOP
CLR TF0
CPL P1.0
SJMP LOOP
END
Chương trình này dùng để:
Trả lời:
Đáp án đúng: A
Để giải bài này, ta cần phân tích code và tính toán chu kỳ của sóng vuông tạo ra trên chân P1.0.
1. **Cấu hình Timer 0:**
- `MOV TMOD, #02H`: Timer 0 được cấu hình ở chế độ 2 (Auto-reload).
- `MOV TH0, #0CEH`: Giá trị ban đầu của TH0 là 0xCE. Điều này có nghĩa là timer sẽ đếm từ 0xCE đến 0xFF, sau đó tự động nạp lại giá trị 0xCE và tràn (TF0 được set).
2. **Tính toán thời gian đếm:**
- Số lượng xung clock cần để timer tràn: 256 - 0xCE = 256 - 206 = 50 xung.
- Giả sử tần số clock của vi điều khiển là 12MHz (thường gặp). Khi đó, tần số của timer là 12MHz / 12 = 1MHz (do chế độ auto-reload).
- Thời gian cho một xung clock là 1 / 1MHz = 1µs.
- Thời gian để timer tràn là 50 * 1µs = 50µs.
3. **Tạo sóng vuông:**
- `CPL P1.0`: Đảo trạng thái chân P1.0 mỗi khi timer tràn.
- Do đó, thời gian mức cao (hoặc mức thấp) của sóng vuông là 50µs.
- Chu kỳ của sóng vuông là 2 * 50µs = 100µs.
Vậy, chương trình này tạo ra sóng vuông có chu kỳ 100µs trên chân P1.0.





