Hệ thống nhúng - Bộ hẹn giờ / Bộ đếm
A timerlà loại đồng hồ chuyên dụng dùng để đo các khoảng thời gian. Bộ đếm thời gian đếm từ 0 trở lên để đo thời gian đã trôi qua thường được gọi làstopwatch. Nó là một thiết bị đếm ngược từ một khoảng thời gian cụ thể và được sử dụng để tạo ra độ trễ thời gian, ví dụ: đồng hồ cát là bộ đếm thời gian.
A counterlà một thiết bị lưu trữ (và đôi khi hiển thị) số lần một sự kiện hoặc quá trình cụ thể đã xảy ra liên quan đến tín hiệu đồng hồ. Nó được sử dụng để đếm các sự kiện xảy ra bên ngoài vi điều khiển. Trong điện tử, bộ đếm có thể được thực hiện khá dễ dàng bằng cách sử dụng các mạch kiểu thanh ghi như một flip-flop.
Sự khác biệt giữa Bộ hẹn giờ và Bộ đếm
Các điểm phân biệt bộ đếm thời gian với bộ đếm như sau:
Hẹn giờ | Quầy tính tiền |
---|---|
Thanh ghi tăng dần cho mỗi chu kỳ máy. | Thanh ghi được tăng dần khi xem xét quá trình chuyển đổi từ 1 đến 0 tương ứng với chân đầu vào bên ngoài (T0, T1). |
Tốc độ đếm cực đại bằng 1/12 tần số dao động. | Tốc độ đếm tối đa là 1/24 tần số dao động. |
Bộ đếm thời gian sử dụng tần số của đồng hồ bên trong và tạo ra độ trễ. | Bộ đếm sử dụng tín hiệu bên ngoài để đếm xung. |
Bộ định thời của 8051 và các thanh ghi liên kết của chúng
8051 có hai bộ định thời, Bộ định thời 0 và Bộ định thời 1. Chúng có thể được sử dụng như bộ định thời hoặc bộ đếm sự kiện. Cả Timer 0 và Timer 1 đều có độ rộng 16-bit. Vì 8051 tuân theo kiến trúc 8 bit, mỗi 16 bit được truy cập dưới dạng hai thanh ghi riêng biệt byte thấp và byte cao.
Hẹn giờ 0 Đăng ký
Thanh ghi 16-bit của Timer 0 được truy cập dưới dạng byte thấp và byte cao. Thanh ghi byte thấp được gọi là TL0 (byte thấp của Timer 0) và thanh ghi byte cao được gọi là TH0 (byte cao của Timer 0). Các thanh ghi này có thể được truy cập giống như bất kỳ thanh ghi nào khác. Ví dụ, hướng dẫnMOV TL0, #4H di chuyển giá trị vào byte thấp của Timer # 0.
Bộ đếm thời gian 1
Thanh ghi 16 bit của Timer 1 được truy cập dưới dạng byte thấp và byte cao. Thanh ghi byte thấp được gọi là TL1 (Timer 1 byte thấp) và thanh ghi byte cao được gọi là TH1 (Timer 1 byte cao). Các thanh ghi này có thể được truy cập giống như bất kỳ thanh ghi nào khác. Ví dụ, hướng dẫnMOV TL1, #4H di chuyển giá trị vào byte thấp của Timer 1.
Đăng ký TMOD (Chế độ hẹn giờ)
Cả Bộ hẹn giờ 0 và Bộ định thời 1 đều sử dụng cùng một thanh ghi để đặt các chế độ hoạt động của bộ hẹn giờ khác nhau. Nó là một thanh ghi 8 bit, trong đó 4 bit thấp hơn được dành cho Timer 0 và 4 bit trên cho Timer. Trong mỗi trường hợp, 2 bit dưới được sử dụng để đặt trước chế độ hẹn giờ và 2 bit trên được sử dụng để chỉ định vị trí.
Gate - Khi được đặt, bộ định thời chỉ chạy trong khi INT (0,1) ở mức cao.
C/T - Bit chọn Counter / Timer.
M1 - Chế độ bit 1.
M0 - Chế độ bit 0.
CÁNH CỔNG
Mỗi bộ đếm thời gian đều có phương tiện bắt đầu và dừng. Một số bộ hẹn giờ thực hiện điều này bằng phần mềm, một số bộ đếm thời gian bằng phần cứng và một số bộ hẹn giờ có cả phần mềm và phần cứng điều khiển. Bộ định thời 8051 có cả phần mềm và phần cứng điều khiển. Việc bắt đầu và dừng bộ đếm thời gian được điều khiển bằng phần mềm sử dụng hướng dẫnSETB TR1 và CLR TR1 cho bộ hẹn giờ 1 và SETB TR0 và CLR TR0 cho bộ định thời 0.
Lệnh SETB được sử dụng để khởi động nó và nó bị dừng lại bởi lệnh CLR. Các hướng dẫn này bắt đầu và dừng bộ định thời miễn là GATE = 0 trong thanh ghi TMOD. Bộ hẹn giờ có thể được khởi động và dừng bởi một nguồn bên ngoài bằng cách đặt GATE = 1 trong thanh ghi TMOD.
C / T (ĐỒNG HỒ / HẸN GIỜ)
Bit này trong thanh ghi TMOD được sử dụng để quyết định xem bộ định thời có được sử dụng làm delay generator hoặc một event manager. Nếu C / T = 0, nó được sử dụng như một bộ định thời để tạo độ trễ bộ định thời. Nguồn đồng hồ để tạo ra thời gian trễ là tần số tinh thể của 8051. Nếu C / T = 0, tần số tinh thể gắn vào 8051 cũng quyết định tốc độ mà bộ định thời 8051 tích tắc theo một khoảng thời gian đều đặn.
Tần số bộ định thời luôn bằng 1/12 tần số của tinh thể được gắn vào 8051. Mặc dù các hệ thống dựa trên 8051 khác nhau có tần số XTAL từ 10 MHz đến 40 MHz, chúng tôi thường làm việc với tần số XTAL là 11,0592 MHz. Đó là do tốc độ truyền cho giao tiếp nối tiếp của 8051.XTAL = 11,0592 cho phép hệ thống 8051 giao tiếp với PC mà không có lỗi.
M1 / M2
M1 | M2 | Chế độ |
---|---|---|
0 | 0 | Chế độ hẹn giờ 13 bit. |
0 | 1 | Chế độ hẹn giờ 16 bit. |
1 | 0 | Chế độ tải lại tự động 8-bit. |
1 | 1 | Chế độ tràn. |
Các chế độ hẹn giờ khác nhau
Chế độ 0 (Chế độ hẹn giờ 13 bit)
Cả Bộ định thời 1 và Bộ định thời 0 ở Chế độ 0 đều hoạt động dưới dạng bộ đếm 8 bit (với bộ đếm trước chia cho 32). Thanh ghi bộ định thời được cấu hình như một thanh ghi 13 bit bao gồm tất cả 8 bit của TH1 và 5 bit thấp hơn của TL1. 3 bit trên của TL1 là không xác định và nên được bỏ qua. Đặt cờ chạy (TR1) không xóa sổ đăng ký. Cờ ngắt bộ định thời TF1 được thiết lập khi số đếm chuyển từ tất cả 1s đến tất cả 0s. Chế độ 0 hoạt động tương tự đối với Bộ định thời 0 cũng như đối với Bộ định thời 1.
Chế độ 1 (Chế độ hẹn giờ 16 bit)
Chế độ hẹn giờ "1" là bộ định thời 16 bit và là chế độ thường được sử dụng. Nó hoạt động theo cách tương tự như chế độ 13 bit ngoại trừ tất cả 16 bit đều được sử dụng. TLx được tăng bắt đầu từ 0 đến tối đa 255. Sau khi đạt đến giá trị 255, TLx đặt lại thành 0 và sau đó THx được tăng lên 1. Vì là bộ định thời 16 bit đầy đủ, bộ định thời có thể chứa tới 65536 giá trị riêng biệt và nó sẽ tràn về 0 sau 65.536 chu kỳ máy.
Chế độ 2 (Tự động tải lại 8 bit)
Cả hai thanh ghi bộ định thời được cấu hình như bộ đếm 8 bit (TL1 và TL0) với tải lại tự động. Tràn từ TL1 (TL0) thiết lập TF1 (TF0) và cũng tải lại TL1 (TL0) với nội dung của Th1 (TH0), được đặt trước bằng phần mềm. Tải lại không thay đổi TH1 (TH0).
Lợi ích của chế độ tự động tải lại là bạn có thể đặt bộ đếm thời gian luôn chứa giá trị từ 200 đến 255. Nếu bạn sử dụng chế độ 0 hoặc 1, bạn sẽ phải kiểm tra mã để xem tràn và trong trường hợp đó, đặt lại bộ đếm thời gian thành 200. Trong trường hợp này, các hướng dẫn quý giá sẽ kiểm tra giá trị và / hoặc tải lại. Trong chế độ 2, bộ vi điều khiển sẽ thực hiện việc này. Khi bạn đã định cấu hình bộ hẹn giờ ở chế độ 2, bạn không phải lo lắng về việc kiểm tra xem bộ hẹn giờ có bị tràn hay không, cũng như không phải lo lắng về việc đặt lại giá trị vì phần cứng vi điều khiển sẽ làm tất cả cho bạn. Chế độ tự động tải lại được sử dụng để thiết lập tốc độ truyền chung.
Chế độ 3 (Chế độ hẹn giờ tách)
Chế độ hẹn giờ "3" được gọi là split-timer mode. Khi Timer 0 được đặt ở chế độ 3, nó sẽ trở thành hai bộ định thời 8 bit riêng biệt. Bộ định thời 0 là TL0 và Bộ định thời 1 là TH0. Cả bộ định thời đều đếm từ 0 đến 255 và trong trường hợp bị tràn, hãy đặt lại về 0. Tất cả các bit của Bộ định thời 1 bây giờ sẽ được gắn với TH0.
Khi Bộ định thời 0 ở chế độ phân chia, Bộ định thời 1 thực (tức là TH1 và TL1) có thể được đặt ở chế độ 0, 1 hoặc 2, nhưng nó không thể được bắt đầu / dừng vì các bit làm điều đó hiện được liên kết với TH0. Bộ đếm thời gian thực 1 sẽ được tăng lên với mỗi chu kỳ máy.
Khởi tạo bộ hẹn giờ
Quyết định chế độ hẹn giờ. Hãy xem xét một bộ định thời 16 bit chạy liên tục và không phụ thuộc vào bất kỳ chân bên ngoài nào.
Khởi tạo TMOD SFR. Sử dụng 4 bit thấp nhất của TMOD và xem xét Timer 0. Giữ hai bit, GATE 0 và C / T 0, là 0, vì chúng ta muốn bộ định thời độc lập với các chân bên ngoài. Vì chế độ 16 bit là chế độ hẹn giờ 1, xóa T0M1 và đặt T0M0. Thực tế, bit duy nhất để bật là bit 0 của TMOD. Bây giờ thực hiện hướng dẫn sau:
MOV TMOD,#01h
Bây giờ, Bộ định thời 0 đang ở chế độ bộ định thời 16 bit, nhưng bộ định thời không chạy. Để khởi động bộ hẹn giờ ở chế độ đang chạy, hãy đặt bit TR0 bằng cách thực hiện lệnh sau:
SETB TR0
Bây giờ, Timer 0 sẽ ngay lập tức bắt đầu đếm, được tăng lên một lần mỗi chu kỳ máy.
Đọc hẹn giờ
Bộ định thời 16 bit có thể được đọc theo hai cách. Đọc giá trị thực của bộ định thời dưới dạng số 16 bit hoặc bạn phát hiện khi bộ hẹn giờ bị tràn.
Phát hiện tràn bộ hẹn giờ
Khi bộ định thời tràn từ giá trị cao nhất của nó đến 0, bộ vi điều khiển sẽ tự động đặt bit TFx trong thanh ghi TCON. Vì vậy, thay vì kiểm tra giá trị chính xác của bộ định thời, bit TFx có thể được kiểm tra. Nếu TF0 được đặt, thì Timer 0 đã bị tràn; nếu TF1 được đặt, thì Timer 1 đã bị tràn.