Vi mạch PIC16F877A là một máy tính có tập lệnh giảm thiểu hiệu năng cao RISC (Redunce Instruction Set Computer). Tất cả các lệnh được thực hiện trong một chu kỳ duy nhất, ngoại trừ các nhánh của chương trình được thực hiện trong 2 chu kỳ. PIC16F877A có bộ nhớ Flash (Flash Program Memory) lên tới 8K x 14
words (1 word=2bytes), 368 x 8 bytes bộ nhớ dữ liệu (RAM), 156 x 8 bytes bộ nhớ dữ liệu EEPROM. Các đặc trưng ngoại vi mở rộng cũng có được ở kiểu bộ vi điều khiển này. Hơn nữa, bộ vi điều khiển này cũng cung cấp chuẩn giao tiếp ngoại vi đồng bộ/không đồng bộ USART (Universal Synchronous Asynchronous Receiver Transmitter) để sử dụng cho truyền thông.
Vi mạch PIC16F877 được đóng gói nhựa, gồm có 40 chân dạng gói PDIP (Plastic Dual In-line) và SOIC (Plastic Small Outline). Gói PDIP 40 chân được dùng để thuận tiện cho hàn tay. Gói khác thì sử dụng công nghệ dán bề mặt (SMT – Surface Mount Technology) và khó khi hàn tay.
a. Hình ảnh và sơ đồ chân của PIC16F877.
Hình 3.7: Sơ đồ chân của PIC16F877
b. Cấu trúc I/O (input/output) :
Pic 16F877a có 5 port có chức năng I/O
* Port A : (RA0 - RA5), port A được điều khiển bởi thanh ghi trisA. Ngoài ra port A còn là ngõ ra của bộ chuyễn đổi ADC, bộ so sánh điện áp và là ngõ vào của xung Clock cho Timer 0 hoạt động.
* Port B : (RB0 - RB7) 8 bit I/O cũng được điều khiển bởi thanh ghi trisB, ngoài ra Port B còn liên quan đến tính năng ngắt ngoại vi.
* Port C : (RC0 - RC7) 8 bit I/O cũng được điều khiển bỡi thanh ghi trisC, bên cạnh đó port C còn có các chân có tính năng so sánh, đồng thời là ngõ vào xung Clock của bộ Timer 1 và các chuẩn giao tiếp nối tiếp.
* Port D : (RD0 - RD7) : 8 bit I/O được điều khiển bỡi thanh ghi trisD. Port E : (RE0 - RE2) : 3 bit I/O được điều khiển bởi thanh ghi trisE, ngoài ra còn có tính năng nhận ngõ vào Analog để thực hiện chuyễn đỗi ADC.
Gồm 2 bộ nhớ : bộ nhớ chương trình (ROM) và bộ nhớ dữ liệu (RAM) * Bộ nhớ chương trình : 8 kword có khả năng lập trình 8192 lệnh
* Bộ nhớ dữ liệu : 4 bank , mỗi bank chứa 128 byte dữ liệu. d. Bộ định thời (Timer) :
Gồm 3 bộ : Timer0, Timer1, Timer2.
* Timer 0 : là bộ đếm 8 bit , giá trị đếm nằm trong thanh ghi TMR0 (8 bit). * Timer 1: 16 bit , giá trị đếm nằm trong 2 thanh ghi TMR1H (chứa bit cao) và TMR1L (chứa bit thấp).
* Timer 2 : 8 bit giống timer0 nhưng tần số định thời có thể thay đổi được.