Giáo trình Vi xử lý - Chương 4: Hoạt động của Timer (ĐH Công Nghiệp)

Giáo trình về vi xử lý phần 2 phạm quang trí, biên soạn theo chương trình đào tạo chuẩn, hệ thống hóa kiến thức từ cơ bản đến nâng cao.

Chuyên ngành

Vi xử lý

Người đăng

Ẩn danh

Thể loại

Giáo trình
127
3
0

Phí lưu trữ

35 Point

Mục lục chi tiết

4. CHƯƠNG 4: HOẠT ĐỘNG CỦA BỘ ĐỊNH THỜI (TIMER)

4.1. MỞ ĐẦU

4.2. THANH GHI CHẾ ĐỘ ĐỊNH THỜI (TMOD)

4.3. THANH GHI ĐIỀU KHIỂN ĐỊNH THỜI (TCON)

4.4. CÁC CHẾ ĐỘ ĐỊNH THỜI VÀ CỜ TRÀN

4.4.1. Chế độ định thời 13 bit (Chế độ 0)

4.4.2. Chế độ định thời 16 bit (Chế độ 1)

4.4.3. Chế độ định thời 8 bit tự nạp lại (Chế độ 2)

4.4.4. Chế độ định thời chia xẻ (Chế độ 3)

4.5. NGUỒN XUNG CLOCK CHO BỘ ĐỊNH THỜI

4.6. KHỞI ĐỘNG, DỪNG VÀ ĐIỀU KHIỂN CÁC BỘ ĐỊNH THỜI

4.7. KHỞI ĐỘNG VÀ TRUY XUẤT THANH GHI ĐỊNH THỜI

4.8. CÁC KHOẢNG THỜI GIAN ĐỊNH THỜI

4.9. CÁC BƯỚC CƠ BẢN KHỞI ĐỘNG TIMER VÀ COUNTER

Tóm tắt

I. Giới thiệu tổng quan Khám phá Timer trong Giáo trình Vi xử lý và vai trò thiết yếu

Trong thế giới của vi điều khiểnhệ thống nhúng, bộ định thời (Timer) đóng vai trò trung tâm, quyết định khả năng thực hiện các tác vụ theo thời gian một cách chính xác. Từ việc tạo ra các khoảng trễ đơn giản đến điều khiển các sự kiện phức tạp, Timer là một thành phần không thể thiếu. Đặc biệt, Giáo trình Vi xử lý: Timer và Ứng dụng là tài liệu cơ bản, cung cấp nền tảng vững chắc để hiểu sâu về nguyên lý hoạt động và cách triển khai các ứng dụng vi xử lý thực tiễn. Nắm bắt được cách hoạt động của bộ định thời không chỉ giúp phát triển các hệ thống ổn định mà còn mở ra cánh cửa cho nhiều sáng kiến trong lĩnh vực mạch điện tử. Việc sử dụng Timer đúng cách sẽ tối ưu hóa hiệu suất và độ tin cậy của các thiết bị điện tử. Khả năng định thời gian và đếm sự kiện giúp các kỹ sư xây dựng các hệ thống tự động hóa, điều khiển và giám sát một cách hiệu quả. Đây là một kỹ năng cơ bản mà bất kỳ người học hay kỹ sư nào làm việc với kiến trúc vi xử lý cũng cần phải thành thạo. Việc tiếp cận qua các tài liệu vi xử lý chuyên sâu sẽ củng cố kiến thức này. Các phần tiếp theo sẽ đào sâu vào từng khía cạnh của Timer để cung cấp một cái nhìn toàn diện nhất.

1.1. Bộ định thời là gì Khái niệm cơ bản và nguyên lý hoạt động

Theo "Giáo trình Vi xử lý, Chương 4: Hoạt động của bộ định thời (Timer)" từ Trường Đại học Công nghiệp TP. HCM, bộ định thời là một chuỗi các Flip-Flop (FF), mỗi FF hoạt động như một mạch chia 2. Ngõ vào của bộ này nhận tín hiệu xung clock từ nguồn xung. Tần số timer ngõ ra bằng tần số xung ngõ vào chia cho 2^N (với N là số bit của timer). Giá trị nhị phân trong các FF thể hiện số đếm của các xung clock từ khi bộ định thời bắt đầu đếm. Khi số đếm chuyển từ giá trị lớn nhất xuống giá trị nhỏ nhất (ví dụ từ FFFFH xuống 0000H cho timer 16-bit), hiện tượng tràn xảy ra và cờ tràn (TF) sẽ được đặt lên 1. Nguyên lý này là nền tảng cho mọi ứng dụng vi xử lý sử dụng bộ định thời, từ việc tạo trễ đến việc đo lường các sự kiện.

1.2. Phân biệt Timer và Counter Nguồn xung clock và mục đích sử dụng

Bộ định thời (Timer) và bộ đếm (Counter) trong vi điều khiển về cơ bản có cùng kiến trúc phần cứng nhưng khác nhau về nguồn xung clock và mục đích sử dụng. Khi C/T = 0, bộ định thời hoạt động như một Timer, nhận xung clock từ mạch dao động nội trên chip (thường là fOSC/12 đối với 8051). Chức năng chính là định thời gian. Ngược lại, khi C/T = 1, nó hoạt động như một Counter, nhận xung clock từ xung kích thích bên ngoài (tại các chân T0 hoặc T1 của 8051). Chức năng chính là đếm sự kiện, tức là đếm số lần xuất hiện của các kích thích từ bên ngoài. Sự chuyển trạng thái từ 1 xuống 0 tại chân T0 hoặc T1 được coi là một sự kiện (một xung).

1.3. Tổng quan về kiến trúc vi xử lý tích hợp bộ đếm bộ định thời

Các kiến trúc vi xử lý hiện đại, đặc biệt là các dòng vi điều khiển như 8051 timer, PIC timer, AVR timer, và STM32 timer, đều tích hợp sẵn các bộ định thời đa năng. Các bộ định thời này thường bao gồm các thanh ghi điều khiển (ví dụ: TMOD, TCON trong 8051), các thanh ghi chứa giá trị đếm (TLx, THx), và các cờ báo trạng thái (TFx). Thiết kế này cho phép người lập trình timer linh hoạt cấu hình timer cho nhiều chế độ hoạt động timer khác nhau, từ định thời đơn giản đến tạo ra các xung phức tạp như xung PWM. Sự tích hợp này giúp giảm thiểu chi phí phần cứng và tối ưu hóa hiệu suất cho các hệ thống nhúng.

II. Nắm vững cấu hình Timer Bí quyết khởi tạo bộ định thời chuẩn xác cho vi điều khiển 8051

Việc cấu hình Timer đúng cách là bước đầu tiên và quan trọng nhất để đảm bảo bộ định thời trong vi điều khiển hoạt động như mong muốn. Đặc biệt với dòng 8051 timer, sự hiểu biết sâu sắc về các thanh ghi timer như TMOD và TCON là chìa khóa. Các tài liệu vi xử lý thường nhấn mạnh rằng việc thiết lập sai các bit trong các thanh ghi này có thể dẫn đến kết quả định thời không chính xác hoặc thậm chí không hoạt động. Để đạt được hiệu suất tối ưu và độ chính xác cao trong lập trình timer, việc nắm vững từng bit cấu hình là điều bắt buộc. Một kỹ sư hệ thống nhúng cần phải có khả năng diễn giải và thiết lập các thanh ghi này một cách tự tin. Bên cạnh đó, việc tính toán tần số timerchu kỳ timer dựa trên tần số thạch anh cũng là một kỹ năng cơ bản không thể bỏ qua, giúp đạt được các khoảng thời gian tạo trễ bằng Timer hoặc tần số tạo xung PWM mong muốn. Phần này sẽ đi sâu vào cách thức thiết lập các thanh ghi này, cung cấp một hướng dẫn lập trình timer chi tiết cho các bạn đọc.

2.1. Tìm hiểu thanh ghi TMOD Thiết lập chế độ hoạt động timer cho 8051 timer

Thanh ghi TMOD (Timer Mode Register) là nơi chứa các bit dùng để thiết lập chế độ hoạt động timer cho bộ định thời 0 và bộ định thời 1 trong 8051 timer. Thanh ghi này thường được nạp giá trị một lần duy nhất khi bắt đầu chương trình. Các bit quan trọng bao gồm M0, M1 (chọn chế độ), C/T (chọn chức năng đếm hoặc định thời), và GATE (điều khiển cổng). Ví dụ, GATE=0 cho phép điều khiển bằng phần mềm (bit TRx), trong khi GATE=1 cho phép điều khiển bằng phần cứng (chân INTx). Hiểu rõ cấu trúc và chức năng của từng bit trong thanh ghi TMOD là yếu tố quyết định để cấu hình timer một cách chính xác theo yêu cầu của ứng dụng vi xử lý.

2.2. Thanh ghi TCON Điều khiển khởi động và cờ báo trạng thái bộ định thời

Thanh ghi TCON (Timer Control Register) chịu trách nhiệm điều khiển và báo trạng thái của bộ định thời 0 và bộ định thời 1. Các bit quan trọng trong thanh ghi TCON bao gồm các bit khởi động/dừng Timer (TRx) và các cờ báo tràn (TFx). Bit TRx (Timer Run) được dùng để khởi động (SETB TRx) hoặc dừng (CLR TRx) bộ định thời bằng phần mềm khi GATE=0. Cờ TFx (Timer Flag) được đặt lên 1 khi Timer tràn, báo hiệu rằng khoảng thời gian định trước đã kết thúc. Theo "Giáo trình Vi xử lý", sau khi xử lý sự kiện tràn, cần xóa cờ TFx (CLR TFx) để chuẩn bị cho lần định thời tiếp theo. Mặc dù TCON cũng chứa các bit liên quan đến ngắt ngoài (ITx, IEx), nhưng chúng không dùng để điều khiển trực tiếp bộ định thời.

2.3. Cách tính tần số timer và chu kỳ timer cho các bộ vi điều khiển

Việc tính toán tần số timerchu kỳ timer là bước thiết yếu để tạo trễ bằng Timer chính xác. Đối với các vi điều khiển 8051, khi hoạt động ở chế độ định thời (C/T=0), nguồn xung clock cho bộ định thời được lấy từ mạch dao động trên chip với tần số fTIMER = fOSC / 12, trong đó fOSC là tần số thạch anh. Từ đó, chu kỳ timer TTIMER = 1 / fTIMER. Ví dụ, với fOSC = 12 MHz, fTIMER = 1 MHz và TTIMER = 1 µs. Khi hoạt động ở chế độ đếm sự kiện (C/T=1), nguồn xung clock là xung kích thích bên ngoài, với tần số kích thích tối đa cho phép là fT0,T1(MAX) = fTIMER / 2. Những công thức này được đề cập chi tiết trong "Giáo trình Vi xử lý, Chương 4" và là nền tảng cho mọi lập trình timer.

III. Hướng dẫn chi tiết các chế độ hoạt động Timer Giải pháp tối ưu lập trình timer linh hoạt

Sự linh hoạt của Timer trong vi xử lý đến từ việc hỗ trợ nhiều chế độ hoạt động timer khác nhau, cho phép người lập trình timer lựa chọn giải pháp phù hợp nhất với từng ứng dụng vi xử lý cụ thể. Mỗi chế độ mang đến một cách thức hoạt động riêng biệt về số bit đếm, khả năng tự nạp lại hay chia sẻ tài nguyên, ảnh hưởng trực tiếp đến khả năng tạo trễ bằng Timer hay đếm sự kiện chính xác. Các tài liệu vi xử lý chuyên sâu về Timer thường phân tích kỹ lưỡng từng chế độ, cung cấp ví dụ minh họa cụ thể để người học có thể hình dung và áp dụng. Việc hiểu rõ từng chế độ hoạt động timer là then chốt để khai thác tối đa tiềm năng của bộ định thời trong các hệ thống nhúng. Phần này sẽ cung cấp một hướng dẫn lập trình timer chi tiết về bốn chế độ chính của 8051 timer, giúp độc giả có thể tối ưu hóa chương trình của mình.

3.1. Chế độ hoạt động Timer 0 và 1 Từ 13 bit đến 16 bit

Trong 8051 timer, chế độ hoạt động timer 0 là chế độ định thời 13-bit, sử dụng 8 bit của THx và 5 bit thấp của TLx. Số đếm dao động từ 0000H đến 1FFFH (0 đến 8191). Chế độ này thường được dùng cho các khoảng thời gian ngắn. Chế độ hoạt động timer 1 là chế độ định thời 16-bit, sử dụng toàn bộ 16 bit của THx và TLx, cho phép đếm từ 0000H đến FFFFH (0 đến 65535). Đây là chế độ phổ biến nhất để tạo trễ bằng Timer với độ chính xác cao cho các khoảng thời gian trung bình. Cả hai chế độ đều bắt đầu đếm lên từ giá trị nạp vào THx/TLx và đặt cờ tràn TFx=1 khi xảy ra tràn. Các "Giáo trình Vi xử lý" đều trình bày rõ ràng kiến trúc và cách lập trình timer cho hai chế độ này.

3.2. Chế độ hoạt động Timer 2 Ưu điểm của 8 bit tự nạp lại trong vi xử lý

Chế độ hoạt động timer 2 là chế độ định thời 8-bit tự nạp lại, một tính năng cực kỳ hữu ích trong vi xử lý. Ở chế độ này, chỉ thanh ghi TLx được dùng để đếm (từ 00H đến FFH), trong khi thanh ghi THx chứa giá trị sẽ được tự động nạp lại vào TLx khi tràn xảy ra. Điều này giúp tự động hóa quá trình tạo trễ bằng Timer và duy trì một chu kỳ định thời cố định mà không cần phần mềm phải nạp lại giá trị mỗi khi Timer tràn. Tính năng này đặc biệt có giá trị trong các ứng dụng vi xử lý đòi hỏi các sự kiện định kỳ, chẳng hạn như tạo xung PWM hoặc tạo tốc độ baud cho port nối tiếp, giảm gánh nặng cho CPU. "Giáo trình Vi xử lý" minh họa rõ cách cấu hình timer và lợi ích của chế độ này.

3.3. Chế độ hoạt động Timer 3 Phân chia Timer cho đa nhiệm vụ trong hệ thống nhúng

Chế độ hoạt động timer 3 là một chế độ độc đáo của 8051 timer, được gọi là chế độ chia sẻ. Ở chế độ này, bộ định thời 0 được chia thành hai bộ định thời 8-bit riêng biệt: một sử dụng TL0 (với cờ tràn TF0) và một sử dụng TH0 (với cờ tràn TF1). Điều này cho phép bộ định thời 0 thực hiện hai nhiệm vụ đếm hoặc định thời độc lập. Tuy nhiên, theo "Giáo trình Vi xử lý", khi Timer 0 hoạt động ở chế độ 3, bộ định thời 1 không thể hoạt động ở chế độ 3, mặc dù nó vẫn có thể hoạt động ở các chế độ 0, 1, 2. Chế độ này hữu ích trong các hệ thống nhúng cần tối đa hóa việc sử dụng tài nguyên Timer cho các tác vụ nhỏ và độc lập, tăng cường khả năng đa nhiệm của vi điều khiển.

IV. Từ tạo trễ bằng Timer đến tạo xung PWM Ứng dụng vi xử lý thực tiễn không thể bỏ qua

Khả năng tạo trễ bằng Timertạo xung PWM là hai trong số những ứng dụng vi xử lý quan trọng nhất của bộ định thời. Chúng là nền tảng cho vô số thiết bị và hệ thống mà chúng ta sử dụng hàng ngày, từ đồng hồ báo thức đơn giản đến các hệ thống điều khiển động cơ phức tạp. Việc thành thạo lập trình timer để đạt được các mục tiêu này không chỉ là một kỹ năng lập trình mà còn là một nghệ thuật trong mạch điện tử. Giáo trình Vi xử lý: Timer và Ứng dụng cung cấp nhiều ví dụ và bài tập thực hành giúp củng cố kiến thức này. Nắm vững các kỹ thuật này cho phép các kỹ sư thiết kế và triển khai các giải pháp hiệu quả cho các vấn đề thực tiễn trong hệ thống nhúng, mở rộng giới hạn của vi điều khiển. Ngoài ra, bộ định thời còn có vai trò then chốt trong việc xây dựng các chức năng thời gian thực RTC và khả năng đếm sự kiện từ các tín hiệu bên ngoài. Phần này sẽ khám phá sâu hơn các kỹ thuật và ví dụ điển hình.

4.1. Lập trình Timer hiệu quả Phương pháp tạo trễ bằng Timer chính xác

Để tạo trễ bằng Timer chính xác trong vi điều khiển, người lập trình timer cần nạp giá trị khởi tạo N vào các thanh ghi THx/TLx sao cho sau một khoảng thời gian mong muốn, Timer sẽ tràn. Công thức tổng quát được nêu trong "Giáo trình Vi xử lý" là N = - (fOSC / 12) * tDELAY, trong đó tDELAY là thời gian trễ mong muốn và fOSC là tần số thạch anh. Ví dụ, để tạo trễ 100 µs với fOSC = 12 MHz, giá trị cần nạp là N = -100. Có thể sử dụng các chế độ hoạt động timer khác nhau như chế độ 1 (16-bit) hoặc chế độ 2 (8-bit tự nạp lại) tùy thuộc vào độ dài của khoảng trễ. Đối với các khoảng trễ lớn hơn giới hạn của Timer, cần kết hợp Timer với các vòng lặp phần mềm (sử dụng thanh ghi điều khiển vòng lặp).

4.2. Khai thác Timer để tạo xung PWM và điều khiển thiết bị ngoại vi

Tạo xung PWM (Pulse Width Modulation) là một ứng dụng vi xử lý mạnh mẽ của Timer để điều khiển công suất cung cấp cho tải hoặc điều khiển tốc độ động cơ, độ sáng đèn LED. Kỹ thuật này sử dụng Timer để tạo ra một chuỗi xung vuông có tần số timer cố định nhưng có thể thay đổi độ rộng xung (chu kỳ làm việc). Bằng cách xen kẽ giữa trạng thái mức cao và mức thấp với các khoảng thời gian được định nghĩa bởi Timer, người lập trình timer có thể giả lập một điện áp analog. "Giáo trình Vi xử lý" cung cấp các ví dụ về cách sử dụng Timer 0 để tạo sóng vuông với tần số và chu kỳ làm việc mong muốn trên các chân I/O như P1.0. Điều này chứng tỏ vai trò không thể thiếu của bộ định thời trong việc giao tiếp với các thiết bị ngoại vi và điều khiển chính xác trong mạch điện tử.

4.3. Ứng dụng vi xử lý thời gian thực RTC và đếm sự kiện với bộ đếm

Ngoài việc tạo trễ bằng Timertạo xung PWM, bộ định thời còn là thành phần cốt lõi cho các chức năng thời gian thực RTC (Real-Time Clock) và đếm sự kiện. Khi hoạt động như một bộ đếm (Counter), nó có thể đếm số lần xuất hiện của các xung kích thích từ bên ngoài, ví dụ như từ một cảm biến hoặc công tắc. "Giáo trình Vi xử lý" minh họa cách cấu hình timer 0 làm bộ đếm 8-bit hoặc 16-bit để ghi nhận số xung. Chức năng này rất quan trọng trong các hệ thống nhúng để đo tần số, đo tốc độ hoặc theo dõi các sự kiện vật lý. Kết hợp với các kỹ thuật lập trình timer khác, bộ đếm giúp xây dựng các hệ thống giám sát và điều khiển tự động có khả năng phản ứng theo thời gian thực.

V. Khắc phục thách thức Đọc giá trị và quản lý ngắt Timer trong hệ thống nhúng hiệu quả

Trong quá trình lập trình timer cho các ứng dụng vi xử lý phức tạp, việc đọc giá trị từ các thanh ghi timer đang hoạt động và quản lý ngắt timer một cách hiệu quả là những thách thức không nhỏ. Đặc biệt trong hệ thống nhúng, nơi mà tính thời gian thực và độ chính xác được đặt lên hàng đầu, bất kỳ sai sót nào cũng có thể dẫn đến lỗi hệ thống nghiêm trọng. Giáo trình Vi xử lý: Timer và Ứng dụng không chỉ hướng dẫn cách khởi tạo mà còn cung cấp các giải pháp để giải quyết những vấn đề này, đảm bảo rằng bộ định thời hoạt động ổn định và tin cậy. Việc hiểu rõ cơ chế của ngắt timer và cách xử lý cờ tràn là rất quan trọng để tránh mất dữ liệu hoặc sai lệch thời gian. Đồng thời, tối ưu hóa việc sử dụng Timer cho các khoảng thời gian khác nhau cũng là một kỹ thuật cần được nắm vững để phát triển các hệ thống nhúng mạnh mẽ và hiệu quả.

5.1. Kỹ thuật đọc giá trị thanh ghi Timer đang hoạt động Tránh sai lệch pha

Khi bộ định thời đang hoạt động, việc đọc giá trị từ các thanh ghi timer (THx/TLx) có thể gặp phải "sai lệch pha" (phase error) nếu byte thấp tràn sang byte cao giữa hai lần đọc. Để khắc phục, "Giáo trình Vi xử lý" đề xuất một giải pháp: đầu tiên đọc byte cao, sau đó đọc byte thấp, rồi đọc lại byte cao một lần nữa. Nếu giá trị byte cao thay đổi giữa hai lần đọc, thao tác đọc cần được lặp lại. Kỹ thuật này đảm bảo rằng giá trị đọc về từ bộ định thời là chính xác tại một thời điểm cụ thể, rất quan trọng trong các ứng dụng vi xử lý yêu cầu độ chính xác cao như đo tần số hoặc thời gian thực.

5.2. Ngắt Timer Cơ chế hoạt động và tầm quan trọng trong hệ thống nhúng

Ngắt Timer là một cơ chế mạnh mẽ cho phép vi điều khiển thực hiện các tác vụ định kỳ mà không cần liên tục kiểm tra trạng thái của bộ định thời. Khi Timer tràn (cờ TFx = 1), một yêu cầu ngắt sẽ được gửi đến CPU. Nếu ngắt được phép, CPU sẽ tạm dừng công việc hiện tại để thực thi chương trình phục vụ ngắt (ISR - Interrupt Service Routine), sau đó quay lại công việc chính. Theo "Giáo trình Vi xử lý", ngắt timer đóng vai trò thiết yếu trong việc xây dựng các hệ thống nhúng đa nhiệm, cho phép thực hiện nhiều tác vụ đồng thời như quét bàn phím, cập nhật hiển thị, và điều khiển động cơ, tất cả đều được đồng bộ hóa theo thời gian.

5.3. Tối ưu hóa lập trình timer cho các khoảng thời gian khác nhau

Việc lựa chọn chế độ hoạt động timer và phương pháp lập trình timer cần được tối ưu hóa dựa trên khoảng thời gian định thời mong muốn. "Giáo trình Vi xử lý" chỉ ra rằng: đối với các khoảng thời gian ngắn (khoảng 1 µs), có thể dùng các lệnh đơn. Đối với khoảng ≤ 256 µs, chế độ 8-bit tự nạp lại là phù hợp. Đối với khoảng ≤ 65536 µs, chế độ 16-bit được ưu tiên. Với các khoảng thời gian dài hơn (không giới hạn), cần kết hợp Timer 16-bit với các vòng lặp phần mềm (sử dụng các thanh ghi chung như R0, R1). Việc lựa chọn đúng phương pháp giúp đạt được độ chính xác cao nhất và sử dụng tài nguyên vi điều khiển một cách hiệu quả nhất, giảm thiểu sai số trong tạo trễ bằng Timer.

VI. Tương lai của Timer trong vi điều khiển Kết luận và định hướng phát triển tài liệu vi xử lý

Những hiểu biết về Timer và các ứng dụng vi xử lý của nó không ngừng phát triển, cùng với sự tiến bộ của kiến trúc vi xử lý. Từ những bộ Timer đơn giản trong 8051 timer đến các bộ Timer đa chức năng, mạnh mẽ hơn trong PIC timer, AVR timer, và đặc biệt là STM32 timer với các tính năng nâng cao như Capture/Compare, bộ đếm Watchdog. Các tài liệu vi xử lý hiện đại ngày càng cập nhật những kỹ thuật lập trình timer mới, phục vụ cho các hệ thống nhúng phức tạp hơn. "Giáo trình Vi xử lý: Timer và Ứng dụng" là một nền tảng vững chắc, nhưng việc tiếp tục khám phá và học hỏi các kiến trúc Timer tiên tiến là điều cần thiết cho mọi kỹ sư và nhà nghiên cứu. Tương lai hứa hẹn những ứng dụng đột phá của bộ định thời trong các lĩnh vực như IoT, trí tuệ nhân tạo biên (Edge AI), và robot, đòi hỏi những giải pháp định thời và điều khiển ngày càng chính xác và phức tạp. Để không ngừng nâng cao kiến thức, cần chú trọng tìm kiếm và nghiên cứu các tài liệu vi xử lý mới nhất.

6.1. Tóm tắt vai trò của bộ định thời và những đóng góp của Giáo trình Vi xử lý

Bộ định thời là một thành phần cốt lõi trong vi điều khiển, đóng vai trò không thể thiếu trong việc thực hiện các tác vụ liên quan đến thời gian và đếm sự kiện. "Giáo trình Vi xử lý" đã cung cấp một cái nhìn toàn diện về nguyên lý hoạt động, cấu hình, và các chế độ hoạt động timer khác nhau. Từ việc tạo trễ bằng Timer cho đến tạo xung PWMđếm sự kiện, bộ định thời là nền tảng cho nhiều ứng dụng vi xử lý quan trọng. Sự hiểu biết vững chắc về cách cấu hình timerlập trình timer là yếu tố quyết định cho sự thành công của các dự án hệ thống nhúngmạch điện tử. Đây là một kiến thức cơ bản mà mọi kỹ sư cần nắm vững.

6.2. Phát triển Timer trong PIC timer AVR timer STM32 timer và các vi điều khiển hiện đại

Trong khi 8051 timer cung cấp nền tảng cơ bản, các dòng vi điều khiển hiện đại hơn như PIC timer, AVR timer, và đặc biệt là STM32 timer đã phát triển các bộ bộ định thời với tính năng mạnh mẽ và đa dạng hơn. Chúng thường có nhiều bộ Timer hơn, với số bit đếm lớn hơn (ví dụ 32-bit), hỗ trợ nhiều chế độ nâng cao như Capture/Compare để đo độ rộng xung chính xác, hoặc các bộ thời gian thực RTC tích hợp. Các vi điều khiển này cũng thường có nhiều kênh PWM hơn, cho phép điều khiển phức tạp hơn. Việc nghiên cứu các tài liệu vi xử lý dành cho các nền tảng này sẽ giúp mở rộng khả năng lập trình timer và áp dụng vào các hệ thống nhúng tiên tiến.

6.3. Khuyến nghị và nguồn tài liệu vi xử lý để tiếp tục nghiên cứu ứng dụng vi xử lý

Để tiếp tục nâng cao kiến thức về Timer và các ứng dụng vi xử lý, cần không ngừng học hỏi từ các nguồn tài liệu vi xử lý uy tín. Ngoài "Giáo trình Vi xử lý" nền tảng, khuyến nghị tìm hiểu các datasheet của từng dòng vi điều khiển cụ thể (PIC timer, AVR timer, STM32 timer) để nắm bắt chi tiết về các bộ Timer của chúng. Các khóa học trực tuyến, diễn đàn cộng đồng, và sách chuyên khảo về hệ thống nhúng cũng là những nguồn tài nguyên quý giá. Việc thực hành lập trình timer thông qua các dự án thực tế, từ việc tạo trễ bằng Timer đơn giản đến việc tạo xung PWM điều khiển phức tạp, sẽ giúp củng cố kiến thức và kỹ năng một cách vững chắc nhất.

29/09/2025

Trích đoạn nội dung tài liệu

KHOA CÔNG NGHỆ ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP GIÁO TRÌNH VI XỬ LÝ Chương 4: Hoạt ñộng của bộ ñịnh thời (Timer). Trường ðH Công nghiệp Tp. CHƯƠNG 4 HOẠT ðỘNG CỦA BỘ ðỊNH THỜI (TIMER) I. MỞ ðẦU: Boä ñònh Laø chuoãi caùc FF (moãi FF laø 1 maïch chia 2).

thôøi Ngoõ vaøo: nhaän tín hieäu xung clock töø nguoàn xung. • Tần số: tần số xung ngõ ra bằng tần số xung ngõ vào chia cho 2N. • Giá trị: giá trị nhị phân trong các FF của bộ ñịnh thời là số ñếm của các xung clock tại ngõ vào từ khi bộ ñịnh thời bắt ñầu ñếm. • Tràn: xảy ra hiện tượng tràn (cờ tràn = 1) khi số ñếm chuyển từ giá trị lớn nhất xuống giá trị nhỏ nhất của bộ ñịnh thời.

Ví dụ: Bộ ñịnh thời 16 bit (chứa 16 FF bên trong). f f o Tần số: f = IN = IN OUT 216 65536 o Giá trị: số ñếm nằm trong khoảng 0 (0000H) → 65535 (FFFFH). o Tràn: cờ tràn bằng 1 khi số ñếm từ FFFFH chuyển xuống 0000H. Hình minh họa ñơn giản hoạt ñộng của bộ ñịnh thời 3 bit: Hoạt ñộng của một bộ ñịnh thời 3 bit ñơn giản ñược minh họa trong hình trên.

Mỗi một tầng là D FF kích khởi cạnh âm hoạt ñộng như một mạch chia 2 do ta nối ngõ ra Q với ngõ vào D. Flipflop cờ (Flag FF) là một mạch chốt D ñược set bằng 1 bởi tầng cuối của bộ ñịnh thời. Giản ñồ thời gian cho Giáo trình Vi xử lý. 119 Biên soạn: Phạm Quang Trí Chương 4: Hoạt ñộng của bộ ñịnh thời (Timer).

Trường ðH Công nghiệp Tp. thấy tầng thứ nhất (Q0) chia 2 tần số xung clock, tầng thứ hai (Q1) chia 4 tần số xung clock, … Số ñếm ñược ghi ở dạng thập phân và ñược kiểm tra dễ dàng bằng cách khảo sát trạng thái của 3 flipflop. Ví dụ, số ñếm là 4 xuất hiện khi Q2 = 1, Q1 = 0, Q0 = 0. Các flipflop ở trên là các flipflop tác ñộng cạnh âm (nghĩa là trạng thái của các flipflop sẽ thay ñổi theo cạnh âm của xung clock).

Khi số ñếm tràn từ 111 xuống 000, ngõ ra Q2 có cạnh âm làm cho trạng thái của flipflop cờ ñổi từ 0 lên 1 (ngõ vào D của flipflop này luôn luôn ở logic 1). • Ứng dụng ñịnh thời gian (TIMER): bộ ñịnh thời ñược lập trình sao cho sẽ tràn sau một khoảng thời gian ñã qui ñịnh và khi ñó cờ tràn của bộ ñịnh thời sẽ bằng 1. • Ứng dụng ñếm sự kiện (COUNTER): ñể xác ñịnh số lần xuất hiện của một kích thích từ bên ngoài tới một chân của chip 8051 (kích thích là sự chuyển trạng thái từ 1 xuống 0). • Ứng dụng tạo tốc ñộ baud cho port nối tiếp: xem thêm trong chương “Chương 5: Hoạt ñộng port nối tiếp.

Giáo trình Vi xử lý. 120 Biên soạn: Phạm Quang Trí Chương 4: Hoạt ñộng của bộ ñịnh thời (Timer). Trường ðH Công nghiệp Tp. THANH GHI CHẾ ðỘ ðỊNH THỜI (TMOD): • Thanh ghi TMOD (Timer Mode Register) chứa các bit dùng ñể thiết lập chế ñộ hoạt ñộng cho bộ ñịnh thời 0 và bộ ñịnh thời 1.

• Thanh ghi TMOD ñược nạp giá trị một lần tại thời ñiểm bắt ñầu của chương trình ñể qui ñịnh chế ñộ hoạt ñộng của các bộ ñịnh thời. • Cấu trúc thanh ghi TMOD: Bit 7 6 5 4 3 2 1 0 TMOD: Timer Mode Register 0 M0: Bit choïn cheá ñoä hoaït ñoäng cho boä ñònh thôøi. M1: Bit choïn cheá ñoä hoaït ñoäng cho boä ñònh thôøi. C/T: Bit choïn chöùc naêng ñeám hoaëc ñònh thôøi.

C/T=1: Boä ñònh thôøi laø boä ñeám (Counter). C/T=0: Boä ñònh thôøi laø boä ñònh khoaûng thôøi gian (Timer). GATE: Bit ñieàu khieån coång. GATE=0: Boä ñònh thôøi hoaït ñoäng khi bit TR0=1 (ñieàu khieån baèng phaàn meàm).

GATE=1: Boä ñònh thôøi hoaït ñoäng khi chaân INT0\=1 (ñieàu khieån baèng phaàn cöùng). 1 M0: Bit choïn cheá ñoä hoaït ñoäng cho boä ñònh thôøi. M1: Bit choïn cheá ñoä hoaït ñoäng cho boä ñònh thôøi. C/T: Bit choïn chöùc naêng ñeám hoaëc ñònh thôøi.

C/T=1: Boä ñònh thôøi laø boä ñeám (Counter). C/T=0: Boä ñònh thôøi laø boä ñònh khoaûng thôøi gian (Timer). GATE: Bit ñieàu khieån coång. GATE=0: Boä ñònh thôøi hoaït ñoäng khi bit TR1=1 (ñieàu khieån Hình 4.1: baèng phaàn meàm).

Thanh ghi choïn GATE=1: Boä ñònh thôøi hoaït ñoäng khi chaân INT1\=1 (ñieàu cheá ñoä ñònh thôøi. khieån baèng phaàn cöùng). • Các chế ñộ hoạt ñộng của bộ ñịnh thời: Giáo trình Vi xử lý. 121 Biên soạn: Phạm Quang Trí Chương 4: Hoạt ñộng của bộ ñịnh thời (Timer).

Trường ðH Công nghiệp Tp. • Ví dụ 1: Cho biết giá trị cần nạp cho thanh ghi TMOD ñể o Timer 0: là bộ ñịnh thời gian 16 bit, ñược ñiều khiển bằng phần mềm (bit TR0). o Timer 1: là bộ ñếm xung 13 bit, ñược ñiều khiển bằng phần cứng (chân INT 1 ). Giải Phân tích: (1): Chế ñộ 16 bit.

(2): Bộ ñịnh thời gian. (3): ðiều khiển bằng phần mềm. (4): Chế ñộ 13 bit. (5): Bộ ñếm xung.

(6): ðiều khiển bằng phần cứng. • Ví dụ 2: Cho biết giá trị cần nạp cho thanh ghi TMOD ñể o Timer 0: không sử dụng. o Timer 1: là bộ ñịnh thời gian 8 bit tự nạp lại, ñược ñiều khiển bằng phần mềm (bit TR1). Giải Phân tích: (1): Không sử dụng.

(2): Không sử dụng. (3): Không sử dụng. Do Timer 0 không sử dụng, nên ta có thiết lập nó ở bất cứ chế ñộ nào. Thông thường ñể dễ dàng ta nên cho: GATE=0, C / T = 0, M1 = 0 và M0 = 0.

(4): Chế ñộ 8 bit tự ñộng nạp lại. (5): Bộ ñịnh thời gian. (6): ðiều khiển bằng phần mềm. Giáo trình Vi xử lý.

122 Biên soạn: Phạm Quang Trí Chương 4: Hoạt ñộng của bộ ñịnh thời (Timer). Trường ðH Công nghiệp Tp. • Ví dụ 3: Cho biết (TMOD) = A5H. Hãy cho biết chế ñộ hoạt ñộng của các Timer 0 và Timer 1.

Giải thích: M1 = 1, M0 = 0.  (4): Chế ñộ 8 bit tự ñộng nạp lại.  (5): Bộ ñịnh thời gian.  (6): ðiều khiển bằng phần cứng.

 (1): Chế ñộ 16 bit.  (2): Bộ ñếm xung.  (3): ðiều khiển bằng phần mềm. Từ ñó ta có: o Timer 0: là bộ ñếm xung 16 bit, ñược ñiều khiển bằng phần mềm (bit TR0).

o Timer 1: là bộ ñịnh thời gian 8 bit tự nạp lại, ñược ñiều khiển bằng phần cứng (chân INT 1 ). • Ví dụ 4: Cho biết (TMOD) = 21H. Hãy cho biết chế ñộ hoạt ñộng của các Timer 0 và Timer 1. Giải thích: M1 = 1, M0 = 0.

 (4): Chế ñộ 8 bit tự ñộng nạp lại.  (5): Bộ ñịnh thời gian.  (6): ðiều khiển bằng phần mềm.  (1): Chế ñộ 16 bit.

 (2): Bộ ñịnh thời gian.  (3): ðiều khiển bằng phần mềm. Từ ñó ta có: o Timer 0: là bộ ñịnh thời gian 16 bit, ñược ñiều khiển bằng phần mềm (bit TR0). o Timer 1: là bộ ñịnh thời gian 8 bit tự nạp lại, ñược ñiều khiển bằng phần mềm (bit TR1).

Giáo trình Vi xử lý. 123 Biên soạn: Phạm Quang Trí Chương 4: Hoạt ñộng của bộ ñịnh thời (Timer). Trường ðH Công nghiệp Tp. THANH GHI ðIỀU KHIỂN ðỊNH THỜI (TCON): • Thanh ghi TCON (Timer Control Register) chứa các bit dùng ñể ñiều khiển và báo trạng thái của bộ ñịnh thời 0 và bộ ñịnh thời 1.

• Cấu trúc thanh ghi TCON: • Lưu ý: Các bit IT0, IT1, IE0, IE1 không dùng ñể ñiều khiển các bộ ñịnh thời. Các bit này ñược dùng ñể phát hiện và khởi ñộng các ngắt ngoài. Việc thảo luận các bit này sẽ ñược trình bày trong “Chương 6: Hoạt ñộng ngắt. Giáo trình Vi xử lý.

124 Biên soạn: Phạm Quang Trí Chương 4: Hoạt ñộng của bộ ñịnh thời (Timer). Trường ðH Công nghiệp Tp. CÁC CHẾ ðỘ ðỊNH THỜI VÀ CỜ TRÀN: 1. Chế ñộ ñịnh thời 13 bit (Chế ñộ 0): Chế ñộ 0 (Mode 0): • Chế ñộ ñịnh thời 13 bit.

• Sử dụng 8 bit của thanh ghi THx và 5 bit thấp của thanh ghi TLx ñể tạo ra bộ ñịnh thời. • Số ñếm: 0000H → 1FFFH nghĩa là từ 0 → 8191. Thời gian ñịnh thời: từ 1.TTimer nghĩa là từ 1. • Thanh ghi THx và TLx chứa giá trị của bộ ñịnh thời.

• Khi có xung clock, bộ ñịnh thời bắt ñầu ñếm lên từ giá trị chứa trong THx/TLx. • Xảy ra tràn (cờ tràn TFx=1) khi số ñếm chuyển từ 1FFFH sang 0000H và việc ñếm sẽ tiếp tục ñếm lên từ giá trị 0000H. Kiến trúc của Timer 0 ở chế ñộ 0 (Mode 0). Giáo trình Vi xử lý.

125 Biên soạn: Phạm Quang Trí Chương 4: Hoạt ñộng của bộ ñịnh thời (Timer). Trường ðH Công nghiệp Tp. Chế ñộ ñịnh thời 16 bit (Chế ñộ 1): Chế ñộ 1 (Mode 1): • Chế ñộ ñịnh thời 16 bit. • Sử dụng thanh ghi THx và TLx ñể tạo ra bộ ñịnh thời.

• Số ñếm: 0000H → FFFFH nghĩa là từ 0 → 65535. Thời gian ñịnh thời: từ 1.TTimer nghĩa là từ 1. • Thanh ghi THx và TLx chứa giá trị của bộ ñịnh thời. • Khi có xung clock, bộ ñịnh thời bắt ñầu ñếm lên từ giá trị chứa trong THx/TLx.

• Xảy ra tràn (cờ tràn TFx=1) khi số ñếm chuyển từ FFFFH sang 0000H và việc ñếm sẽ tiếp tục ñếm lên từ giá trị 0000H. Kiến trúc của Timer 0 ở chế ñộ 1 (Mode 1). Giáo trình Vi xử lý. 126 Biên soạn: Phạm Quang Trí Chương 4: Hoạt ñộng của bộ ñịnh thời (Timer).

Trường ðH Công nghiệp Tp. Chế ñộ ñịnh thời 8 bit tự nạp lại (Chế ñộ 2): Chế ñộ 2 (Mode 2): • Chế ñộ ñịnh thời 8 bit tự nạp lại. • Sử dụng thanh ghi TLx ñể tạo ra bộ ñịnh thời. • Số ñếm: 00H → FFH nghĩa là từ 0 → 255.

Thời gian ñịnh thời: từ 1.TTimer nghĩa là từ 1. • Thanh ghi TLx chứa giá trị của bộ ñịnh thời và thanh ghi THx chứa giá trị sẽ ñược dùng ñể nạp lại cho bộ ñịnh thời. • Khi có xung clock, bộ ñịnh thời bắt ñầu ñếm lên từ giá trị chứa trong TLx (THx không thay ñổi giá trị). • Xảy ra tràn (cờ tràn TFx=1) khi số ñếm chuyển từ FFH sang 00H, ñồng thời giá trị trong THx sẽ ñược nạp vào TLx và việc ñếm sẽ tiếp tục ñếm lên từ giá trị chứa trong thanh ghi TLx (giá trị này bằng với giá trị của THx).

Kiến trúc của Timer 0 ở chế ñộ 2 (Mode 2). Giáo trình Vi xử lý. 127 Biên soạn: Phạm Quang Trí Chương 4: Hoạt ñộng của bộ ñịnh thời (Timer). Trường ðH Công nghiệp Tp.

Chế ñộ ñịnh thời chia xẻ (Chế ñộ 3): Timer TH1 TL1 clock Timer TF0 TL0 clock TF1 TH0 /12FOSC Overflow x = 0, 1: Boä ñònh thôøi 0, 1.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ