Таким чином, PIC 16/17/18 мають істотні переваги в порівнянні з іншими типами мікроконтролерів такого ж класу.
В даний час випускаються мікроконтролери з різним обсягом постійної й оперативної пам'яті, з різними типами тактових генераторів, з різною швидкодією і конструктивним виконанням, а також з різними функціональними можливостями. Конкретний тип мікроконтролера для рішення визначеної задачі можна вибрати використовуючи інформацію приведену в [1].
У залежності від технології виготовлення ПЗУ всі типи МК розділяються на п'ять груп:
1 Мікроконтролери, багаторазово програмовані користувачем, що, у свою чергу можуть бути розділені також на дві наступні групи:
1) Мікроконтролери з ультрафіолетовим витиранням. Ці МК оптимальні для експериментальних розробок і налагодження програм.
2) Мікроконтролери з багаторазово електрично програмованим користувачем ППЗУ (EEPROM) програм і даних. Ці МК дозволяють легко підбудовувати програму і дані під конкретні вимоги навіть після завершення асемблирування і тестування. Ця можливість може бути використана як для тиражування, так і для занесення каліброваних даних уже після остаточного тестування розробленого МКП.
Однак, дані МК мають обмежена кількість циклів перепрограмування.
2 Однократно програмовані мікроконтролери (ОТР).
Ці МК можуть бути однократно запрограмовані користувачем і застосовуються в тих випадках, коли немає необхідності часто змінювати зміст програми чи конфігурацію мікроконтролера в розробленому МКП.
3 Мікроконтролери, програмовані виготовлювачем (QTP). Ці МК є замовленими і цілком програмованими на заводі-виготовлювачі по заздалегідь наданої користувачемем інформації.
4 Мікроконтролери, послідовно програмовані виготовлювачем (SQTP). Це так само замовлені однократно програмовані на заводівиготовлювачі МК типу QTP, у яких декілька комірок, що задаються користувачем, у кожнім мікроконтролері програмуються різними серійними номерами.
5 Масочні мікроконтролери (ROM).
Ці МК також є замовленими і забезпечують максимально низьку вартість при крупносерійних замовленнях (наприклад, такими МК є PIC16CR54, PIC16CR56, PIC16CR57, PIC16CR58 і т.п.).
Для мікроконтролерних пристроїв (МКП) чи систем (МКС), програма яких може змінюватися, або містить які-небудь перемінні частини (таблиці, параметри калібрування, ключі і т.п.), випускаються мікроконтролери типу PIC 16F874(16F84) з багаторазово електрично перепрограмованою пам'яттю програм і даних – констант. Саме цей МК буде в основному використаний у прикладах, що будуть розглянуті далі. Це дозволить (при бажанні чи необхідності) перевірити роботу написаної і налагодженої програми за допомогою спеціальної макетної плати (універсальної – PICDEM-1, PICDEM-2, PICDEM-2plus чи саморобної – створеної самим користувачем).
Розглянемо особливості структурної організації, що виділяють PIC мікроконтролери серед інших ОМК такого ж класу, а також основні відмінності різних сімейств PIC друг від друга.
Для застосувань, пов'язаних із захистом інформації, кожен PIC має біт секретності, який може бути запрограмований для заборони прочитування програмного коду і ПЗП даних. При програмуванні спочатку записується програмний код, перевіряється на правильність запису, а потім встановлюється біт секретності. Якщо спробувати прочитати мікросхему зі встановленим бітом секретності, то для PIC16C5X старші 8 розрядів коду прочитуватимуться як 0, а молодші 4 розряди будуть скремблировані 12 розрядів команди. Для PIC16C84 аналогічні 7 старших розрядів прочитуватимуться нулями, а 7 молодших розрядів представлятимуть скремблировані 14 розрядів команди. Електрично перепрограмоване ПЗП даних PIC16C84 при установці біта захисту не може бути прочитане.
Мікроконтролери сімейства PIC мають дуже ефективну систему команд. Всі інструкції виконуються за один цикл, за винятком умовних переходів і команд, що змінюють програмний лічильник, які виконуються за 2 цикли. Один цикл виконання інструкції складається з 4 періодів тактової частоти. Таким чином, при частоті 4 Мгц, час виконання інструкції складає 1 мікросекунду. Кожна інструкція складається з 14 бітів, що діляться на код операції і операнд (можлива маніпуляція з регістрами, елементами пам'яті і безпосередніми даними). Висока швидкість виконання команд в PIC досягається за рахунок використання двохшинної Гарвардської архітектури замість традиційної одношинною ФонHеймановської. Гарвардська архітектура грунтується на наборі регістрів з розділеними шинами і адресним простором для команд і для даних. Hабіp регістрів визначає, що всі програмні об'єкти, такі як порти введення/виводу, елементи пам'яті і таймери, є фізично pеализовані апаратні регістри. Пам'ять даних (ОЗП) для PIC16CXX має розрядність 8 бітів, пам'ять програм (ППЗП) має розрядність 12 бітів для PIC16C5X і 14 бітів для PIC16ХXX. Використання Гарвардської архітектури дозволяє досягти високої швидкості виконання бітових, байтових і регістрових операцій. Крім того, Гаpвадська архітектура допускає конвейєрне виконання інструкцій, коли одночасно виконується поточна інструкція і прочитується наступна. У традиційній же Фон-Hеймановській архітектурі команди і дані передаються через одну шину, що розділяється або мультиплексується, тим самим обмежуючи можливості конвейєризації. Писати програми для PIC не складніше, ніж для будь-якого іншого процесора. Логіка, і лише логіка... Звичайно, Гарвардська архітектура і велика розрядність команди дозволяють зробити код для PIC значно компактнішим, ніж для інших мікроконтролерів і істотно підвищити швидкість виконання програм.
Всі програмні об'єкти, з якими може працювати PIC, є фізичні регістри. Щоб зрозуміти, як працює PIC, потрібно розібратися з тим, які регістри у нього існують і як з кожним з них працювати.
РЕГІСТР НЕПРЯМОЇ АДРЕСАЦІЇ . Регістр непрямої адресації фізично не існує. Він використовується для непрямої вибірки одного з 64 можливих регістрів.
РЕГІСТР ТАЙМЕРА/ЛІЧИЛЬНИКА TMRХ. Регістр
таймера/лічильника TMRХ може бути записаний і прочитаний як і будьякий інший регістр. TMRХ може збільшуватися по зовнішньому сигналу, що подається на виведення RTCC, або по внутрішній частоті, відповідній частоті команд. Основне застосування таймера/лічильника - підрахунок числа зовнішніх подій і вимірювання часу. Сигнал від зовнішнього або внутрішнього джерела також може бути заздалегідь поділений за допомогою вбудованого в PIC програмованого дільника.
ПРОГРАМНИЙ ЛІЧИЛЬНИК PCL. Програмний лічильник (РС) використовується для генерації послідовності адрес комірок ПЗП програми, що містять 14-pозpядні команди. РС має розрядність 13 бітів, що дозволяє прямо адресувати 8Кх14 комірок ПЗП.
РЕГІСТР СЛОВА СТАНУ STATUS. Регістр слова стану схожий на регістр PSW, що існує в більшості мікропроцесорів. У нім знаходяться біти перенесення, десяткового перенесення і нуля, а також біти режиму включення і біти сторінкової адресації.
РЕГІСТР ВИБОРУ FSR. Регістр вибору FSR використовується разом з регістром непрямої адресації для непрямої вибірки одного з 64 можливих регістрів. Фізично задіяно 36 регістрів ОЗП користувача, розташованих по адресах 0Ch-2Fh і 15 службових регістрів, розташованих по різних адресах.
РЕГІСТРИ ВВЕДЕННЯ/ВИВОДУ PORTХ Регістри можуть бути
індивідуально запрограмовані як входи або виходи за допомогою регістра TRISХ. Завдання 1 в розряді регістра TRIS програмує відповідний розряд порту як вхід. При читанні порту прочитується безпосередній стан виводу, при записі в порт запис відбувається в буферний регістр.
РЕГІСТРИ ЭППЗУ EEDATA, EEADR. PIC16ХХХ має вбудоване електрично перепрограмувальне ПЗП, яке може бути прочитане і записане за допомогою регістра даних EEDATA і регістра адреси EEADR. Запис нового байта триває близько 10 мсек і управляється вбудованим таймером. Управління записом і прочитуванням здійснюється через регістр EECON1. Для додаткового контролю за записом служить регістр EECON2.
РЕГІСТРИ ЗАГАЛЬНОГО ПРИЗНАЧЕННЯ. Регістри загального призначення є статичним ОЗП.
СПЕЦІАЛЬНІ РЕГІСТРИ W, INTCON, OPTION. На завершення розглянемо спеціальні регістри PIC. До них відносяться робочий регістр W, використовуваний в більшості команд як регістр акумулятора і регістри INTCON і OPTION. Регістр переривань INTCON (адреса 0Bh) служить для управління режимами переривання і містить біти дозволу переривань від різних джерел і прапори переривань. Регістр режимів OPTION (адреса 81h) служить для завдання джерел сигналу для попереднього дільника і таймера/лічильника, а також для завдання коефіцієнта ділення попереднього дільника, активного фронту сигналу для RTCC і входу переривання. Крім того за допомогою регістра OPTION можуть бути включені резистори навантажень для розрядів порту B, запрограмованих як входи.
Сторожовий таймер WDT призначений для запобігання катастрофічним наслідкам від випадкових збоїв програми. Він також може бути використаний в додатках, пов'язаних з відліком часу, наприклад, в детекторі пропущених імпульсів. Ідея використання сторожового таймера полягає в регулярному його скиданні під управлінням програми або зовнішньої дії до того, як закінчиться його витримка часу і не відбудеться скидання процесора. Якщо програма працює нормально, то команда скидання сторожового таймера CLRWDT повинна регулярно виконуватися, оберігаючи процесор від скидання. Якщо ж мікропроцесор випадково вийшов за межі програми (наприклад, від сильної перешкоди по ланцюгу живлення) або зациклився на якій-небудь ділянці програми, команда скидання сторожового таймера швидше за все не буде виконана протягом достатнього часу, і відбудеться повне скидання процесора, що ініціалізує всі регістри і приводить систему в робочий стан. Сторожовий таймер не вимагає яких-небудь зовнішніх компонентів і працює на вбудованому генераторі RC, причому генерація не припиняється навіть у разі відсутності тактової частоти процесора. Типовий період сторожового таймера 18 мсек. Можна підключити попереднього дільника на сторожовий таймер і збільшити його період аж до 2 сек. Ще однією функцією сторожового таймера служить включення процесора з режиму зниженого енергоспоживання, в який процесор переводиться командою SLEEP. У цьому режимі PIC споживає дуже малий струм - близько 1 мкА. Перейти з цього режиму в робочий режим можна або по зовнішній події натиснення кнопки, спрацьовуванню датчика, або по сторожовому таймеру.