JavaScript is required

Xem đoạn chương trình sau và tính chu kỳ xung ngõ ra PB1 (cho PB1 là output). Cho Fck = 8 MHz, 1MC = 125 ns:

asm

Sao chépChỉnh sửa

LDI R16,49

STS OCR2A,R16

LDI R16,2

STS TCCR2A,R16

STS TCCR2B,R16

WAIT: SBIS TIFR2,OCF2A

RJMP WAIT

SBI TIFR2,OCF2A

IN R17,PORTB

EOR R17,R16

OUT PORTB,R17

RJMP WAIT

A.

A. 50 μs

B.

B. 100 μs

C.

C. 98 μs

D.
D. 49 μs
Trả lời:

Đáp án đúng: D


Đầu tiên, ta cần xác định chế độ hoạt động của Timer2. Các lệnh STS TCCR2A,R16 và STS TCCR2B,R16 với R16 = 2 (0b00000010) cho thấy Timer2 đang ở chế độ CTC (Clear Timer on Compare Match) với bộ chia tần số là 8 (CS22:0 = 010). Giá trị OCR2A được đặt là 49. Điều này có nghĩa là Timer2 sẽ đếm từ 0 đến 49, sau đó so sánh với OCR2A và tạo ra một ngắt (OCF2A được set lên 1). Chu kỳ của xung ngõ ra PB1 (giả sử PB1 được cấu hình là output toggle khi có so sánh bằng) sẽ là thời gian cần thiết để Timer2 đếm từ 0 đến 49, sau đó quay lại 0. Thời gian một chu kỳ máy (1MC) là 125ns. Thời gian để Timer2 đếm từ 0 đến 49 là (49 + 1) * (1MC * 8) = 50 * 125ns * 8 = 50 * 1μs = 50 μs. Tuy nhiên, vì PB1 được toggle trong ngắt, thời gian giữa hai lần toggle (tức là một chu kỳ đầy đủ của xung vuông) sẽ là gấp đôi thời gian đếm từ 0 đến 49. Do đó, chu kỳ của xung ngõ ra PB1 là 2 * 50 μs = 100 μs. Vậy đáp án đúng là B. 100 μs

Câu hỏi liên quan