JavaScript is required

Cho chương trình sau:

DELAY:

MOV TMOD, #01H

LOOP:

MOV TH0, #3CH

MOV TL0, #0B0H

SETB TR0

JNB TF0, $

CLR TR0

CLR TF0

CPL P1.1

SJMP LOOP

END

Chương trình này dùng để:

A.

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

B.

Tạo dòng sóng vuông có chu kỳ 50mS trên chân P1.1

C.

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

D.

Tạo dòng sóng vuông có chu kỳ 100mS trên chân P1.1

Trả lời:

Đáp án đúng: D


Để giải bài này, chúng ta cần phân tích đoạn chương trình và tính toán chu kỳ của sóng vuông tạo ra trên chân P1.1.

  1. Khởi tạo Timer 0: TMOD = #01H: Timer 0 được cấu hình ở chế độ 1 (16-bit timer).
  2. Giá trị nạp cho Timer 0: TH0 = #3CH và TL0 = #0B0H. Giá trị này cần được chuyển đổi sang số thập phân để tính toán. Giá trị ban đầu của timer là: (3C * 256) + B0 = (60 * 256) + 176 = 15360 + 176 = 15536.
  3. Tính toán thời gian đếm: Timer 16-bit có thể đếm từ 0 đến 65535. Vậy số xung clock cần thiết để tràn timer là: 65536 - 15536 = 50000 xung.
  4. Giả sử tần số clock của vi điều khiển là 12MHz: Chu kỳ của một xung clock là 1 / 12MHz = 1 / (12 * 10^6) giây = 0.0833 µs. Vì Timer 0 được cấu hình ở chế độ 1 (16-bit), bộ chia tần số là 12. Do đó, thời gian cho một xung timer là 1 µs.
  5. Thời gian để Timer 0 tràn: Thời gian tràn = 50000 * 1µs = 50000µs = 50ms.
  6. Tạo sóng vuông: Chân P1.1 được đảo trạng thái (CPL P1.1) mỗi khi Timer 0 tràn. Điều này có nghĩa là thời gian ở mức cao và thời gian ở mức thấp bằng nhau. Do đó, chu kỳ của sóng vuông là gấp đôi thời gian tràn của Timer 0. Chu kỳ = 2 * 50ms = 100ms.

Vậy, chương trình này tạo ra sóng vuông có chu kỳ 100ms trên chân P1.1.

Câu hỏi liên quan