біт 10: Не реалізований: читається як '1'
біт 9: WRT: Біт дозволу запису в FLASH пам'ять програм 1 = дозволений запис в FLASH пам'ять програм через регістри управління EECON
0= заборонений запис в FLASH пам'ять програм через регістри управління EECON
біт 8: CPD: Біт захисту EEPROM пам'яті даних
1= захист пам'яті даних вимкнений
0 = захист пам'яті даних включений
біт 7: LVP: Біт дозволу низьковольтного програмування 1 = виведення RB3/PGM працює як PGM, режим низьковольтного програмування включений 0 = виведення RB3/PGM працює як цифровий порт введення/виводу, виведення HV використовується для програмування мікроконтролера
біт 6: BODEN: Біт дозволу скидання по зниженню напруги живлення
1= дозволено скидання BOR
0= заборонено скидання BOR
біт 3: -PWRTE: Біт дозволу роботи таймера включення живлення
1= PWRT вимкнений
0= PWRT включений
біт 2: WDTE: Біт дозволу роботи сторожового таймера
1= WDT включений 0 = WDT вимкнений
биті 1-0: FOSC1:FOSCO: Біти вибору режиму тактового генератора
11 = RC генератор
10 = HS генератор
01 = XT генератор
00 = LP генератор
Примітки:
1. При стиранні всієї пам'яті мікроконтролера в слово конфігурації записується значення SFFFh.
2. Щоб встановити захист пам'яті програм, всі пари СР1 :СРО повинні мати однакове значення.
3. При виникненні скидання по зниженню напруги живлення (BOR) автоматично запускається таймер PWRT, незалежно від стану бита PWRTE.
2.15 Система команд
Кожна команда мікроконтролерів PIC16F87X складається з одного 14-розрядного слова, розділеного на код операції (OPCODE), що визначає тип команди і один або декілька операндів, що визначають операцію команди. Повний список команд дивитеся в додатку В. Команди розділені на наступні групи: байт орієнтовані команди, біт орієнтовані команди, команди управління і операцій з константами. Опис полів коду операції дивитеся в таблиці 2.4.
Для байт орієнтованих команд ‗f‘ є покажчиком регістра, а ‗d‘ покажчиком адресата результату. Покажчик регістра визначає, який регістр повинен використовуватися в команді. Покажчик адресата визначає, де буде збережений результат. Якщо 'd'=0, результат зберігається в регістрі W. Якщо 'd'=1, результат зберігається в регістрі, який використовується в команді.
У біт орієнтованих командах 'b' визначає номер бита що бере участь в операції, а ‗f‘ - покажчик регістра, який містить цей біт.
Поле Опис
f Адреса файлового регістра (від 0x00 до 0x7F)
W Робочий регістр (акумулятор) b Адреса бита усередині 8-ми бітового регістра k Символьне поле, константа або мітка Будь-яке значення(=0 або 1) x Компілятор згенерує код з x=0 це потрібно для сумісності зі всіма програмними продуктами Microchip. Вибір де зберігати результат:
d=0
d (зберігати в W)
d=1 (зберігати в f)
За умовчанням d=1 label Ім'я мітки
TOS Вершина стека
PC Лічильник команд (програмний лічильник)
PCLATH Записуваний буфер для старших 5-ти біт РС
GIE Прапор дозволу глобальних переривань
WDT Сторожовий таймер
TO | біт Таймауту (Time-out bit) |
PD | біт пониження живлення (Power-Down bit) |
dest | Призначення, або регістр W або інший регістр вказаний в описі команди |
[ ] | Опціонально, тобто необов'язкове використання запису, який поміщений в квадратні дужки |
( ) | Вміст |
-> | Занести в |
< > | Бітове поле в регістрі |
У командах управління або операціях з константами 'к' представляє вісім або одинадцять біт константи або значення літералів.
Система команд акумуляторного типу, ортогональна і розділена на три основні групи:
• Байт орієнтовані команди;
• Біт орієнтовані команди;
• Команди управління і операцій з константами.
Всі команди виконуються за один машинний цикл, окрім команд умови, в яких отриманий дійсний результат і інструкцій , що змінюють значення лічильника команд РС. У разі виконання команди за два машинні цикли, в другому циклі виконується інструкція NOP. Один машинний цикл складається з чотирьох тактів генератора. Для тактового генератора з частотою 4 Мгц всі команди виконуються за 1мкс, якщо умова істинна або змінюється лічильник команд РС, команда виконується за 2мкс. На рисунку 2.16 показана форма команд трьох основних груп.
Байт-орієнтовані операції з файловим регістром
13 8 7 6 0
OPCODE d f(FILE #)
d = 0 для запису результата в W
d = 1 для запису результата в f f = 7-ми бітна адреса файлового регістра
Біт-орієнтовані операції з файловим регістром
13 10 9 7 6 0
OPCODE b (BIT #) f(FILE #)
b = 3-х бітна адреса
f = 7-ми бітна адреса файлового регістра
Символьні команди і команди управління (загальний вигляд)
13 8 7 0
OPCODE k (символ)
k = 8-ми бітне безпосереднє значення
Команди управління - GOTO и CALL
13 11 10 0
OPCODE k (символ)
k = 11-ти бітне безпосереднє значення
Примітка. Для сумісності програмного забезпечення з наступними версіями мікроконтролерів PICmicro не використовуйте команди TRIS і OPTION.
Технологія розробки і відладки робочих програм для ОМК PIC відрізняється від традиційної тільки набором інструментальних засобів. Написання початкового тексту програми можливе на одній з наступних мов: Асемблері, Макроасемблері і СІ. На цьому етапі можуть використовуватися будь-які текстові редактори. Для компіляції програм може бути використаний відповідний компілятор з мови СІ або Асемблер МРАSM . Відладка програм може бути здійснена з використанням програмних симуляторов MPSIM або внутрішньосхемних емуляторів реального часу PICMASTER або ICE PIC . Запис відладженої програми в ПЗУ ОМК здійснюється за допомогою спеціальних програматорів, наприклад, типу PIC START, KOM PIC, PIC LAB-16 і т.п..
Для цих же цілей можна скористатися інтегрованими середовищами picDesigner або MPLAB IDE 6.50, які є могутні пакети інструментальних засобів аналогічні вказаним вище.
Розглянемо детальніше ці питання для випадку написання робочих програм на Асемблері.
Початковий текст програми на мові асемблера має певний формат. Кожна команда (і псевдокоманда) є рядком чотирьохланкової конструкції:
МІТКА ОПЕРАЦІЯ ОПЕРАНД(и) КОМЕНТАР
Ланки (поля) можуть відділятися одна від одної довільним числом пропусків. Порядок і позиція полів важливі. Так, мітки повинні починатися в першому стовпці. Операція (мнемоніка команди) може починатися в другому стовпці або поза ним.
Операнди слідують за мнемонікою команди. Коментарі можуть слідувати за операндами, мнемонікою або мітками, і можуть починатися в будь-якому стовпці. Максимальна ширина стовпця - 255 символів. Один або більшу кількість пропусків повинен відокремити мітку і мнемоніку команди, і мнемоніку і операнд(и). Операнди повинні відділятися комою.
Наприклад:
;
; Приклад фрагмента початкової програми ―Ініціалізація МК―
BEGIN
MOVLW INITA ; Завантаження в робочий регістр W
; значення, привласненого імені
; INITA (значення ,константа або
; число) повинно бути ; привласнено раніше в
; попередніх фрагментах
; програми!)
MOVWF | TRISA | ; Завантаження значення з робочого ; регістра W в регістр ; управління конфігурацією ; порту А |
MOVLW | INITB | ; Завантаження в робочий регістр W ; значення, привласненого імені ; INITB |
MOVWF | TRISB | ; Завантаження значення з робочого ; регістра W в регістр управління ; конфігурацією порту В |
Мітка. У полі мітки розміщується символічне ім'я елементу пам'яті, в якій зберігається відмічена команда або операнд. Мітка є буквеноцифровою комбінацією, що починається з букви. Використовуються тільки букви латинського алфавіту. Асемблер допускає використання в мітках символу підкреслення(_). Довжина мітки може бути від 6 до 32 (наприклад для MPASM) символів. Мітки можуть супроводжуватися двокрапкою (:), пропуском, табуляцією або кінцем рядка.
Як символічні імена і мітки не можуть бути використані мнемокоди команд, псевдокоманд і операторів Асемблера, а також мнемонічні позначення регістрів і інших внутрішніх блоків МК.
Операція. У полі операції записується мнемонічне позначення команди МК або псевдокоманди асемблера, яке є скороченням (абревіатурою) повного англійського найменування виконуваної дії. Якщо є мітка на тому ж самому рядку, то мнемоніка команди асемблера, директиви асемблера і макрозвернення повинні відділятися від цієї мітки двокрапкою або одним або великою кількістю пропусків або міток табуляції.
Операнди. У цьому полі поміщаються операнди (або операнд), які приймають участь в операції. Операнди повинні відділятися від мнемоніки одним або більше пропусків або міток табуляції. Списки операндів (операнди) повинні відділятися комами.
Команди можуть бути без-, одно-, або двооперандними.
Операнд може бути заданий безпосередньо або у вигляді його адреси (прямої або непрямої). Безпосередній операнд представляється числом (MOVLW 0FFh, де символ 0 для Асемблера означає, що це число FFh, а не мітка або, MOVLW B'01010011', де В - позначає двійкове число) або символічним ім'ям (MOVWF DATAPORT).