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
   290   291   292   293   294   295   296   297   298   299   300