Для мікроконтролерів сімейства PIC можливе використання чотирьох типів тактового генератора: XT кварцовий резонатор, HS високочастотний кварцовий резонатор, LP мікроспоживаючий кварцовий резонатор і RC ланцюжок. Завдання типу використовуваного тактового генератора здійснюється в процесі програмування мікросхеми. У разі завдання варіантів XT, HS і LP до мікросхеми підключається кварцовий або керамічний резонатор або зовнішнє джерело тактової частоти, а у разі завдання варіанту RC - резистор і конденсатор. Звичайно, керамічний і, особливо, кварцовий резонатор значно точніший і стабільніший, але якщо висока точність відліку часу не потрібна, використання RC генератора може зменшити вартість і габарити пристрою.
Мікроконтролери сімейства PIC використовують внутрішню схему скидання по включенню живлення у поєднанні з таймером запуску генератора, що дозволяє в більшості ситуацій обійтися без традиційного резистора і конденсатора. Досить просто підключити вхід MCLR до джерела живлення. Якщо при включенні живлення можливі імпульсні перешкоди або викиди, то краще використовувати послідовний резистор 100-300 Ом. Якщо живлення наростає дуже поволі (повільніше, ніж за 70 мсек), або Ви працюєте на дуже низьких тактових частотах, то необхідно використовувати традиційну схему скидання з резистора і конденсатора.
• Високошвидкісна архітектура RISC.
• 35 інструкцій.
• Всі команди виконуються за один цикл, окрім інструкцій переходів, що виконуються за два цикли.
• Тактова частота:
DC - 20МГц, тактовий сигнал DC - 200нс, один машинний цикл.
• 8к х 14 слів FLASH пам'яті програм. • 368 байтів пам'яті даних (ОЗП).
• 256 EEPROM пам'яті даних.
• Сумісність по виводах з PIC16C73B/74B/76/77
• Система переривань (до 14 джерел).
• 8-рівневий апаратний стек.
• Прямій, непрямий і відносний режими адресації.
• Скидання по включенню живлення (POR).
• Таймер скидання (PWRT) і таймер очікування запуску генератора (OST) після включення живлення.
• Сторожовий таймер WDT з власним генератором RC. • Програмований захист пам'яті програм.
• Режим енергозбереження SLEEP.
• 8 каналів 10-розрядного АЦП.
• Вибір параметрів тактового генератора.
• Високошвидкісна, енергозберігаюча CMOS FLASH/EEPROM технологія.
• Повністю статична архітектура.
• Програмування в готовому пристрої (використовується два виведення мікроконтролера).
• Низьковольтний режим програмування.
• Режим внутрішньосхемної відладки (використовується два виведення мікроконтролера).
• Широкий діапазон напруги живлення від 2.0В до 5.5В.
• Підвищена здатність навантаження портів введення/виводу (25мА).
• Мале енергоспоживання: < 0.6 мА при 3.0В, 4.0МГц; 20мкА при 3.0В,
32кГц ; < 1 мкА в режимі енергозбереження.
Cтруктурна схема мікроконтролера PIC16F877 приведена на рисунку
2.1.
З розгляду даної структурної схеми видно, що фізичні і логічні компоненти, з яких складається PIC 16FXX аналогічні будь-якому іншому мікроконтролеру. Тому писати програми для PIC не складніше, ніж для будь-якого іншого процесора. Звичайно, Гарвардська архітектура і велика розрядність команди дозволяє зробити код для PIC значно більш компактним, чим для інших мікроконтролерів і істотно підвищити швидкість виконання програми.
Основу структури даного мікроконтролера складають дві внутрішні шини: двонаправлена 8-бітова шина даних і 14-бітова шина команд. Це відповідає, як вже згадувалося раніше, Гарвардській архітектурі, заснованій на концепції роздільних шин і областей пам'яті для даних і команд. Шина даних зв'язує між собою всі основні функціональні блоки МК: пам'ять даних (RAM); арифметико-логічний пристрій (ALU); порти
Рисунок 2.1 – Структура мікроконтролера PIC16F877 введення/виводу (PORT A,B,C,D,E); регістри стану (STATUS), непрямої адресації (FSR), таймерів-лічильників (TMR 0,1,2), програмного лічильника (PC).
У мікроконтролерах сімейства РІС існують пряма і непряма адресація всіх регістрів і елементів пам'яті. Всі спеціальні регістри і лічильник команд також відображаються на пам'ять даних.
Мікроконтролери РІС16FXХ мають ортогональну (симетричну) систему команд, що дозволяє виконувати будь-яку операцію з будь-яким регістром, використовуючи будь-який метод адресації. Це полегшує програмування для них і значно зменшує час, необхідний на навчання роботі з ними.
Арифметико-логічний пристрій (ALU) 8-розрядний і виконує складання, віднімання, зрушення, бітові і логічні операції. У командах, що мають два операнди, одним з операндів є робочий регістр W. Другий операнд може бути константою або вмістом будь-якого регістра ОЗП. У командах з одним операндом, операнд може бути вмістом робочого регістра або вмістом будь-якого регістр. Для виконання всіх операцій ALU використовує робочий регістр W, який не може бути прямо адресований. Залежно від результату виконання операції, можуть змінитися значення бітів перенесення С, десяткового перенесення DC і нуля Z в регістрі стану STATUS. При відніманні биті С і DC працюють як біти позики і десяткової позики, відповідно.
Вхідна тактова частота, що поступає з виведення OSC1/CLKIN, усередині ділиться на чотири і з неї формуються чотири циклічні тактові послідовності що не перекриваються Q1, Q2, Q3 і Q4.
Вибірка команди і її виконання суміщені за часом таким чином, що вибірка команди займає один цикл, а виконання наступний цикл. Ефективний час виконання команди складає один цикл. Якщо команда змінює лічильник команд (наприклад, команда GOTO), то для виконання цієї команди буде потрібно два цикли. Цикл вибірки починається із збільшення лічильника команд в такті Q1. У циклі виконання команди вибрана команда защипується в регістр команд в такті Q1. Протягом тактів Q2, Q3 і Q4 відбувається декодування і виконання команди. У такті Q3 прочитується пам'ять даних (читання операнда), а запис відбувається в такті Q4. Таким чином, цикл виконання команди складається з 4-х тактів Q1-Q4, в кожному з яких проводяться різні, заздалегідь визначені дії:
Q1 - Вибірка певної команди з пам'яті програм і її декодування або вимушений NOP.
Q2 - Вибірка даних або NOP.
Q3 - Виконання команди і обробка даних. Q4 - Запис даних або NOP. Характеристика периферійних модулів:
Таймер 0: 8-розрядний таймер/лічильник з 8-розрядним програмованим перед дільником.
• Таймер 1: 16-розрядний таймер/лічильник з можливістю підключення зовнішнього резонатора.
• Таймер 2: 8-розрядний таймер/лічильник з 8-розрядним програмованим переддільником і вихідним дільником.
• Два модулі порівняння/захват/ШІМ (РСР):
16-розрядне захоплення (максимальна роздільна здатність 12.5нс); 16-розрядне порівняння (максимальна роздільна здатність 200нс); 10-розрядний ШІМ.
• Багатоканальний 10-розрядний АЦП.
• Послідовний синхронний порт MSSP; ведучий/ведомий режим SPI; ведучий/ведомий режим I2C.
• Послідовний синхронно-асинхронний приймач USART з підтримкою детектування адреси.
• Ведений 8-розрядний паралельний порт PSP з підтримкою зовнішніх сигналів
-RD.-WR, -CS.
Детектор зниженої напруги (BOD) для скидання по зниженню напруги живлення (BOR).У мікроконтролерах PIC16F87X існує два види пам'яті. Пам'ять програм і пам'ять даних мають роздільні шини даних і адреси, що дозволяє виконувати паралельний доступ.
Мікроконтролери PIC16F87X мають 13-розрядний лічильник команд PC, здатний адресувати 8К х 14 слів пам'яті програм. Фізично реалізовано FLASH пам'яті програм 8К х 14 у PIC16F877. Адреса вектора скидання – 0000h. Адреса вектора переривань – 0004h.
Пам'ять програм (ППЗП) має сторінкову організацію (рисунок 2.2). Об'єм однієї сторінки 2048 14-ти розрядних слів . Мікроконтролер PIC 16F877 має чотири сторінки пам'яті програм для зберігання 14-ти розрядних кодів команд.
Всі мікроконтролери PIC16F87X здатні адресувати 8К слів пам'яті програм. Інструкції переходів (CALL і GOTO) мають 11 -разрядное поле
для вказівки адреси, що дозволяє безпосередньо адресувати 2Кслів пам'яті програм. Для адресації верхніх сторінок пам'яті програм використовуються 2 бита в регістрі PCLATH<4:3>. Перед виконанням команди переходу (CALL або GOTO) необхідно запрограмувати біти регістра PCLATH<4:3> для адресації необхідної сторінки.
При виконанні інструкцій повернення з підпрограми, 13-розрядне значення для лічильника програм РС береться з вершины стека, тому маніпуляція бітами регістра PCLATH<3:4> не потрібна.
Внутрішня пам‘ять програм
Пам'ять даних розділена на чотири банки, які містять регістри загального і спеціального (SFR) призначення. Биті RP1 (STATUS<6>) і RP0 (STATUS<5>) призначені для управління банками даних. У таблиці 2.1 показаний стан бітів, що управляють, при зверненні до банків пам'яті даних. Карта пам'яті даних показана на рисунку 2.3.