Починаючи працювати з компілятором SDCC і програмою MPLABX, я виявив, що шаблон файлу, в якому є переривання, компілюється дивним чином Це питання я відкладав до тих пір, поки не забув про нього Згадавши про це, я вирішив розібратися з ним в кінці розповіді про компіляторі SDCC На платі управління ROBOPICA є кнопка, підключена до висновку RB0 І у мікроконтролера є переривання по RB0 Як звичайно, спочатку звернемося до опису PIC16F887

RB0/INT INTERRUPT

Зовнішнє переривання з виведення RB0/INT перемикається по фронту або наростаючим фронтом, якщо біт INTEDG регістра OPTION_REG <6> встановлений, або спадаючим фронтом, якщо цей біт очищений Коли правильний фронт зявляється на виводі RB0/INT, біт INTF регістра INTCON <1>) встановлюється Це переривання може бути заборонено очищенням керуючого біта INTE регістра INTCON <4> Біт INTF повинен бути очищений програмно в підпрограмі обслуговування переривання до того, як відновити це переривання Переривання може бути використано для виводу мікроконтролера з режиму очікування (Sleep)

Проста програма перевірки переривання

#include <pic16f887h>

#include &quotdelay_20h&quot

typedef unsigned int wrd

wrd at 0x2007 CONFIG1 = 0x2FF2

char dl = 1 / / Змінна для зберігання паузи void main (void) {

/ / Ініціалізація

ANSELH = 0 / / Цифрові входи

TRISB & = 0xF7 / / Третій біт на вихід

OPTION_REG = 0x7F / / Дозволити підтягує резистори WPUB = 0x01 / / Підтягнути RB0

GIE = ​​1 / / Глобальне дозвіл переривань

IOCB = 1 / / Переривання по молодшому біту

INTEDG = 0 / / Переривання спадаючим фронтом

INTE = 1 / / Дозволити зовнішнє переривання

/ / Нескінченний цикл for ( ) {

RB3 = 1 DELAY_S(dl) RB3 = 0 DELAY_S(dl)

}

}

void highInterrupt (void) interrupt 1 / / обслуговування переривання

{

DELAY_MS (30) / / На випадок брязкоту

if (INTF) dl + + / / Збільшуємо паузу

INTF = 0 / / Скинемо прапор

}

Програма проста, транслюється і її можна перевірити

Рис 529 Перевірка переривання – пауза збільшується при кожному натисканні

І остаточна перевірка – завантаження в PIC16F887 керуючої плати ROBOPICA

У кількох попередніх розділах я розповідав про те, як підступитися до використання компілятора SDCC з конкретним пристроєм ROBOPICA Моя порада, особливо, якщо ви самостійно робите робота, узагальніть всі функції, про які йде мова Про те, як використовуються функції більш загального вигляду, можна подивитися в бібліотеці демо-версії MicroC Відкрийте файли заголовків компілятора SDCC, щоб подивитися, як можна використовувати

інші можливості мови Навіть якщо ви не маєте наміру удосконалювати свої знання мови Сі, ніякої інструмент, особливо знання, не буде зайвим у вашій роботі У додатку я додав файли, знайдені в Інтернеті, які ви можете використовувати і як правильну відповідь, і як підказку, і як робочі файли

Джерело: Гололобов ВН, – Самовчитель гри на паяльнику (Про електроніці для школярів і не тільки), – Москва 2012