Title Image

Blog Logo

Bài 12. 8051 Timer Mode 0

🌱 Bài 12. 8051 Timer Mode 0

    Cần đọc trước Bài viết về Timer!

    Với bit M1:M0 = 0:0 thì Timer hoạt động ở chế độ 0 - 13-bit Timer.

    Để biết một thành phần làm việc như thế nào, cần phải xem phần cứng của nó trong VĐK. (Có trong MCS51 - User Manual phần Hardware Description) - Tài liệu này chương 5-13, tài liệu scan nên hơi mờ -  http://web.mit.edu/6.115/www/document/8051.pdf

    🧐🧐🧐 Mình mô tả ở hình bên dưới 😃

  • Chọn dạng đếm thời gian Timer hoặc đếm sự kiện Counter bằng cách đặt bit C/T bằng 0 hoặc 1.
    🧐🧐 bộ Timer được cấp xung = tần số thạch anh/12
  • Kích hoạt bộ đếm bằng cách đặt TRx = 1
    (Gate = 0 hoặc INTx = 1).
  • Thanh ghi 8 bit THx và 5 bit thấp của TLx tạo thành một bộ đếm 13 bit.
    👉 2 thanh ghi này sẽ được đặt giá trị trước bằng phần mềm. Bộ đếm sẽ đếm từ 0 -> giá trị đặt này.
    👉 13 bit -> dải đếm (0 - (2^13 - 1)) = (0 - 8191)
    👉 3 bit cao của TLx = 0.
  • Khi Timer đạt đến giá trị đặt (tràn timer), cờ TFx = 1.
    Dùng cờ này để biết khi nào timer tràn -> tạo trễ thời gian khác chính xác.
    Có thể reset nó bằng phần mềm 😃

    👉 Tính trễ thời gian = thanh ghi 13-bit

    Chẳng hạn, muốn tạo trễ 1ms, thạch anh ngoài 12MHz.

        Qua bộ /12, clock timer = 12MHz/12 = 1MHz

        ➤ chu kỳ máy = 1/1MHz = 1us.

         Để đạt 1ms thì cần đếm:

            count = 1ms/1us = 1000 lần.

        ➤ Tính chính xác giá trị nạp:

        👉 (max - count) +1 + thời gian trễ hàm

                    max = 2^13 - 1 = 8191

        thời gian trễ hàm này có thể tính tương đối!!

    VD: viết hàm delay có khoảng 5 lệnh -> 10 chu kỳ máy thực hiện.

        Giá trị nạp = (8191 - 1000) + 1 + 10 = 7202 = 0x1C22

        0x1C22 = 0b 0001 1100 0010 0010 (13-bit được in đậm)

         THx = 8 bit đầu phần in đậm, TLx = 000 + 5 bit cuối

                TLx = 0b 0000 0010 = 0x02

                THx = 0b 1110 0001 = 0xE1

    👉 Thực hiện một hàm trễ thời gian

    Ví dụ, tạo trễ 1ms với Timer 0 - Mode 0. Thạch anh ngoài 12MHz.

    Ta thực hiện các bước sau:

  • Đặt giá trị cho thanh ghi TMOD để chọn Mode 0 - Timer 0
    GATE = C/T = M1 = M0 = 0 -> TMOD = 0x00
  • Tính toán và nạp giá trị cho THx và TLx
    Ví dụ trên: TL0 = 0x02, TH0 = 0xE1
  • Bắt đầu timer bằng cách đặt TRx = 1 (ở đây là TR0)
  • Kiểm tra khi cờ TFx = 1 để biết khi timer đếm xong
    => while (TF0 == 0);
  • Khi Timer tràn, dừng timer bằng cách reset TRx = 0
  • Xóa cờ báo TFx = 0

    👉 Cách sử dụng

    Hàm delay bằng timer cũng có cách sử dụng giống như hàm delay thông thường. Tuy nhiên, nó có những ưu điểm so với hàm delay thông thường.

    Hàm delay thông thường chỉ là cho CPU làm một số lệnh vô nghĩa để tạo trễ thời gian.

    Timer thì chính xác hơn, dễ kiểm soát hơn, và trong thời gian delay, MCU vẫn có thể làm những việc khác.

    Code hàm delay = timer:


>>>= Follow ngay =<<<

💚 Kênh Youtube Lập trình - Điện tử 💚

Để nhận được những bài học miễn phí mới nhất nhé 😊

Xem Bài 11                            Xem Bài 13

Đăng nhận xét

0 Nhận xét