а вирішити питання виміру інтервалу часу між двома сусідніми дзвінками. У даному випадку необхідно встановити вид переривання по фронту, і по приходу переривання запустити таймер, після закінчення імпульсу або паузи викликається інше переривання і дані з таймера зчитуються і рахунок продовжується до приходу нового переривання. По закінченні тракту рахунок зупиняється і в таймері буде сумарний час процесу (імпульс + пауза). p> Такий принцип і реалізований в даній роботі. Нижче наведені блок-схеми алгоритмів роботи обробників переривань INT1 і INT0 (рис. 1). br/>
Опис алгоритму обробників переривань
Запуск таймера проводиться при приходу імпульсу (INT0), з цього моменту починається вимірювання довжини імпульсу. Після запуску таймера в обробнику INT0 встановлюється спеціальний прапор початку вимірювання. Далі, коли імпульс закінчується, викликається INT1, на початку якого аналізується прапор початку вимірювання (begread). І у випадку, якщо вимірювання почалося таймер зупиняється у короткий час, на протязі якого дані з його регістрів пересилаються в спеціальні комірки пам'яті. Після цього таймер знову запускається. Ця призупинення необхідна з тієї причини, що під час читання, яке здійснюється побайтно в регістрі може виникнути переповнення молодшого байта і він обнулится, зате збільшиться старший байт і якщо допустимо прочитати спочатку молодший байт, який близький до переповнення, а потім старший байт, то природно старший байт буде вже більше, ніж потрібно і прочитані дані невірні. Прочитане в INT1 вміст регістрів таймера являє собою тривалість імпульсу. Далі знову приходить переривання INT0. На початку його обробника також аналізується прапор початку вимірювання і якщо він не встановлений програма починає останнє, а інакше-закінчує. Для цього зупиняється таймер і з його регістрів читається часовий інтервал який представляє з себе сумарну тривалість імпульсу і паузи. p> Далі віднімаючи з цієї тривалості тривалість імпульсу легко знайти тривалість паузи (T2). Одночасно по закінченні тракту вимірювання встановлюється прапор готовності даних, який очікується в основній програмі для початку обробки. p> Як видно з лістингу, який можна подивитися в кінці звіту, наприкінці вимірювання ще й обнуляється мінлива control, яка служить для виявлення аварійної ситуації датчика. Більш докладно вона буде розглянута нижче. br/>
Опис основної програми
Основна програма (рис. 2) починається зі стандартних процедур ініціалізації прапорів, які у програмі (fready, begread, errtemp). Також налаштовуються переривання. Зовнішні переривання встановлюються по фронту і отримують найвищий пріоритет для підвищення точності вимірювання температури. p> Далі програма входить в цикл очікування і очікує прапор готовності даних, який, як раніше було сказано, встановлюється в кінці кожного вимірювання.
Після встановлення цього прапора починається обробка даних, що прийшли, але спочатку він скидається ...