JavaScript is required

Xem đoạn lệnh sau đây và giải thích ý nghĩa chính xác nhất:

makefile

Sao chépChỉnh sửa

WAIT:

IN R20,TIFR2

SBRS R20,OCF2A

RJMP WAIT

OUT TIFR2,R20

A.

A. Chờ Timer2 đếm tràn, thoát khỏi vòng lặp WAIT và xóa cờ báo tràn

B.

B. Chờ Timer2 đếm đạt kết quả so sánh kênh A, thoát khỏi vòng lặp WAIT và xóa cờ OCF2A

C.

C. Chờ Timer2 đếm đạt kết quả so sánh kênh B, thoát khỏi vòng lặp WAIT và xóa cờ OCF2B

D.
D. Chờ cờ báo OCF2A = 1, thoát khỏi vòng lặp WAIT
Trả lời:

Đáp án đúng: B


Đoạn mã assembly này liên quan đến việc sử dụng Timer2 trong một vi điều khiển (có thể là AVR). Ta cùng phân tích chi tiết: * `IN R20,TIFR2`: Lệnh này đọc giá trị của thanh ghi TIFR2 (Timer/Counter2 Interrupt Flag Register) vào thanh ghi R20. * `SBRS R20,OCF2A`: Lệnh này kiểm tra bit OCF2A (Output Compare Flag 2A) trong thanh ghi R20. Nếu OCF2A bằng 1 (tức là sự kiện so sánh đầu ra kênh A của Timer2 đã xảy ra), lệnh tiếp theo sẽ bị bỏ qua (skipped). * `RJMP WAIT`: Nếu OCF2A không bằng 1 (sự kiện so sánh chưa xảy ra), chương trình sẽ nhảy trở lại nhãn WAIT, tạo thành một vòng lặp. * `OUT TIFR2,R20`: Khi OCF2A bằng 1 (vòng lặp WAIT bị thoát), lệnh này sẽ ghi giá trị của R20 vào TIFR2. Việc ghi 1 vào bit cờ trong TIFR2 sẽ xóa cờ đó. Trong trường hợp này, nó xóa cờ OCF2A. Như vậy, đoạn mã này chờ cho đến khi Timer2 đạt kết quả so sánh ở kênh A (OCF2A = 1), sau đó xóa cờ báo sự kiện này. **Kết luận:** Đáp án A sai vì đoạn mã chờ cờ so sánh kênh A, không phải cờ tràn (overflow). Đáp án B đúng vì đoạn mã chờ Timer2 đếm đạt kết quả so sánh kênh A (đặt cờ OCF2A), thoát khỏi vòng lặp WAIT và xóa cờ OCF2A. Đáp án C sai vì đoạn mã làm việc với cờ OCF2A (kênh A), không phải OCF2B (kênh B). Đáp án D sai vì đoạn mã không chỉ chờ cờ OCF2A = 1 mà còn xóa cờ này sau khi thoát vòng lặp.

Câu hỏi liên quan