У регістрі ADRESH:ADRESL зберігається 10-розрядний результат аналого-цифрового перетворення. Коли перетворення завершене, результат перетворення записується в регістр ADRESH:ADRESL, після чого скидається прапор GO/-DONE (ADCON0<2>) і встановлюється прапор переривання ADIF. Структурна схема модуля АЦП показана на рисунку 2.13.
Після включення і конфігурації АЦП вибирається робочий аналоговий канал. Відповідні біти TRIS аналогових каналів повинні настроювати порт введення/виводу на вхід.
Рекомендована послідовність дій для роботи з АЦП:
1. Настроїти модуль АЦП: • Настроїти виводи як аналогові входи, входи VREF або цифрові канали введення/виводу (ADCON1);
• Вибрати вхідний канал АЦП (ADCON0);
• Вибрати джерело тактових імпульсів для АЦП (ADCON0);
• Включити модуль АЦП (ADCON0).
2. Настроїти переривання від модуля АЦП (якщо необхідно):
• Скинути біт ADIF в '0';
• Встановити біт ADIE в '1'; • Встановити біт PEIE в '1'; • Встановити біт GIE в '1'.
3. Витримати паузу, необхідну для зарядки конденсатора СHOLD-
4. Почати аналого-цифрове перетворення:
•Встановити біт GO/-DONE в '1' (ADCON0).
5. Чекати закінчення перетворення:
• Чекати поки біт GO/-DONE не буде скинутий в '0'; або • Чекати переривання по закінченню перетворення.
6. Прочитати результат перетворення з регістрів ADRESH: ADRESL, скинути біт ADIF в '0', якщо це необхідно.
7. Для наступного перетворення необхідно виконати кроки починаючи з пункту 1 або 2. Час перетворення одного біта визначається як час ТAD. Мінімальний час очікування перед наступним перетворенням повинен складати не менше 2ТAD.
PIC16F87X мають 14 джерел переривань. Регістр INTCON містить прапори окремих переривань, біти дозволу цих переривань і біт глобального дозволу переривань.
Якщо біт GIE (INTCON<7>) встановлений в ‗1‘, дозволені всі немасковані переривання. Якщо GIE=0, то всі переривання заборонені.
Кожне переривання окремо може бути дозволене/заборонене установкою/скиданням відповідного біта в регістрах INTCON, PIE1 і PIE2. При скиданні мікроконтролера біт GIE скидається в '0'. При поверненні з підпрограмі обробки переривання, по команді RETFIE, біт GIE апаратно встановлюється в ‗1‘ дозволяючи всі немасковані переривання.
У регістрі INTCON знаходяться прапори наступних переривань:
зовнішнього сигналу INT, зміни рівня сигналу на входах RB7:RB4, переповнювання TMR0.
У регістрах PIR1, PIR2 містяться прапори переривань периферійних модулів мікроконтролера, а в регістрах PIE1, PIE2 відповідні біти дозволу переривань. У регістрі INTCON знаходиться біт дозволу переривань від периферійних модулів.
При переході на підпрограму обробки переривань біт GIE апаратно скидається в '0', забороняючи переривання, адреса повернення з підпрограми обробки переривань поміщається в стек, а в лічильник команд РС завантажується вектор переривання 0004h. Джерело переривань може бути визначене перевіркою прапорів переривань, які повинні бути скинуті програмно перед дозволом переривань, щоб уникнути повторного виклику.
Для зовнішніх джерел переривань (сигнал INT, зміни рівня сигналу на входах RB7:RB4) час переходу на підпрограму обробки переривань складатиме 3-4 машинних цикли. Точний час переходу залежить від конкретного випадку, він однаковий для 1 і 2-х циклових команд. Прапори переривань встановлюються незалежно від стану відповідних бітів маски і біта GIE.
Примітка. Індивідуальні прапори переривань встановлюються незалежно від стану відповідних бітів маски і біта GIE.
Структурна схема логіки переривань показана на рисунку 2.14.
Рисунок 2.14 - Структурна схема логіки переривань
Зовнішнє переривання з входу RB0/INT відбувається: по передньому фронту сигналу, якщо біт INTEDG (OPTION_REG<6>) встановлений в '1'; по задньому фронту сигналу, якщо біт INTEDG скинутий в '0'. Коли активний фронт сигналу з'являється на вході RB0/INT біт INTF (INTCON<1>) встановлюється в '1'. Переривання може бути заборонене скиданням біта INTE (INTCON<4>) в '0'. Прапор переривання INTF повинен бути скинутий програмно в підпрограмі обробки переривань. Переривання INT може вивести мікроконтролер з режиму SLEEP, якщо біт INTE=1 до переходу в режим SLEEP. Стан бита GIE визначає, переходити на підпрограму обробки переривань після виходу з режиму SLEEP чи ні.
Переповнювання таймера TMR0 (FFh -> 00h) встановлює прапор TOIF (INTCON<2>) в ‗1‘. Переривання від TMR0 можна дозволити/заборонити установкою/скиданням біта TOIE (INTCON<5>). Зміна рівня сигналу на входах RB7:RB4 викликає установку прапора RBIF (INTCON<0>). Переривання можна дозволити/заборонити установкою/скиданням біта RBIE (INTCON<4>).
Вбудований сторожовий таймер WDT працює від окремого генератора RC, що не вимагає зовнішніх компонентів. Це дозволяє працювати сторожовому таймеру WDT при вимкненому тактовому генераторі (виводи OSC1, OSC2) в SLEEP режимі мікроконтролера. У нормальному режимі роботи при переповнюванні WDT відбувається скидання мікроконтролера. Якщо мікроконтролер знаходиться в SLEEP режимі, переповнювання WDT виводить його з режиму SLEEP з продовженням нормальної роботи. WDT вимкнений, якщо WDTE = 0 в слові конфігурації.
Час переповнювання залежить від температури, напруги живлення VDD і розкиду технологічних параметрів мікроконтролера. Якщо потрібний більший час переповнювання WDT, необхідно програмно підключити переддільника в регістрі OPTION_REG з максимальним коефіцієнтом ділення 1:128. Примітки:
1. Команди CLRWDT і SLEEP скидають сторожовий таймер і переддільника, якщо він підключений до WDT, відкладаючи скидання пристрою.
2. Команда CLRWDT скидає сторожовий таймер і переддільника, якщо він підключений до WDT, але не змінює коефіцієнт ділення переддільника.
Структурна схема сторожового таймера WDT показана на рисунку 2.15.
Рисунок 2.15 - Структурна схема сторожового таймера WDT
Біти конфігурації розташовані в пам'яті програм за адресою 2007h, вони можуть бути запрограмовані в '0' або залишеними в ‗1‘. Відмітьте, що адреса 2007h розташована за межами призначеної для користувача пам'яті програм. Фактично, до конфігураційного регістра (область пам'яті 2000h - SFFFh) можна звернутися тільки в режимі програмування мікроконтролера.
Біт 13 Біт 0
Біти 13-12: СР1:СРО: Біти захисту пам'яті програм
11 = захист пам'яті програм вимкнений
10 = захищена пам'ять програм з адресами 1F00h-1FFFh
01 = захищена пам'ять програм з адресами 1000h-1FFFh 00 = захищена пам'ять програм з адресами 0000h-1FFFh біт 11: DEBUG: Біт включення режиму внутрішньосхемної відладки
1 = внутрішньосхемна відладка вимкнена, виводи RB6 і
RB7 працюють як канали вводу/виводу
0 = внутрішньосхемна відладка включена, виводи RB6 і RB7 використовуються відладчиком