Что такое PIC
PIC (Peripheral Interface Controller) — семейство 8-, 16- и 32-разрядных микроконтроллеров компании Microchip Technology. Первые PIC появились ещё в конце 1970-х и за десятилетия стали одними из самых массовых МК в любительской и промышленной электронике благодаря низкой цене, широкой номенклатуре, простой обвязке и огромному сообществу.
В основе PIC — гарвардская архитектура (раздельные шины и память программ и данных) и RISC-набор команд: у младших ядер всего 33–35 инструкций, у PIC18 — около 75. Память программ — энергонезависимая Flash (в старых сериях — OTP или УФ-стираемая), что позволяет перепрошивать контроллер многократно прямо в плате.
Семейства PIC
Линейка охватывает всё — от 6-выводных «малышей» до 32-битных чипов с Ethernet и USB. Разрядность в таблице — это ширина команды; данные у 8-битных ядер всегда байтовые.
| Семейство | Ядро | Команда | Кратко |
|---|---|---|---|
| PIC10 / PIC12 | baseline | 12 бит | Мини-корпуса 6–8 выводов, простейшие задачи |
| PIC12 / PIC16 | mid-range | 14 бит | Самое массовое, богатая периферия, ADC, USART |
| PIC18 | enhanced | 16 бит | 8-битные данные, оптимизирован под язык C, USB, CAN |
| PIC24 / dsPIC | 16-бит | 24 бит | 16-битные МК и цифровые сигнальные контроллеры (DSP) |
| PIC32 | MIPS32 | 32 бит | Производительные 32-битные чипы, графика, связь |
Для радиолюбителя «золотая середина» — mid-range PIC16: достаточно ресурсов, много готовых примеров, простая прошивка. PIC18 берут, когда нужен комфортный C и периферия вроде USB.
Архитектура и регистры
Вычислительное ядро строится вокруг рабочего регистра W (аккумулятор): почти все операции идут через него. Оперативная память организована как регистровый файл и делится на регистры специального назначения (SFR — управляют периферией) и регистры общего назначения (GPR — переменные пользователя).
У mid-range память данных разбита на банки; переключение выполняется битами RP0/RP1 в регистре STATUS. Аппаратный стек (8 уровней у mid-range) хранит только адреса возврата и недоступен напрямую. Конвейер «выборка/исполнение» даёт выполнение большинства команд за один машинный цикл (4 такта кварца).
Память
В PIC три вида памяти, и это важно не путать:
- Flash (память программ) — хранит прошивку; измеряется в «словах» (14-битных у mid-range), а не в байтах.
- RAM (память данных) — SFR + GPR, обнуляется при выключении.
- EEPROM (данные) — небольшая энергонезависимая область для настроек, калибровок, счётчиков; переживает выключение питания.
Тактирование
Источник тактовой частоты выбирается конфигурационными битами при прошивке. Основные режимы генератора:
| Режим | Назначение |
|---|---|
| LP | Низкочастотный кварц (часовой 32.768 кГц) |
| XT | Кварц среднего диапазона (до ~4 МГц) |
| HS | Высокочастотный кварц (4–20 МГц) |
| RC / EXTRC | Внешняя RC-цепочка (дёшево, неточно) |
| INTOSC | Встроенный генератор — экономит выводы под кварц |
Один машинный цикл = 4 периода тактовой частоты. При кварце 4 МГц команда выполняется за 1 мкс — удобно для прикидок задержек.
Периферия
Даже недорогие PIC16 несут внушительный набор встроенных модулей:
- Порты ввода-вывода (PORTA/B/C…), направление задаётся регистрами
TRISx. - Таймеры TMR0/1/2 — счёт, задержки, генерация меток времени.
- CCP — захват/сравнение/ШИМ (PWM) для управления двигателями, светодиодами.
- АЦП (ADC) 8/10/12 бит — измерение аналоговых сигналов.
- USART/EUSART — асинхронный последовательный порт (UART) для связи с ПК и модулями.
- MSSP — аппаратные SPI и I²C.
- Компараторы, опорное напряжение, сторожевой таймер WDT, детектор просадки питания BOR.
Расчёт делителя UART под кварц удобно сделать в калькуляторе UART, а собрать значение управляющего регистра по битам — в конструкторе регистра.
Конфигурационные биты
Перед работой в прошивку зашиваются биты конфигурации (__CONFIG в ассемблере или #pragma config в XC8). Они задают режим генератора, включают/выключают сторожевой таймер, защиту кода, таймер запуска питания (PWRT) и сброс по просадке (BOR). Неверный FOSC — самая частая причина «мёртвого» контроллера: кварц стоит, а чип молчит.
// PIC16F877A, XC8 — пример конфигурации
#pragma config FOSC = HS // кварц 4-20 МГц
#pragma config WDTE = OFF // сторожевой таймер выключен
#pragma config PWRTE = ON // таймер включения питания
#pragma config BOREN = ON // сброс по просадке питания
#pragma config LVP = OFF // низковольтное программирование выкл.
#pragma config CP = OFF // защита кода выкл.
Популярные контроллеры
| Модель | Выв. | Flash | RAM | EEPROM | Особенности |
|---|---|---|---|---|---|
| PIC12F675 | 8 | 1K | 64 Б | 128 Б | ADC, компаратор — «малыш» для мелких задач |
| PIC16F84A | 18 | 1K×14 | 68 Б | 64 Б | Легендарный учебный МК |
| PIC16F628A | 18 | 2K | 224 Б | 128 Б | USART, компараторы, внутр. генератор |
| PIC16F877A | 40 | 8K | 368 Б | 256 Б | ADC 10 бит, USART, MSSP, CCP — «рабочая лошадка» |
| PIC16F887 | 40 | 8K | 368 Б | 256 Б | nanoWatt, расширенная периферия |
| PIC18F4550 | 40 | 32K | 2K | 256 Б | USB 2.0, под язык C |
Цоколёвку PIC16F84A и других ходовых корпусов смотри в справочнике цоколёвок.
Программирование
Прошивка (ICSP)
PIC прошиваются внутрисхемно — ICSP (In-Circuit Serial Programming) — по пяти линиям: MCLR/VPP (напряжение программирования), PGD (данные, обычно RB7), PGC (такт, RB6), а также VDD и VSS. Программатор — PICkit (3/4) или ICD; клоны PICkit2 до сих пор популярны у любителей.
Среда и компиляторы
Официальная среда — MPLAB X IDE (бесплатно, Windows/Linux/macOS). Компиляторы Microchip: XC8 (8-битные PIC), XC16 (PIC24/dsPIC), XC32 (PIC32). Исторически применялись HI-TECH C, CCS C, mikroC и ассемблер MPASM.
// «Мигалка» светодиодом на RB0, XC8
#include <xc.h>
#define _XTAL_FREQ 4000000 // кварц 4 МГц для __delay_ms
void main(void) {
TRISB0 = 0; // RB0 — выход
while (1) {
RB0 = 1; __delay_ms(500);
RB0 = 0; __delay_ms(500);
}
}
Готовый HEX-файл прошивки удобно проверить в разборе Intel HEX (контрольные суммы, адреса, точка входа), а данные протоколов посчитать в CRC и конвертере систем счисления.
С чего начать
- Возьми PIC16F628A или PIC16F877A — много примеров и недорого.
- Поставь MPLAB X + XC8 и программатор PICkit.
- Собери «мигалку», убедись, что верно выбран
FOSCи подтянутMCLR. - Дальше — UART для связи с ПК, ADC для датчиков, ШИМ для нагрузки.
PIC и AVR решают схожие задачи; если интересно сравнение — загляни в раздел AVR контроллеры.
Смотрите также: AVR контроллеры · ПЛИС · I²C.