Cho chương trình sau:
DELAY:
MOV TMOD, #01H
LOOP:
MOV TH0, # 0FEH
MOV TL0, #0CH
SETB TR0
JNB TF0, $
CLR TR0
CLR TF0
CPL P1.0
SJMP LOOP
END
Chương trình này dùng để:
Trả lời:
Đáp án đúng: C
Đầu tiên, ta cần tính thời gian trễ của một vòng lặp. Chương trình sử dụng Timer 0 ở chế độ 1 (16-bit timer). Giá trị khởi tạo là TH0 = 0FEH và TL0 = 0CH.
Giá trị ban đầu của Timer 0 là: 0FE0CH (hệ Hexadecimal).
Giá trị tối đa của Timer 0 (16-bit) là: 0FFFFH (hệ Hexadecimal).
Số xung clock cần thiết để Timer 0 tràn là: 0FFFFH - 0FE0CH + 1 = 01F4H = 500 (hệ Decimal).
Giả sử tần số clock của vi điều khiển là 12MHz, thì chu kỳ máy (machine cycle) là 12/12MHz = 1µs. Do đó, mỗi xung clock của timer mất 1µs.
Thời gian trễ của một vòng lặp là: 500 * 1µs = 500µs.
Trong mỗi vòng lặp, chân P1.0 được đảo trạng thái (CPL P1.0). Vì vậy, thời gian cho một chu kỳ sóng vuông (tức là thời gian để P1.0 trở về trạng thái ban đầu) sẽ là hai lần thời gian trễ của một vòng lặp.
Chu kỳ sóng vuông = 2 * 500µs = 1000µs.
Vậy, chương trình tạo ra dòng sóng vuông có chu kỳ 1000µs trên chân P1.0.





