у перериванню відповідає свою адресу в цій таблиці, і саме цю адресу завантажується в лічильник команд при виникненні переривання. Положення вектора в таблиці визначає також і пріоритет відповідного переривання: чим менше адресу, тим вище пріоритет переривання. Розмір таблиці залежить від моделі мікроконтролера і становить від 2 (адреси $ 001, $ 002) до 16 (адреси $ 001 ... $ 010) векторів. Розподіл таблиці векторів переривань мікроконтролера AT90S2333 приведено в табл. 1.
Таблиця 1
ІсточнікОпісаніе № адресаINT0Внешнее переривання 0 $ 001INT1Внешнее переривання 1 $ 002TIMER1 CAPTЗахват таймера / лічильника Т1 $ 003TIMER1 COMPСовпаденіе таймера / лічильника Т1 $ 004TIMER1 OVFПереполненіе таймера / лічильника Т1 $ 005TIMER0 OVFПереполненіе таймера / лічильника Т0 $ 006SPI, STCПередача по SPI завершена $ 007UART, RXUART, прийом завершений $ 008UART, UDREРегістр даних UART порожній $ 009ADCПреобразованіе АЦП завершено $ 00BEE_RDYEEPROM, готове $ 00CANA_COMPАналоговий компаратор $ 00D Якщо в програмі переривання ніколи не використовуються, то на місці таблиці векторів переривань може бути розміщена основна програма.
Розглянемо принцип обробки переривань.
Для дозволу переривань прапор I регістру SREG повинен бути встановлений в «1». А дозвіл або заборона (маскування) окремих переривань виробляється установкою або скиданням відповідних розрядів регістрів масок переривань, розглянутих нижче. Обробка переривань здійснюється наступним чином:
- при виконанні умов, необхідних для генерації переривання, що відповідає цьому перериванню прапор встановлюється в «1», а прапор I апаратно скидається, забороняючи тим самим обробку наступних переривань. Однак у підпрограмі обробки переривання цей прапор можна буде встановити в «1» для дозволу вкладених переривань;
- якщо переривання дозволено (прапор дозволу переривання встановлений), в лічильник команд завантажується адреса вектора відповідного переривання ($ 002 ... $ 010). При цьому прапор переривання апаратно скидається. Ряд прапорів переривань може бути також скинутий записом лог. «1» в розряд регістра, відповідний прапору. Якщо ж переривання заборонено (прапор дозволу переривання скинутий), прапор переривання залишається в стані лог. «1» до дозволу переривання (в цьому випадку він буде скинутий апаратно), або до програмного скидання цього прапора;
- виконується підпрограма обробки переривання;
- виконується команда повернення з переривання RETI, при цьому прапор I апаратно встановлюється в «1», дозволяючи обробку наступних переривань;
- центральний процесор автоматично відновлює вміст лічильника команд. Потім основна програма продовжує своє виконання з того місця, де вона була перервана.
При виклику підпрограм обробки переривань вміст регістра стану SREG не зберігається. Тому користувач повинен самостійно запам'ятовувати вміст цього регістра при вході в підпрограму обробки переривання (якщо це необхідно) і відновлювати його значення перед викликом команди RETI.
Слід пам'ятати, що для переривань, викликаних статичними подіями (наприклад, для переривання, що генерується при рівності вмісту рахункового регістра і регістра порівняння таймера), прапор переривання встановлюється тільки в момент виникненн...