Page 295 - 4503
P. 295
;-------------------------------------------
retfie ; повернення у фонову програму
У програмі 9.1 вказані два вектори. За адресою h’000’,
котра є вектором скидання, розміщена команда goto MAIN.
За адресою h’004’, котра є вектором переривання розміщена
команда goto INT_COUNT. Розміщення команд за
конкретними адресами здійснюється з допомогою директиви
org. Отже, при реагуванні мікроконтролера на переривання
відбувається така послідовність:
переривання h’004’ INT_COUNT.
У фоновій програмі просто встановлюються біти маски
INTE і GIE для дозволу зовнішніх переривань, а також
очищається лічильник EVENT кількості деталей. Далі
розміщений нескінчений цикл, як приклад задачі фонової
програми.
Переривання можуть виникати в будь–який час
виконання фонової програми, а отже, і під–час обробки даних,
які впливають на ознаки регістра STATUS, та й стан робочого
регістра W задіяний майже постійно. Тому перед тим як
перейти до підпрограми (функції) обробки переривань, слід
зберегти поточний вміст принаймі цих двох регістрів. Для
їхнього тимчасового збереження варто зарезервувати декілька
регістрів памяті даних, котрі більш ніде не задіяні. За–звичай
назви цих регістрів містять на своєму початку символ
підкреслення, наприклад _work і _status.
Враховуючи все сказане вище будь–яку підпрограму
обробки переривань можна умовна розділити на три частини:
збереження контексту, основний код, відновлення контексту.
9.2.3.1 Збереження контексту
295