Đ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
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.