Перейти к содержанию

Микроконтроллеры PIC

PIC — микроконтроллеры Microchip: 8-битные PIC10, PIC12, PIC16 и PIC18, 16-битные PIC24 и dsPIC33 и 32-битные PIC32 и dsPIC33A. Здесь — чем различаются их ядра, как выбрать семейство, что Microchip сообщает о классических PIC16F877A, PIC16F628A, PIC12F675 и PIC18F4550 и чем PIC программируют.

PIC — общее название микроконтроллеров Microchip Technology. Внутри него несколько разных архитектур: 8-битные ядра baseline, mid-range, enhanced mid-range и PIC18, 16-битное ядро PIC24 и dsPIC33 (кроме нового 32-битного dsPIC33A) и 32-битные PIC32 на ядрах MIPS32 и Arm Cortex-M. Объединяет их общая экосистема — среда MPLAB X IDE, компиляторы MPLAB XC и программаторы PICkit, — а не система команд. Как устроено ядро mid-range классических PIC16, разобрано в статье «Система команд PIC16».

Коротко

  • 8-битные PIC различают по длине слова команды: 12 бит у baseline (PIC10F200 — 33 команды), 14 бит у mid-range (PIC16F877A — 35 команд) и enhanced mid-range (PIC16F1825 — 49 команд), 16 бит у PIC18 (PIC18F4550 — 75 команд и 8 расширенных).
  • Машинный цикл 8-битных PIC — 4 периода генератора: PIC16F877A на 20 МГц выполняет команду за 200 нс.
  • Аппаратный стек — 2 уровня у PIC10F200, 8 у PIC16F877A, 16 у PIC16F1825, 31 у PIC18F4550; у 16-битных PIC24 и dsPIC33 стек программный, в ОЗУ.
  • PIC24 и dsPIC33F/E/C — 16-битные данные, 24-битные команды, до 105 команд; dsPIC добавляет команды цифровой обработки сигналов. Новое семейство dsPIC33A — 32-битное.
  • PIC32M — 32-битное ядро MIPS32, PIC32C — ядра Arm Cortex-M, например Cortex-M23 и Cortex-M7.

Семейства и ядра

ЯдроПримерыДанныеСлово командыКомандАппаратный стекПамять программ
BaselinePIC10F2008 бит12 бит332 уровняу PIC10F200 — 256 слов
Mid-rangePIC12F675, PIC16F628A, PIC16F877A8 бит14 бит358 уровнейядро адресует 8K слов: 13-битный счётчик команд
Enhanced mid-rangePIC16F1825, PIC16F188778 бит14 бит4916 уровнейядро адресует 32K слов: 15-битный счётчик
PIC18PIC18F45508 бит16 бит; 4 команды основного набора и 2 расширенного занимают по 2 слова75 + 831 уровеньядро адресует 2 МБ: 21-битный счётчик
PIC24, dsPIC33F/E/CPIC24F, dsPIC33CK256MP50816 бит24 битадо 105программный, указатель W15ядро адресует 4M слов по 24 бита: 23-битный счётчик
PIC32MPIC32MX270F256B, PIC32MZ EF32 битаMIPS32; сжатые режимы MIPS16e и microMIPS——у PIC32MZ EF до 2 МБ
PIC32CPIC32CM, PIC32CZ32 битаArm Cortex-M——у PIC32CZ4010CA91208 4 МБ

Числа взяты из даташитов кристаллов в колонке «Примеры» и из руководства программиста 16-битных ядер DS70000157G; у 32-битных ядер число команд и стек в даташитах PIC32 одним числом не приводятся. Деление 8-битных PIC по длине слова команды — 12, 14 и 16 бит — Microchip использует ещё с 1990-х: так устроено справочное руководство по ядру mid-range DS33023A.

Baseline. Самые простые PIC: у PIC10F200 256 слов флеш-памяти, 16 байтов ОЗУ, три линии ввода-вывода и одна только на вход, внутренний генератор 4 МГц с точностью ±1 %, корпуса SOT-23-6, PDIP-8 и DFN-8. Команд 33: нет ADDLW, SUBLW, RETURN и RETFIE, подпрограмма возвращается только через RETLW, а направление выводов задаёт команда TRIS. Стек на 2 уровня: третий вложенный вызов затирает самый старый адрес возврата.

Mid-range. Классическое ядро PIC12F675, PIC16F628A, PIC16F877A и их ровесников: 35 команд, аккумулятор W, банки памяти данных по 128 байтов и страницы памяти программ по 2K слов, стек на 8 уровней без признака переполнения. Подробно — в статье «Система команд PIC16».

Enhanced mid-range. Ядро семейств PIC12F1xxx и PIC16F1xxx — например, PIC12F1822, PIC16F1825 и PIC16F18877: 49 команд, стек на 16 уровней с флагами переполнения, аппаратное сохранение W, STATUS, BSR, FSR и PCLATH при прерывании, два 16-битных указателя FSR, через которые видна вся память данных и память программ. У PIC16F1825 и PIC16F18877 частота — до 32 МГц (цикл 125 нс).

PIC18. У PIC18F4550 слово команды 16-битное, а MOVFF, CALL, GOTO и LFSR занимают по два слова. Стек на 31 уровень по 21 бит доступен программе через указатель STKPTR и регистры вершины стека, есть аппаратный умножитель 8 × 8 за один цикл. Расширенный набор из 8 команд включается битом конфигурации XINST и рассчитан на программный стек компилятора; две его команды, MOVSF и MOVSS, тоже занимают по два слова (табл. 26-3 даташита).

PIC24 и dsPIC33F/E/C. 16-битное ядро с 16 рабочими регистрами W0–W15, из которых W15 служит указателем программного стека, 24-битным словом команды и умножителем 17 × 17 бит. Набор команд у PIC24 и dsPIC почти одинаков; dsPIC добавляет команды цифровой обработки сигналов с 40-битными аккумуляторами. dsPIC33CK256MP508 по даташиту DS70005349K работает от 3,0–3,6 В и выполняет до 100 млн команд в секунду при температуре до +125 °C, флеш-памяти в семействе 32–256 КБ, ОЗУ 8–24 КБ. Руководство программиста DS70000157G описывает именно эти семейства — PIC24F/H/E, dsPIC30F, dsPIC33F, dsPIC33E и dsPIC33C. Новое семейство dsPIC33A Microchip описывает как 32-битное: 200 МГц и блок операций с плавающей точкой двойной точности. У маломощных PIC24F, по сайту Microchip, от 16 КБ до 1 МБ флеш-памяти и от 28 до 121 вывода, а набор команд у всего семейства общий.

PIC32. Microchip делит 32-битные PIC на две линии. PIC32M построены на ядре MIPS32: у PIC32MX1xx/2xx это M4K с пятиступенчатым конвейером, до 50 МГц и питание 2,3–3,6 В; у PIC32MZ EF — ядро M-Class на 252 МГц с блоком плавающей точки для 32- и 64-битных чисел, до 2 МБ флеш-памяти и 512 КБ ОЗУ. PIC32C Microchip представляет вместе с микроконтроллерами SAM как линейку на ядрах Arm Cortex-M — от M0+ до M7 и M23/M33; в таблице на сайте, например, PIC32CM5112GC00048 на Cortex-M23 (72 МГц, 512 КБ флеш-памяти, 128 КБ ОЗУ) и PIC32CZ4010CA91208 на Cortex-M7 (300 МГц, 4 МБ и 1 МБ).

Как выбрать PIC

  1. Для нового 8-битного проекта смотрите на ядро enhanced mid-range или PIC18. На страницах классических кристаллов Microchip указывает более новые (строка Newer Device Available): PIC16F877A → PIC16F18877, PIC16F628A → PIC16F18444, PIC12F675 → PIC16F18313, PIC18F4550 → PIC18F45K50, PIC10F200 → PIC10F322.
  2. Питание 5 В. Классические 8-битные PIC работают до 5,5 В: PIC16F877A — от 4,0 В (низковольтный PIC16LF877A — от 2,0 В), PIC16F18877 — от 2,3 В. 32-битные PIC32MX и PIC32MZ рассчитаны на 2,3–3,6 и 2,1–3,6 В, dsPIC33CK — на 3,0–3,6 В.
  3. USB на 8-битном кристалле — PIC18F4550: USB 2.0 Full Speed 12 Мбит/с со встроенным трансивером и стабилизатором 3,3 В. Его более новый аналог по сайту Microchip, PIC18F45K50, тоже с модулем USB 2.0, а его внутренний генератор 48 МГц подстраивается по сигналам USB-хоста до точности, достаточной для USB.
  4. Управление двигателями и цифровые источники питания — dsPIC33: у dsPIC33C по сайту Microchip частота 100 МГц, АЦП 3,5 млн выборок/с и ШИМ с разрешением 250 пс, у dsPIC33A — 200 МГц, АЦП 40 млн выборок/с и ШИМ 78 пс.
  5. Высокая производительность и плавающая точка — PIC32MZ EF с FPU на 252 МГц или PIC32C на Cortex-M7, например PIC32CZ4010CA91208 на 300 МГц.

Сравнение с другими семействами — на странице «Микроконтроллеры». 8-битные AVR теперь тоже выпускает Microchip; другие архитектуры для простых устройств — 8-битные 8051 и 16-битные MSP430.

Классические PIC: PIC12F675, PIC16F628A, PIC16F877A, PIC18F4550

Эти четыре кристалла чаще всего встречаются в старых схемах и учебниках. На сайте Microchip все они 20 октября 2026 года числились в статусе In Production — выпускаются и продаются, — но у каждого указан более новый аналог.

ПараметрPIC12F675PIC16F628APIC16F877APIC18F4550
Ядроmid-rangemid-rangemid-rangePIC18
Флеш-память1024 слова2048 слов8192 слова (14,3 КБ)32 КБ, 16 384 команды
ОЗУ64 байта224 байта368 байтов2048 байтов
EEPROM128 байтов128 байтов256 байтов256 байтов
Линии ввода-вывода6, GP3 только вход163335
10-битный АЦП4 каналанет8 каналов13 каналов
Связь—USARTUSART, MSSP: SPI и I²CUSB 2.0, EUSART, MSSP: SPI и I²C
Таймеры 8/16 бит1/12/12/11/3
Компараторы1222
Частотадо 20 МГц; внутренний генератор 4 МГц ±1 %до 20 МГц; внутренние 4 МГц ±1 % и 48 кГцдо 20 МГцдо 48 МГц
Питание2,0–5,5 В при частоте до 4 МГц без АЦП; выше 10 МГц — 4,5–5,5 В3,0–5,5 В; PIC16LF628A — 2,0–5,5 В4,0–5,5 В; PIC16LF877A — 2,0–5,5 В4,2–5,5 В; PIC18LF4550 — 2,0–5,5 В, с ФАПЧ — от 3,0 В
Корпуса8 выводов: PDIP, SOIC, DFN18 выводов: PDIP, SOIC; SSOP-20; QFN-28PDIP-40; PLCC-44, TQFP-44, QFN-44PDIP-40; TQFP-44, QFN-44
ДаташитDS41190GDS40044GDS39582CDS39632E
Новее, по сайту MicrochipPIC16F18313PIC16F18444PIC16F18877PIC18F45K50

PIC12F675. Восьмивыводной кристалл с АЦП. Заводская калибровка внутреннего генератора хранится в последней ячейке памяти программ, 3FFh, в виде команды RETLW с константой; программа вызывает её и записывает результат в OSCCAL. Стирание кристалла стирает и эту константу, поэтому перед стиранием её сохраняют — программаторы Microchip делают это сами. Вывод GP3 совмещён с MCLR и работает только на вход, а выводы АЦП и компаратора после сброса аналоговые: перед цифровым вводом настраивают ANSEL и CMCON.

PIC16F628A. 18-выводной кристалл без АЦП, но с двумя компараторами, USART, модулем CCP и внутренним генератором 4 МГц — внешний кварц для простых устройств не нужен. После сброса компараторы включены и выводы RA0–RA3 аналоговые; запись 0x07 в CMCON отключает компараторы.

PIC16F877A. 40-выводной кристалл с 8-канальным АЦП, двумя модулями CCP (ШИМ до 10 бит), USART и MSSP для SPI и I²C. Скорость UART задаёт регистр SPBRG: при BRGH = 1 скорость равна fOSC/(16 · (SPBRG + 1)). Для 9600 бод при кварце 20 МГц даташит даёт SPBRG = 129: фактическая скорость 9615 бод, ошибка +0,16 %. Выводы PORTA и PORTE после включения питания — аналоговые входы, цифровыми их делает регистр ADCON1. Символьный ЖК-индикатор на HD44780 подключают к выводам портов по 8- или 4-битной шине.

PIC18F4550. 8-битный PIC со встроенным USB 2.0: скорости Low Speed 1,5 Мбит/с и Full Speed 12 Мбит/с, до 32 конечных точек, 1 КБ двухпортового ОЗУ для USB, трансивер и стабилизатор 3,3 В на кристалле. Для Full Speed модулю USB нужна тактовая частота 48 МГц, обычно её получают встроенной ФАПЧ от кварца. Архитектуру PIC18 с аппаратным умножителем 8 × 8 и стеком на 31 уровень Microchip называет оптимизированной для компилятора C.

Инструменты Microchip

  • MPLAB X IDE — бесплатная среда разработки и отладки для большинства микроконтроллеров Microchip. На 20 октября 2026 года актуальна версия 6.35 от 24 июля 2026 года; в комплект входит MPLAB IPE для серийного программирования. Microchip рекомендует для новых и старых проектов переходить на расширения MPLAB для VS Code. Версия 6.20 — последняя с поддержкой PICkit 3, MPLAB ICD 3 и MPLAB REAL ICE.
  • Компиляторы MPLAB XC — XC8 для всех 8-битных PIC и AVR, XC16 для 16-битных PIC24, XC-DSC для dsPIC, XC32 для PIC32 и SAM на ядрах MIPS и Arm. Все бесплатны, включая оптимизации бывших платных версий PRO. В пакет XC8 (версия 4.00 от 8 июля 2026 года) входит ассемблер PIC Assembler; для переноса кода с прежнего ассемблера MPASM Microchip выпустила отдельное руководство.
  • MPLAB PICkit 5 (PG164150) — программатор-отладчик для PIC, dsPIC, AVR и SAM: ICSP, JTAG и SWD, автономная прошивка по кнопке и через приложение на смартфоне по Bluetooth. Работает с MPLAB X IDE начиная с версии 6.10.
  • MPLAB Snap (PG164100) — самый недорогой отладчик Microchip для PIC, dsPIC, AVR и SAM с 8-контактным разъёмом; для ICSP ему хватает двух выводов микроконтроллера и линии сброса. Microchip предупреждает, что часть старых кристаллов Snap может не поддерживать.

Обзор сред и программ для прошивки других семейств — в разделе «Программы».

ICSP: что подключать

Внутрисхемное программирование ICSP использует две сигнальные линии — тактовую PGC и линию данных PGD — плюс MCLR/VPP, питание и землю. У PIC16F877A это выводы RB6/PGC и RB7/PGD. Есть две особенности. Полное стирание, в том числе снятие защиты кода, требует питания 4,5–5,5 В. И с завода включено низковольтное программирование: бит LVP = 1 отдаёт вывод RB3/PGM под вход режима программирования, и высокий уровень на нём переводит кристалл в этот режим. Если LVP не нужен, его сбрасывают в 0, но сделать это можно только высоковольтным программированием — с напряжением VIHH на MCLR. По руководствам пользователя Microchip высоковольтное программирование PIC поддерживает PICkit 5, а MPLAB Snap его не умеет. Нижний предел питания цели для высоковольтного входа PICkit 5 руководство называет по-разному: 1,8 В в разд. 2.1 и 2,8 В в табл. 9-4 — надёжнее рассчитывать на 2,8 В. Подробно — сигналы, вход по ключу MCHP у новых PIC16, схема у MCLR, разъёмы программаторов и MPLAB IPE — в статье «Программирование PIC через ICSP».

На старом gaw.ru был раздел о PIC; его адреса теперь ведут сюда.

Готовятся к публикации

Конфигурационные биты PIC · PIC16F877A: распиновка · Таймеры PIC16

Частые вопросы

Чем заменить PIC16F877A в новом проекте?

На сайте Microchip PIC16F877A по-прежнему в статусе In Production, но рядом указан более новый кристалл — PIC16F18877. По даташиту DS40001825F у него ядро enhanced mid-range с 49 командами и стеком на 16 уровней, 32K слов (56 КБ) флеш-памяти, 4 КБ ОЗУ, 256 байтов EEPROM, частота до 32 МГц и питание 2,3–5,5 В; есть корпус PDIP-40. Код на ассемблере придётся переносить: адреса регистров и схема банков у двух ядер разные.

Чем прошить PIC?

Программатором-отладчиком Microchip через интерфейс ICSP: нужны линии тактов и данных (у PIC16F877A — RB6/PGC и RB7/PGD), MCLR/VPP, питание и земля. Microchip сейчас выпускает MPLAB PICkit 5 и недорогой MPLAB Snap, они работают с MPLAB X IDE; для серийного программирования в комплекте IDE есть MPLAB IPE. Учтите, что Snap не умеет высоковольтное программирование, и кристаллы, которым оно нужно, он не поддерживает, а PICkit 5 умеет. Старый PICkit 3 поддерживается только до MPLAB X IDE v6.20 включительно.

Зачем на PIC16F877A подтягивать RB3 к земле?

С завода в PIC16F877A включено низковольтное программирование: бит LVP конфигурации равен 1, и вывод RB3/PGM отдан под вход режима программирования. Если он висит в воздухе или на нём появится высокий уровень, микроконтроллер может войти в режим программирования. Выход — держать RB3 на земле или записать LVP = 0, но сбросить этот бит можно только высоковольтным программированием с VIHH на MCLR. По руководствам Microchip такой режим поддерживает PICkit 5, а MPLAB Snap — нет.

Бесплатен ли компилятор MPLAB XC8?

Да. По сайту Microchip все компиляторы MPLAB XC, включая XC8 для 8-битных PIC и AVR, бесплатны, а оптимизации прежних платных версий PRO теперь тоже доступны без оплаты; XC8 начиная с v4.00 не требует ключа. Для 16-битных PIC24 служит XC16, для dsPIC — XC-DSC, для PIC32 и SAM — XC32. В пакет XC8 входит и ассемблер PIC Assembler.

Сколько команд у PIC?

Зависит от ядра. Baseline (PIC10F200) — 33 команды по 12 бит, mid-range (PIC16F877A, PIC16F628A, PIC12F675) — 35 команд по 14 бит, enhanced mid-range (PIC16F1825, PIC16F18877) — 49 команд по 14 бит, PIC18 (PIC18F4550) — 75 команд с 16-битным словом (четыре из них занимают по два слова) и ещё 8 в расширенном наборе. У 16-битных PIC24 и dsPIC30F/33F/33E/33C команды 24-битные, и их до 105 в зависимости от семейства.