Lập trình Timer/Counter (Bộ Định Thời/Bộ Đếm) với 8051

Related Articles

Hướng Dẫn Chi Tiết Cách Lập trình Timer/Counter trong 8051

Timer / Counter ( bộ định thời / bộ đếm ) là một trong những ngoại vi thông dụng mà bất kỳ dòng vi tinh chỉnh và điều khiển nào cũng có .

Timer / Counter được sử dụng nhiều nhất trong những ứng dụng như quét led, tạo xung pwm, đo tần số, định thời …

Khi học tập, nghiên cứu về bất kì một dòng vi điều khiển nào đó, thì Lập trình Timer/Counter là một trong những ngoại vi quan trọng mà người học chắc chắn phải tìm hiểu.

Có nhiều dòng điều khiển cấp cao hơn so với dòng 8051. Tuy nhiên, việc nắm được nguyên lý hoạt động của Timer/Counter trong 8051, ‘sẽ là nền tảng kiến thức căn bản để đi sâu tìm hiểu Lập trình Timer/Counter trên các dòng vi điều khiển cấp cao hơn.

Vậy Lập trình Timer/Counter là gì?

Thực chất Timer / Counter là một bộ đếm, đếm xung nhịp ( xung clock ) .

Nó chứa những thanh ghi chứa giá trị đếm và thanh ghi tinh chỉnh và điều khiển hoạt động giải trí đếm này. Nguồn xung nhịp được chọn để đếm hoàn toàn có thể là nguồn xung nhịp nội ( bên trong vi tinh chỉnh và điều khiển ), hoặc hoàn toàn có thể lập trình chọn nguồn xung nhịp bên ngoài ( đưa vào trên một chân nào đó ) .

Người dùng có thể Lập trình Timer/Counter bắt đầu đếm từ 1 giá trị nào đó bằng cách ghi giá trị đó vào thanh ghi chứa giá trị đếm. Khi giá trị đếm vượt quá giá trị tối đa mà thanh ghi chứa giá trị của Timer/Counter thì xuất hiện hiện tượng gọi là “tràn (over flow)”.

Các thanh ghi điều khiển và tinh chỉnh Timer / Counter trong 8051 .

Thanh ghi chứa giá trị đếm.

Mỗi bộ Timer / Counter trong 8051 có 1 thanh ghi 16 bit chứa giá trị đếm, được truy vấn ( đọc / ghi ) dưới 2 thanh ghi 8 bit độc lập gọi là byte thấp ( TLx ), byte cao ( THx ) .

Thanh ghi chứa giá trị đếm của Timer/Counter 0.Thanh ghi chứa giá trị đếm của Timer/Counter 1.

Thanh ghi thiết lập chính sách hoạt động giải trí : TMOD .

Cả 2 bộ Timer / Counter 0 và Timer / Counter 1 đều dùng chung 1 thanh ghi TMOD để thiết lập những chính sách hoạt đông .

TMOD là thanh ghi 8 bit. 4 bit thấp sử dụng để thiết lập chính sách cho Timer / Counter 0, còn 4 bit cao được sử dụng để thiết lập chính sách hoạt động giải trí cho Timer 1 .

Các bit M1, M0 được dùng để thiết lập chế độ hoạt động cho các bộ Timer/Counter.Các chế độ hoạt động của Timer/Counter được mô tả như trong bảng trên.Bit C / T được sử dụng để chon xung clock .

Khi bit C / T = 0. Bộ Timer / Counter hoạt động giải trí dựa vào xung clock nội bên trong chip. Tần số của xung clock này được tính bằng 1/12 của tần số thạch anh. Ví dụ nếu sử dụng thạch anh 12MH z, thì tần số của Timer / Counter sẽ là ( 1/12 ) * 12MH z = 1MH z .

Khi bit C / T = 1. Bộ Timer / Counter hoạt động giải trí dựa vào xung clock cấp từ bên ngoài đưa vào trên chân T0 ( sử dụng cho Timer / Counter 0 ), chân T1 ( sử dụng cho Timer / Counter 1 ) .

Bit GATE được sử dụng để xác lập việc điều khiển và tinh chỉnh khởi động / dừng hoạt động giải trí của bộ Timer .

Nếu GATE = 0. Bộ Timer / Counter được khởi động bằng cách set bit TRx lên 1. ( TR0 cho Timer / Counter 0, TR1 cho Timer / Counter 1 ). Bộ Timer / Counter dừng hoạt động giải trí nếu bit TRx được xóa về 0 .

Nếu GATE = 1. Bộ Timer / Counter được khởi động bằng cách set bit TRx lên 1 và chân INTx được set lên mức 1. Ngược lại nếu TRx không được set lên 1 hoặc chân INTx không được set lên 1 thì bộ Timer / Counter dừng hoạt động giải trí .

Trong khoanh vùng phạm vi bài học kinh nghiệm này, tất cả chúng ta sẽ viết những chương trình với bit GATE = 0. có nghĩa là không cần khởi động và dừng những bộ định thời bằng phần cứng từ bên ngoài .

Thanh ghi điều khiển và tinh chỉnh và trạng thái : TCON .

Thanh ghi TCON đã được đề cập tròng bài 5 với các bit sử dụng để thiết lập chế độ cho ngắt ngoài. Tròng bài này chúng ta tiếp tục tìm hiểu thanh ghi TCON với các bit sử dụng cho Timer/Counter.

Có 4 bit trong thanh ghi TCON được sử dụng cho bộ Timer / Counter .

Có 2 bit để điều khiển khởi động/dừng hoạt động của Timer/Counter. Đó là:

Bit TR0 dùng để khởi động / dừng Timer / Counter 0. TR0 = 1 : khởi động. TR0 = 0 : dừng

Bit TR1 dùng để khởi động / dừng Timer / Counter 1. TR1 = 1 : khởi động. TR1 = 0 : dừng

Có 2 bit cờ báo trạng thái tràn của bộ Timer / Counter. Đó là :

Bit TF0 báo tràn cho bộ Timer / Counter 0. Khi giá trị trong thi ghi chứa giá trị đếm TL0, TH0 bị tràn, thì bit TF0 sẽ được bật lên 1 .

Bit TF1 báo tràn cho bộ Timer / Counter 1. Khi giá trị trong thi ghi chứa giá trị đếm TL1, TH1 bị tràn, thì bit TF1 sẽ được bật lên 1 .

Cả hai bit TF0, TF1 được bật bằng phần cứng, và phải xóa bằng ứng dụng .

3 bước Lập trình Timer / Counter .

Bước 1: Ghán giá trị cho thanh ghi TMOD để thiết lập chế độ hoạt động cho bộ Timer/Counter. Ví dụ, mình muốn sử dụng Timer/Counter 0 ở chế độ 16 bit (M1 = 0, M0 = 1), sử dụng nguồn clock nội (C/T = 0), mình sẽ ghán cho thanh ghi TMOD giá trị: 0x01. (TMOD = 0x01).

Bước 2: Khởi tạo giá trị cho thanh ghi chứa giá trị đếm TLx, THx.

–  Mặc định giá trị của 2 thanh ghi TLx, THx sẽ là bằng 0. Nghĩa là khi Timer/Counter hoạt động, bộ đếm sẽ đếm từ 0 cho đến 65535 (với chế độ 16 bit) thì xảy ra tràn. Nghĩa là bộ đếm đếm được (65535 – 0 + 1 =65536 lần) thì xảy ra tràn. Nhưng bây giờ mình chỉ muốn cho bộ đếm đếm 100 lần thì tràn. Vậy mình phải ghán giá trị cho thanh ghi TLx, THx để nó bắt đầu đếm từ giá trj mà mình gán, cho tới khi tràn (=65535) là được 100 lần đếm. Vậy mình sẽ phải gán cho TLx, THx giá trị: 65536 -100 = 65436. Do phải gán cho các thanh ghi 8 bit, nên mình phải đổi số 65436 ra thành 2 byte thấp vào cao để gán cho TLx, THx. 65436 đổi sang dạng hexa ta được: 0xFF9C. Do vậy mình sẽ gán TLx = 0x9C và THx = 0xFF.

– Việc đo lường và thống kê giá trị gán cho thanh ghi TLx, THx rất quan trọng. Nó nhu yếu bạn phải biết tần số hoạt động giải trí của Timer / Counter, thời hạn bạn muốn xảy ra sự kiện tràn. Từ đó những bạn tính ra số lần bộ Timer / Counter cần đếm ( gọi là n ) để giá trị bị tràn. Sau đó lấy 65536 – n ( với chính sách 16 bit ), được giá trị cần gán cho TLx, THx .

– Lấy 1 ví dụ thế này : Mình cần setup Timer / Counter 0 hoạt động giải trí để cứ 10 ms thì sẽ xảy ra tràn. Biết thạch anh là 12MH z. Tính giá trị cần gán cho thanh ghi TL0, TH0 .

– Với thạch anh 12MH z, ==> tần số hoạt động giải trí của Timer / Counter là : ( 1/12 ) * 12 = 1MH z. nghĩa là cứ 1 xung nhịp ( 1 us ) thì bộ đếm tăng thêm 1 giá trị .

  • ==> Để 10 ms = 10000 us xảy ra tràn thì cần cho bộ đếm đếm 10000 lần ( n = 10000 ) .
  • ==> giá trị gán cho TL0, TH0 : 65536 – 10000 = 55536 = 0 xD8F0
  • ==> TL0 = 0 xF0, TH0 = 0 xD8 .

Bước 3. Bật bit TRx để khởi động bộ Timer/Counter.

Như vậy, tất cả chúng ta đã khám phá về Lập trình Timer / Counter, những thanh ghi, cũng như cách thiết lập cho những thanh ghi của bộ Timer / Counter .

Cùng khám phá Hoạt động của Timer / Counter trong những ví dụ đơn cử để hiểu rõ hơn về nó ở phần 2 cuả bài viết nhé ! Hoạt Động của Timer / Counter

Tham khảo những Khóa học lập trình PLC tại PLCTECH :

Mọi tư vấn về Tự động hóa, sung sướng liên hệ :

TRUNG TÂM TỰ ĐỘNG HÓA CÔNG NGHIỆP PLCTECH

Địa Chỉ : Số 11, ngõ 2E Dịch Vọng, CG cầu giấy – TP.HN

Liên hệ: Mr Chính 0984 957 127

Website : https://blogchiase247.net/

Fanpage : https://www.facebook.com/PLCTechHN/

More on this topic

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Advertismentspot_img

Popular stories