JavaScript is required

Đoạn lệnh sau tạo sóng ngõ ra chân nào và chu kỳ T bao nhiêu (Cho Fosc = 8Mhz, 1MC = 125ns)?

asm

Sao chépChỉnh sửa

EQU TF=499

SBI DDRD,5

LDI R16,HIGH(TF)

STS OCR1AH,R16

LDI R16,LOW(TF)

STS OCR1AL,R16

LDI R16,$40

STS TCCR1A,R16

LDI R16,$18

STS TCCR1B,R16

A.

A. OC1B, T=1000µs

B.

B. OC1A, T=500µs

C.

C. OC1B, T=500µs

D.
D. OC1A, T=1000µs
Trả lời:

Đáp án đúng: C


Đoạn code này sử dụng Timer1 để tạo xung PWM trên chân OC1A. Để xác định chân và chu kỳ, ta phân tích như sau: 1. **Chân ngõ ra:** * `SBI DDRD,5`: Lệnh này set bit thứ 5 của thanh ghi DDRD lên 1, tức là cấu hình chân PD5 là chân output. * Thanh ghi `TCCR1A` và `TCCR1B` được cấu hình để điều khiển Timer/Counter1. Dựa vào các giá trị `$40` (0100 0000) gán cho TCCR1A và `$18` (0001 1000) gán cho TCCR1B, ta thấy chế độ hoạt động của timer là PWM, Phase Correct, 10-bit. * Trong chế độ PWM Phase Correct 10-bit, chân OC1A (PD5) sẽ được sử dụng làm ngõ ra PWM. 2. **Chu kỳ T:** * `TF = 499`: Giá trị này được gán cho thanh ghi so sánh OCR1A, quyết định độ rộng xung (duty cycle) và chu kỳ của tín hiệu PWM. Tuy nhiên, nó lại được cấu hình để tạo ra TOP value, do đó T = (TF + 1) * 2 * Prescaler * (1/Fosc) = (499 + 1) * 2 * 8 * (1/8000000) = 0.001s = 1000µs. Vậy, đoạn lệnh này tạo sóng ngõ ra trên chân OC1A với chu kỳ T = 1000µs.

Câu hỏi liên quan