PIC16F877A là một trong những vi điều khiển PIC phổ biến nhất hiện nay nhờ tính linh hoạt, dễ dàng tìm kiếm và giá cả phải chăng. Bài viết này của Sen Tây Hồ sẽ cung cấp cho bạn cái nhìn tổng quan và chi tiết về PIC16F877A, từ thông số kỹ thuật, sơ đồ chân, đến các ứng dụng và cách lập trình.
Vi điều khiển PIC16F877A
PIC16F877A Là Gì?
PIC16F877A là một vi điều khiển 40 chân thuộc họ PIC, được sử dụng rộng rãi trong các dự án điện tử và ứng dụng nhúng. Với 5 cổng (từ A đến E), 3 bộ định thời (2 bộ 8-bit và 1 bộ 16-bit), và hỗ trợ nhiều giao thức giao tiếp (nối tiếp, song song, I2C), PIC16F877A là lựa chọn lý tưởng cho nhiều ứng dụng khác nhau. Vi điều khiển này cũng hỗ trợ cả ngắt chân phần cứng và ngắt bộ định thời, tăng thêm tính linh hoạt trong quá trình lập trình.
Thông Số Kỹ Thuật Chi Tiết Của PIC16F877A
Để hiểu rõ hơn về khả năng của PIC16F877A, hãy cùng xem xét các thông số kỹ thuật quan trọng sau:
- CPU: PIC 8 bit
- Cấu trúc: 8 bit
- Kích thước bộ nhớ chương trình: 14 Kbyte
- RAM: 368 bytes
- EEPROM: 256 bytes
- Số chân: 40
- Tốc độ CPU tối đa: 20 MHz
- Số bộ so sánh: 2
- Số kênh ADC: 14
- Độ phân giải ADC tối đa: 10 bit
- Số bộ định thời 8 bit: 2
- Số bộ định thời 16 bit: 1
- Số module UART: 1
- Số module SPI: 1
- Số module I2C: 1
- Điện áp hoạt động: 2 – 5.5 V
- Nhiệt độ hoạt động: -40°C đến 125°C
Sơ Đồ Chân Và Chức Năng Của Từng Chân
Sơ đồ chân PIC16F877A là yếu tố quan trọng để thiết kế mạch và kết nối với các thiết bị ngoại vi. Mỗi chân có thể đảm nhiệm nhiều chức năng khác nhau, tùy thuộc vào cấu hình và mục đích sử dụng.
Sơ đồ chân PIC16F877A
Dưới đây là bảng mô tả chi tiết về từng chân:
| STT chân | Tên chân | Mô tả |
|---|---|---|
| 1 | MCLR / Vpp | Chân reset, sử dụng trong quá trình lập trình |
| 2 | RA0 / AN0 | Chân analog 0 hoặc chân 0 của PORTA |
| 3 | RA1 / AN1 | Chân analog 1 hoặc chân 1 của PORTA |
| 4 | RA2 / AN2 / Vref- | Chân analog 2 hoặc chân 2 của PORTA |
| 5 | RA3 / AN3 / Vref + | Chân analog 3 hoặc chân 3 của PORTA |
| 6 | RA4 / T0CKI / C1out | Chân 4 của PORTA |
| 7 | RA5/AN4/SS/C2out | Chân analog 4 hoặc chân 5 của PORTA |
| 8 | RE0 / RD / AN5 | Chân analog 5 hoặc chân 0 của PORTE |
| 9 | RE1 / WR / AN6 | Chân analog 6 hoặc chân 1 của PORTE |
| 10 | RE2/CS/AN7 | Chân 7 của PORTE |
| 11 | Vdd | Chân nguồn dương (+5V) |
| 12 | Vss | Chân nối đất (GND) |
| 13 | OSC1 / CLKI | Chân đầu vào bộ dao động bên ngoài / clock |
| 14 | OSC2 / CLKO | Chân đầu ra bộ dao động bên ngoài / clock |
| 15 | RC0 / T1OSO / T1CKI | Chân 0 của PORTC |
| 16 | RC1 / T1OSI / CCP2 | Chân 1 của PORTC hoặc chân Timer / PWM |
| 17 | RC2 / CCP1 | Chân 2 của PORTC hoặc chân Timer / PWM |
| 18 | RC3 / SCK / SCL | Chân 3 của PORTC, Serial Clock Line (I2C) |
| 19 | RD0 / PSP0 | Chân 0 của PORTD |
| 20 | RD1 / PSPI | Chân 1 của PORTD |
| 21 | RD2 / PSP2 | Chân 2 của PORTD |
| 22 | RD3 / PSP3 | Chân 3 của PORTD |
| 23 | RC4 / SDI / SDA | Chân 4 của PORTC, Serial Data Line (I2C) |
| 24 | RC5 / SDO | Chân 5 của PORTC |
| 25 | RC6 / Tx / CK | Chân 6 của PORTC, chân truyền dữ liệu (UART) |
| 26 | RC7 / Rx / DT | Chân 7 của PORTC, chân nhận dữ liệu (UART) |
| 27 | RD4 / PSP4 | Chân 4 của PORTD |
| 28 | RD5/PSP5 | Chân 5 của PORTD |
| 29 | RD6/PSP6 | Chân 6 của PORTD |
| 30 | RD7/PSP7 | Chân 7 của PORTD |
| 31 | Vss | Chân nối đất (GND) |
| 32 | Vdd | Chân nguồn dương (+5V) |
| 33 | RB0/INT | Chân 0 của PORTB, chân ngắt ngoài |
| 34 | RB1 | Chân 1 của PORTB |
| 35 | RB2 | Chân 2 của PORTB |
| 36 | RB3/PGM | Chân 3 của PORTB, kết nối với programmer |
| 37 | RB4 | Chân 4 của PORTB |
| 38 | RB5 | Chân 5 của PORTB |
| 39 | RB6/PGC | Chân 6 của PORTB, kết nối với programmer |
| 40 | RB7/PGD | Chân 7 của PORTB, kết nối với programmer |
Mạch Cơ Bản Cho PIC16F877A
Để PIC16F877A hoạt động, bạn cần thiết kế một mạch cơ bản, bao gồm các thành phần sau:
- Nguồn điện: PIC16F877A hoạt động ở mức điện áp +5V.
- Bộ dao động: Sử dụng bộ dao động tinh thể với tần số từ 4MHz đến 40MHz.
- Điện trở và tụ điện: Các điện trở (ví dụ 10k-ohm cho chân MCLR) và tụ điện (ví dụ 33pF cho bộ dao động) được sử dụng để ổn định và bảo vệ mạch.
Mạch cơ bản PIC16F877A
Giải thích mạch cơ bản:
- Chân số 1 (MCLR): Cấp nguồn 5V thông qua điện trở 10k-ohm để tránh reset ngoài ý muốn.
- Chân số 11 và 32 (Vdd): Cấp nguồn dương (+5V).
- Chân số 12 và 31 (Vss): Nối đất (GND).
- Chân số 13 và 14 (OSC1 và OSC2): Kết nối với bộ dao động tinh thể (ví dụ 16MHz) và tụ điện 33pF để cung cấp xung clock cho vi điều khiển.
Các Cổng (Ports) Của PIC16F877A
PIC16F877A có 5 cổng, mỗi cổng có các chân có thể được cấu hình làm đầu vào hoặc đầu ra:
- Cổng A: 6 chân (RA0 – RA5)
- Cổng B: 8 chân (RB0 – RB7)
- Cổng C: 8 chân (RC0 – RC7)
- Cổng D: 8 chân (RD0 – RD7)
- Cổng E: 3 chân (RE0 – RE2)
Để cấu hình một chân là đầu vào hay đầu ra, bạn cần sử dụng các thanh ghi TRIS tương ứng (TRISA, TRISB, TRISC, TRISD, TRISE). Gán giá trị 0 cho chân đầu ra và 1 cho chân đầu vào. Ví dụ, TRISD = 0x01 sẽ cấu hình 7 chân đầu tiên của cổng D là đầu ra và chân cuối cùng là đầu vào.
Trình Biên Dịch Cho PIC16F877A
Trình biên dịch chính thức cho PIC16F877A là MPLAB XC8, có sẵn trên trang web của Microchip. Bạn viết code bằng ngôn ngữ C, sau đó biên dịch để tạo ra file hex. File hex này sẽ được nạp vào vi điều khiển PIC thông qua các programmer như PicKit.
Giao Tiếp Nối Tiếp (UART)
PIC16F877A hỗ trợ giao tiếp nối tiếp thông qua cổng UART. Chân RC6 (TX) được sử dụng để truyền dữ liệu và chân RC7 (RX) được sử dụng để nhận dữ liệu. Giao tiếp nối tiếp rất hữu ích cho việc truyền dữ liệu giữa PIC16F877A và các thiết bị khác như máy tính hoặc các vi điều khiển khác.
Giao Tiếp I2C
PIC16F877A cũng hỗ trợ giao tiếp I2C, một giao thức giao tiếp nối tiếp hai dây thường được sử dụng để kết nối vi điều khiển với các cảm biến và thiết bị ngoại vi khác. Chân RC3 (SCL) là đường xung clock nối tiếp và chân RC4 (SDA) là đường dữ liệu nối tiếp.
Ngắt (Interrupts) Trên PIC16F877A
PIC16F877A có nhiều nguồn ngắt khác nhau, cho phép vi điều khiển phản ứng với các sự kiện một cách nhanh chóng và hiệu quả. Các nguồn ngắt bao gồm:
- Ngắt ngoài
- Ngắt bộ định thời (Timer0 / Timer1)
- Thay đổi trạng thái cổng B
- Bộ chuyển đổi A/D
- Nhận/truyền nối tiếp
- PWM (CCP1 / CCP2)
Các ngắt được quản lý thông qua các thanh ghi như INTCON, PIE1, PIR1, PIE2, và PIR2.
Kết Luận
PIC16F877A là một vi điều khiển mạnh mẽ và linh hoạt, phù hợp cho nhiều ứng dụng khác nhau. Bằng cách hiểu rõ về thông số kỹ thuật, sơ đồ chân, và các tính năng của nó, bạn có thể tận dụng tối đa khả năng của PIC16F877A trong các dự án điện tử của mình. Hy vọng bài viết này của Sen Tây Hồ đã cung cấp cho bạn những thông tin hữu ích và cần thiết.
