JavaScript is required

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

A.

Tạo dòng sóng vuông có chu kỳ 65036µS trên chân P1.0

B.

Tạo dòng sóng vuông có chu kỳ 32518µS trên chân P1.0

C.

Tạo dòng sóng vuông có chu kỳ 1000µS trên chân P1.0

D.

Tạo dòng sóng vuông có chu kỳ 500µS trên chân P1.0

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.

Câu hỏi liên quan