b7 b6 b5 b4 b3 b2 b1 b0
GIE | |PEIE | TOIE | INTE | RBI | TOIF | INTF | RBIF |
біт 7: GIE: Глобальний дозвіл переривань:
1 = дозволені всі немасковані переривання, 0 = всі переривання заборонені; біт 6: PEIE: Дозвіл переривань від периферійних модулів:
1 = дозволені всі немасковані переривання периферійних модулів, 0 = переривання від периферійних модулів заборонені; біт 5: TOIE: Дозвіл переривання по переповнюванню TMR0:
1 = переривання дозволене,
0 = переривання заборонене; біт 4: INTE: Дозвіл зовнішнього переривання INT:
1 = переривання дозволене,
0= переривання заборонене;
біт 3: RBIE: Дозвіл переривання по зміні сигналу на входах RB7:RB4 PORTB:
1= переривання дозволене,
0 = переривання заборонене; біт 2: TOIF: Прапор переривання по переповнюванню TMR0:
1 = відбулося переповнювання TMR0 (скидається програмно), 0 = переповнювання TMR0 не було; біт 1: INTF: Прапор зовнішнього переривання INT:
1 = виконана умова зовнішнього переривання на виведенні
RBO/INT (скидається програмно),
0 = зовнішнього переривання не було;
біт 0: RBIF: Прапор переривання по зміні рівня сигналу на входах RB7:RB4 PORTB:
1 = зафіксована зміна рівня сигналу на одному з входів RB7:RB4 (скидається програмно),
0 = не було зміни рівня сигналу ні на одному з входів RB7:RB4.
Примітка. Прапори переривань встановлюються при виникненні умов переривань незалежно від відповідних бітів дозволу і біта загального дозволу переривань GIE (INTCON<7>).
13-розрядний регістр лічильника команд РС указує адресу виконуваної інструкції. Молодший байт лічильника команд PCL доступний для читання і запису. Старший байт РСН, що містить <12:8> біти лічильника команд РС, не доступний для читання і запису. Всі операції з регістром РСН відбуваються через додатковий регістр PCLATH. При будь-якому виді скидання мікроконтролера лічильник команд РС очищається. На рисунку 2.5 показано дві ситуації завантаження значення в лічильник команд РС. Приклад зверху, запис в лічильник команд РС відбувається при записі значення в регістр PCL (PCLATH <4:0> —> РСН). Приклад знизу, запис значення в лічильник команд РС відбувається при виконанні команди CALL або GOTO (PCLATH <4:3> -» РСН).
Обчислюваний перехід може бути виконаний командою приросту до регістра PCL (наприклад, ADDWF PCL). При виконанні табличного читання обчислюваним переходом слід піклуватися про те, щоб значення PCL не перетнуло межу блоку пам'яті (кожен блок 256 байтів).
Всі мікроконтролери PIC16F87X здатні адресувати 8К слів пам'яті програм. Інструкції переходів (CALL і GOTO) мають 11 -разрядное поле
для вказівки адреси, що дозволяє безпосередньо адресувати 2Кслов пам'яті програм. Для адресації верхніх сторінок пам'яті програм використовуються 2 біта в регістрі PCLATH<4:3>. Перед виконанням команди переходу (CALL або GOTO) необхідно запрограмувати біти регістра PCLATH<4:3> для адресації необхідної сторінки.
При виконанні інструкцій повернення з підпрограми, 13-розрядне значення для лічильника програм РС береться з вершины стека, тому маніпуляція бітами регістра PCLATH<3:4> не потрібна.
Примітка. Вміст регістра PCLATH не змінюється після виконання інструкції RETURN або RETFIE. Користувач винен сам змінити значення регістра PCLATH для подальшого виконання команд GOTO і CALL.
PIC16F87X мають 8-рівневий 13-розрядний апаратний стік. Стік не має відображення на пам'ять програм і пам'ять даних, не можна записати або прочитати дані із стека. Значення лічильника команд заноситься у вершину стека при виконанні інструкцій переходу на підпрограму (CALL) або обробки переривань. Читання із стека і запис в лічильник команд РС відбувається при виконанні інструкцій повернення з підпрограми або обробки переривань (RETURN, RETLW, RETFIE), при цьому значення регістра PCLATH не змінюється.
Стек працює як циклічний буфер. Після 8 записів в стек, дев'ятий запис запишеться на місце першого, а десятий запис замінить другий і так далі.
Примітки:
1. У мікроконтролерах не існує ніяких покажчиків про переповнювання стека.
2. У мікроконтролерах не передбачено команд запису/читання із стека, окрім команд виклику/повернення з підпрограм (CALL, RETURN, RETLW і RETFIE) або умов переходу по вектору переривань.
Регістри введення/виводу можуть управлятися, як будь-які інші регістри. Проте, команда «читання» (наприклад MOVF 6,W) завжди прочитує фактичний рівень сигналу на виводі порту, незалежно від того, запрограмований цей розряд порту на введення або на вивід. Після сигналу «Скидання» всі порти введення/виводу встановлюються на «введення»
(електрично еквівалентно третьому стану), а регістри керування введенням/виводом (TRISA, TRISB, TRISC, TRISD, TRISE) встановлюються в одиниці (конфігурація на введення). Для того, щоб конфігурувати деякі лінії порту на вивід, необхідно встановити відповідні біти в потрібному регістрі TRIS в «0». Це можна робити командою "TRIS f".
При операціях введення порти не защипуються. Вхідний сигнал повинен бути присутнім поки йде процес читання (напр. MOVF 6, W). При операціях виводу порти защипуються і зберігають значення до тих пір, поки не будуть перезаписані. На рисунку 2.6 не показані діоди, які захищають ніжку порту від зовнішніх імпульсів великої напруги. Вони обмежують імпульсну напругу на ніжці значеннями від Vss - 0,6 до Vdd + 0,6 В. Якщо статична напруга вийде за вказані межі, то виникнуть великі статичні струми, здатні вивести мікроконтролер з ладу.
Деякі канали портів введення/виводу мультипліціровані з периферійними модулями мікроконтролера. Коли периферійний модуль включений, вивід не може використовуватися як універсальний канал введення/виводу.
PORTA - 6-розрядний порт введення виводу. Всі канали PORTA мають відповідні біти напряму в регістрі TRISA, що дозволяють настроювати канал як вхід або вихід. Запис ‗1‘ в TRISA переводить відповідний вихідний буфер в 3-й стан. Запис '0' в регістр TRISA визначає відповідний канал як вихід, вміст защіпки PORTA передається на виведення мікроконтролера (якщо вихідна защіпка підключена до виведення мікроконтролера).
Читання регістра PORTA повертає стан на виводах порту, а запис проводиться в защіпку PORTA. Всі операції запису в порт виконуються за принципом «читання - модифікація - запис», тобто спочатку проводиться читання стану виводів порту, потім зміна і запис в защіпку.
RA4 - має трігер Шмідта на вході і відкритий стік на виході, мультипліцірований з тактовим входом TOCKI. Решта всіх каналів PORTA має TTL буфер на вході і повнофункціональні вихідні КМОП буфери.
Канали PORTA мультипліковані з аналоговими входами АЦП і аналоговим входом джерела опорної напруги VREF. Біти управління режимів роботи каналів порту введення/виводу PORTA знаходяться в регістрі ADCON1.
Примітка. Після скидання по включенню живлення виводи настроюються як аналогові входи, а читання дає результат '0'.
Біти регістра TRISA управляють напрямом каналів PORTA, навіть коли вони використовуються як аналогові входи. Користувач повинен упевнитися, що відповідні канали PORTA налаштовані на вхід при використанні їх як аналогові входи.
Структурні схеми виводів порта PORTA показані на рисунку 2.6.
а б
а – виводи RA3-RA0 та RA5 ; б – вивод RA4
PORTB - 8-розрядний двонаправлений порт введення/виводу. Біти регістра TRISB визначають напрям каналів порту. Установка битва в 1 регістра TRISB переводить вихідний буфер в 3-й стан. Запис '0' в регістр TRISB настроює відповідний канал як вихід, вміст защіпки PORTB передається на виведення мікроконтролера (якщо вихідна защіпка підключена до виведення мікроконтролера).
Три виведення PORTB мультипліковані з схемою низьковольтного програмування: RB3/PGM, RB6/PGC, RB7/PGD.
До кожного виведення PORTB підключений внутрішній підтягаючий резистор. Біт -RBPU (OPTION_REG <7>) визначає підключені (-RBPU=0) чи ні (-RBPU=1) підтягаючі резистори. Підтягаючі резистори автоматично відключаються, коли канали порту настроюються на вихід і після скидання по включенню живлення POR.
Чотири канали PORTB RB7:RB4, налаштовані на вхід, можуть генерувати переривання по зміні логічного рівня сигналу на вході. Якщо один з каналів RB7:RB4 налаштований на вихід, то він не може бути джерелом переривань. Сигнал на виводах RB7:RB4 порівнюється із значенням, збереженим при останньому читанні PORTB. У разі неспівпадання одного із значень встановлюється прапор RBIF (INTCON<0>), і якщо дозволено, генерується переривання.
Це переривання може вивести мікроконтролер з режиму SLEEP. У підпрограмі обробки переривань необхідно зробити наступні дії:
• Виконати читання або запис в PORTB, виключивши невідповідність;
• Скинути прапор RBIF в '0'.
Невідповідність збереженого значення з сигналом на вході PORTB завжди встановлює біт RBIF в 1. Читання з PORTB перерве умову невідповідності і дозволить скинути прапор RBIF в '0'.
Переривання по зміні сигналу на входах рекомендується використовувати для визначення натиснення клавіш, коли PORTB повністю задіяний для реалізації клавіатури. Не рекомендується опитувати PORTB при використанні переривань по зміні вхідного сигналу.
Переривання по зміні сигналу на входах PORTB і програма перемикання конфігурації цих каналів дозволяє реалізувати простий інтерфейс обслуговування клавіатури з виходом з режиму SLEEP по натисненню клавіш .
RBO/INT вхід зовнішнього джерела переривань, що настроюються бітом INTEDG (OPTION_REG<6>).