Như đã giới thiệu trong bài viết "Giới Thiệu về Hệ Thống Nhúng", Vi điều khiển là bộ não của một hệ thống nhúng. Do đó, trong bài viết này, tôi sẽ giải thích về PIC16F84A - một vi điều khiển 8 bit từ hãng Microchip. Có thể bạn đặt câu hỏi, "Tại sao chúng ta lại bắt đầu với vi điều khiển này, có phải không có cái nào khác không?" Có lẽ, rõ ràng rằng một đối tượng được thảo luận trong phần giới thiệu sẽ dễ hiểu hơn. Ngoài ra, có một số lý do mạnh mẽ mà tôi chọn giới thiệu PIC16F84A như kiến trúc đơn giản, số lượng chỉ thị ít v.v.,
Có vi điều khiển nào đơn giản hơn không? - Có, ví dụ như dòng PIC12F. Nhưng chúng quá đơn giản để bắt đầu. Vậy nên, hãy tiếp tục và bắt đầu với vi điều khiển của chúng ta - PIC16F84A. Nó có giá khoảng 120 Rs.
Ở đây, tôi không thể giải thích tất cả các tính năng, cách hoạt động và thông số kỹ thuật của vi điều khiển, tôi chỉ sẽ giải thích những điều cần thiết để bạn bắt đầu (và tin tôi, bạn có thể thực hiện nhiều dự án với kiến thức này). Bây giờ, hãy bắt đầu trò chơi.
Mô Tả: PIC16F84A là một vi điều khiển 8 bit, có nghĩa là nó có khả năng xử lý chỉ 8 bit mỗi lần. Nó cũng có nhiều dạng bao gồm PDIP (Gói Đóng Cách Điện Nhựa Đôi), mà thường được sử dụng bởi người nghiệp dưỡng. Dưới đây là các thông số của PIC16F84A:
Chỉ có 35 Lệnh
- điều này khiến nó trở thành máy tính RISC phổ biến. Tần số hoạt động
- lên đến 20 MHz 68 byte RAM dữ liệu 64 byte EEPROM dữ liệu 15 thanh ghi chức năng đặc biệt (SFRs) Điện áp hoạt động
- từ 2.0 đến 5 volt Đặc Điểm: 13 chân I/O
- Bạn có thể cấu hình 13 chân làm đầu vào hoặc đầu ra mỗi chân.
Mỗi chân có thể cung cấp/điều khiển dòng 25mA.
Hỗ trợ ICSP (Lập Trình Trong Mạch Nối Tiếp)
Bộ nhớ Flash có thể xóa/viết 10.000 lần.
Bộ nhớ EEPROM có thể xóa/viết 10.000.000 lần.
Điều khiển thời gian đồng hồ được tích hợp.
Như bạn có thể thấy, đây là một vi điều khiển 18 chân. Dưới đây là mô tả các chân:
Chân 5: Vss - Đây là chân đất của vi điều khiển và phải được kết nối với terminal âm của pin.
Chân 14: Vdd - Đây là chân cấp nguồn cho vi điều khiển và phải được kết nối với terminal dương của pin. (Hãy nhớ rằng tối đa bạn có thể sử dụng pin 5 volt, pin có đánh giá vượt quá giá trị này có thể làm hỏng vi điều khiển).
Chân 4: MCLR - Memory Clear. Đây là chân active low, có nghĩa là nó thực hiện chức năng được gán khi giữ ở mức thấp (kết nối với đất). Rõ ràng, chân này được sử dụng để xóa bộ nhớ RAM tạm thời. Luôn luôn, khi bộ điều khiển đang hoạt động, chân này được kết nối với nguồn cung cấp dương.
Chân 15&16: Oscillator in/out - ở đây bạn kết nối một dao cắt tinh. Tần số tối đa bạn có thể sử dụng là 20MHz. Bạn cũng có thể sử dụng dao cắt tinh 4MHz. Tần số dao cắt tinh càng cao, bộ điều khiển hoạt động càng nhanh (nhưng họ đã đặt giới hạn cho nó - tối đa 20MHz là đủ nhanh cho tất cả các ứng dụng sử dụng bộ điều khiển này. Để có một hình ảnh, nếu bạn sử dụng dao cắt tinh 20MHz, nó có thể thực hiện 20,000,000 lệnh mỗi giây!). Ở đây, chúng ta thường sử dụng dao cắt tinh vì chúng rất rẻ, dễ sử dụng, chính xác và nhỏ gọn.
Chân 1,2,3,6,7,8,9,10,11,12,13,17&18: Đây là 13 chân I/O. Chúng được nhóm thành hai nhóm. Cổng A bao gồm 5 chân (17,18,1,2&3) và Cổng B bao gồm 8 chân (6,7,8,9,10,11,12&13).
Như đã nói trước đó, có thể cấu hình các chân I/O này cá nhân làm đầu vào hoặc đầu ra và mỗi chân có thể cung cấp (nguồn) hoặc hút (hấp thụ) tối đa 25mA dòng. Vì vậy, mỗi chân có thể điều khiển một đèn LED dễ dàng, nhưng không thể điều khiển bất kỳ động cơ dc nào trực tiếp, và cho mục đích này, chúng ta sử dụng các IC đặc biệt gọi là bộ điều khiển động cơ.
Đồng Hồ Bảo Vệ: Tôi đã liệt kê rằng PIC này chứa một bộ hẹn đồng hồ gọi là đồng hồ bảo vệ. Đồng hồ bảo vệ là một đồng hồ nội bộ trong chip. Bạn có thể kích hoạt hoặc vô hiệu hóa đồng hồ bằng cách lập trình. Sử dụng chính của đồng hồ là để đặt lại vi điều khiển khi chương trình của nó trở nên lỗi hoặc nó vào một vòng lặp vô hạn. Để hiểu rõ hơn về đồng hồ bảo vệ, hãy coi nó như một bộ đếm ngược và nó bắt đầu đếm ngược từ 1000 và đến số không. Ở đầu chương trình, đồng hồ bảo vệ sẽ được kích hoạt. Trước khi đồng hồ đạt đến số không (trong ví dụ của chúng ta), chương trình phải gán lại nó về 1000 lần nữa. Nói cách khác, đồng hồ bảo vệ không được phép đi đến số không trong hoạt động bình thường. Nói chung, với mỗi 3 lệnh, chúng ta đặt lại đồng hồ bảo vệ về giá trị ban đầu của nó. Vì vậy, nếu có bất kỳ lỗi nào xảy ra trong chương trình của chúng ta, hoặc khi chương trình của chúng ta vào bất kỳ vòng lặp vô hạn nào, nó không thể đặt lại đồng hồ bảo vệ. Do đó, khi đồng hồ đạt đến số không, nó sẽ đặt lại vi điều khiển và chương trình bắt đầu từ đầu. Do đó, đồng hồ bảo vệ giám sát hoạt động của chương trình và đặt lại chương trình khi xảy ra bất kỳ lỗi nào. Đồng hồ này được sử dụng trong các ứng dụng tiên tiến.
Bộ Đăng Ký: Có hai loại đăng ký ở đây - Đăng ký Mục Đích Tổng Quát (GPR) và Đăng ký Chức Năng Đặc Biệt (SFR). Rõ ràng từ tên, các đăng ký mục đích tổng quát được sử dụng để lưu trữ bất kỳ giá trị tùy ý nào để thực hiện. Các đăng ký chức năng đặc biệt được sử dụng để thực hiện một số chức năng kiểm soát thiết bị.
Ở đây, như bạn có thể thấy, các đăng ký được chia thành hai ngân hàng, Ngân hàng 1 và Ngân hàng 2 (được hiển thị ở trên trong biểu đồ trên). Ở đây, các đăng ký từ 00H đến 0BH và từ 80H đến 8BH là SFR, phần còn lại là GPR được thực hiện như bộ nhớ RAM tĩnh. Ở đây, chúng ta quan tâm hơn đến SFR hơn GFR. Ở đây, tôi sẽ giải thích 5 SFR chi tiết - STATUS, PORTA, PORTB, TRISA, TRISB. (Lưu ý rằng tất cả đều là đăng ký 8 bit) và đăng ký W.
STATUS: Chúng ta sử dụng đăng ký này chủ yếu cho một mục đích - chuyển đổi giữa các ngân hàng. Khi bit thứ năm của đăng ký này được đặt, chúng ta ở trong ngân hàng 1, khi bit thứ năm được đặt lại, chúng ta ở trong ngân hàng 0.
PORTA: Năm trong số tám bit trong đăng ký tương ứng với 5 chân của cổng A (chân 17,18,1,2&3). Ở đây, bit ít có ý nghĩa nhất tương ứng với RA0.
PORTB: Tám bit của đăng ký này tương ứng với 8 chân của cổng B (chân 6,7,8,9,10,11,12&13). Tình hình tương tự ở đây - LSB là RB0 và MSB là RB7
TRISA: Đăng ký này được sử dụng để đặt (quyết định) xem các chân của cổng A có phải là đầu vào hay đầu ra không. Một đại diện đầu vào và không có đại diện đầu ra. Ví dụ, 10010 được viết trên đăng ký TRISA chỉ định rằng RA0 được cấu hình là đầu ra, RA1 là đầu vào, RA2 là đầu ra, RA3 là đầu ra và RA4 là đầu vào. (rất rõ ràng?)
TRISB: Tình hình tương tự với đăng ký TRISB. Nó được sử dụng để cấu hình các chân của cổng B là đầu vào/đầu ra.
Đăng ký W: Đây là đăng ký mục đích tổng quát có thể truy cập bằng chương trình. Bạn chỉ có thể viết giá trị trực tiếp vào đăng ký W. Vì vậy, khi bạn muốn viết giá trị vào bất kỳ đăng ký nào, chẳng hạn như TRISA hoặc PORTA vv, bạn phải trước tiên viết giá trị vào đăng ký W và sau đó chuyển nó sang đăng ký mục tiêu bằng một lệnh khác ở bước tiếp theo. Nó tương ứng với đăng ký A (Bộ Chồng) trong vi xử lý 8085. (Lưu ý: Đăng ký W không thuộc ngân hàng
Dưới đây là bảng mô tả chân của một IC 18 chân, với các chú thích:
Chân 5: Vss – Đây là chân đất của IC và phải được kết nối với cực âm của pin.
Chân 14: Vdd – Đây là chân cung cấp điện của IC và phải được kết nối với cực dương của pin. (Hãy nhớ rằng tối đa bạn có thể sử dụng là một pin 5 volt, pin có điện áp cao hơn có thể làm hỏng IC).
Chân 4: MCLR – Memory Clear. Đây là chân hoạt động khi mức thấp. Điều này có nghĩa là nó thực hiện chức năng được gán của nó khi giữ ở mức thấp (kết nối với đất). Rõ ràng, chân này được sử dụng để xóa bộ nhớ RAM tạm thời. Luôn luôn khi bộ điều khiển hoạt động, chân này được kết nối với nguồn cung cấp dương.
Chân 15 & 16: Oscillator in/out – ở đây bạn kết nối một bộ dao động tinh thể. Tần số tối đa bạn có thể sử dụng là 20MHz. Bạn có thể sử dụng một tinh thể 4MHz. Tần số tinh thể càng cao, bộ điều khiển hoạt động càng nhanh (nhưng họ đã đặt giới hạn cho nó - tối đa 20MHz, đủ nhanh cho tất cả các ứng dụng sử dụng bộ điều khiển này). Chúng ta sẽ chủ yếu sử dụng bộ dao động tinh thể vì chúng rẻ, dễ sử dụng, chính xác và nhỏ gọn.
Chân 1, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 17 & 18: Đây là 13 chân I/O. Chúng được nhóm thành hai nhóm: Cổng A chứa 5 chân (17, 18, 1, 2 & 3) và Cổng B chứa 8 chân (6, 7, 8, 9, 10, 11, 12 & 13).
Như đã đề cập trước đó, có thể cấu hình từng chân I/O này độc lập làm đầu vào hoặc đầu ra, và mỗi chân có thể cung cấp (source) hoặc hút (sink) tối đa 25mA dòng. Do đó, mỗi chân có thể đánh đèn LED dễ dàng, nhưng không thể điều khiển động cơ DC trực tiếp, và cho mục đích này, chúng ta sử dụng IC đặc biệt gọi là trình điều khiển động cơ.
Bộ đếm hộp xem (Watchdog Timer): Tôi đã liệt kê rằng PIC này chứa một bộ đếm hộp xem tích hợp. Bộ đếm hộp xem là một bộ đếm nội bộ trong vi chip. Bạn có thể kích hoạt hoặc vô hiệu hóa bộ đếm này bằng cách lập trình. Bộ đếm này thường được sử dụng để đặt lại vi điều khiển khi chương trình của nó gặp sự cố hoặc rơi vào một vòng lặp vô hạn. Để hiểu rõ hơn về bộ đếm hộp xem, hãy coi nó như một bộ đếm đảo ngược và nó bắt đầu đếm ngược từ 1000 và đến số không. Ở đầu chương trình, bộ đếm hộp xem sẽ được bắt đầu. Trước khi bộ đếm đạt đến số không (trong ví dụ của chúng tôi), chương trình phải gán lại giá trị ban đầu là 1000. Nói cách khác, bộ đếm hộp xem không được phép đạt đến số không trong quá trình hoạt động bình thường. Nếu có bất kỳ lỗi nào xảy ra trong chương trình, hoặc khi chương trình rơi vào một vòng lặp vô hạn, nó không thể đặt lại bộ đếm hộp xem. Do đó, khi bộ đếm đạt đến giá trị số không, nó sẽ đặt lại vi điều khiển và chương trình bắt đầu từ đầu. Bởi vậy, bộ đếm hộp xem giám sát hoạt động của chương trình và đặt lại chương trình khi có lỗi. Bộ đếm này thường được sử dụng trong các ứng dụng tiên tiến.
Bộ đăng ký (Registers): Có hai loại bộ đăng ký ở đây - Bộ đăng ký Mục đích Chung (GPR) và Bộ đăng ký Chức năng Đặc biệt (SFR). Rõ ràng từ tên, bộ đăng ký mục đích chung được sử dụng để lưu trữ bất kỳ giá trị tùy ý nào để thực hiện các phép toán. Bộ đăng ký chức năng đặc biệt được sử dụng để thực hiện một số chức năng điều khiển thiết bị.
Ở đây, như bạn có thể thấy, các bộ đăng ký được chia thành hai ngân hàng, Ngân hàng 1 và Ngân hàng 2 (được cho dưới trong sơ đồ ở trên). Ở đây, các bộ đăng ký từ 00H đến 0BH và từ 80H đến 8BH là SFR, phần còn lại là GPR được triển khai dưới dạng RAM tĩnh. Mỗi ngân hàng có chiều dài 128 byte và 12 vị trí đầu tiên trong mỗi ngân hàng được dành cho SFR và phần còn lại là GPR được triển khai dưới dạng RAM tĩnh. Ở đây, chúng ta quan tâm hơn đến SFR so với GFR. Ở đây, tôi sẽ giải thích 5 SFR chi tiết - STATUS, PORTA, PORTB, TRISA, TRISB. (Lưu ý rằng tất cả đều là bộ đăng ký 8 bit) và bộ đăng ký W.
STATUS: Chúng ta sử dụng bộ đăng ký này chủ yếu vì một mục đích - để chuyển đổi giữa các ngân hàng. Khi bit thứ năm của bộ đăng ký này được thiết lập, chúng ta ở trong ngân hàng 1, khi bit thứ năm được đặt lại, chúng ta ở trong ngân hàng 0.
PORTA: Năm trong số tám bit trong bộ đăng ký tương ứng với 5 chân của cổng A (chân 17,18,1,2&3). Ở đây, bit ít trọng số nhất tương ứng với RA0.
PORTB: Tám bit của bộ đăng ký này tương ứng với 8 chân của cổng B (chân 6,7,8,9,10,11,12&13). Tình hình tương tự ở đây - LSB là RB0 và MSB là RB7.
TRISA: Bộ đăng ký này được sử dụng để đặt (quyết định) xem các chân cổng A có phải là đầu vào hay đầu ra không. Giá trị 1 đại diện cho đầu vào và giá trị 0 đại diện cho đầu ra. Ví dụ, số 10010 được viết trên bộ đăng ký TRISA chỉ định rằng RA0 được cấu hình là đầu ra, RA1 là đầu vào, RA2 là đầu ra, RA3 là đầu ra và RA4 là đầu vào. (Khá rõ ràng phải không?)
TRISB: Tình hình tương tự với bộ đăng ký TRISB. Nó được sử dụng để cấu hình các chân cổng B là đầu vào/đầu ra.
Bộ đăng ký W: Đây là bộ đăng ký mục đích chung có thể truy cập được bởi chương trình. Bạn chỉ có thể viết giá trị trực tiếp vào bộ đăng ký W. Vì vậy, khi bạn muốn viết giá trị vào bất kỳ bộ đăng ký nào, ví dụ như TRISA hoặc PORTA vv, bạn phải trước tiên viết giá trị vào bộ đăng ký W và sau đó chuyển nó vào bộ đăng ký mục tiêu bằng một hướng dẫn khác ở bước tiếp theo. Nó tương ứng với bộ đăng ký A (Accumulator) trong bộ xử lý 8085. (Lưu ý: Bộ đăng ký W không ở trong các ngân hàng đăng ký. Nó được tìm thấy tách rời từ các ngân hàng đăng ký. Tất cả các bộ đăng ký trong các ngân hàng đăng ký không thể truy cập trực tiếp và giá trị chỉ có thể được viết vào chúng thông qua bộ đăng ký W.)
Hotline: 0979 466 469