Електроний посібник з
дисципліни "Мікропроцесорні системи"
 
Дипломный проект
                                                               Лабораторна робота №6

                             Побудова апаратного відмітника часу з використанням таймера

Ціль роботи: вивчити принципи написання оброблювачів переривання, навчитися розраховувати значення константи, що  завантажується в таймер за заданим періодом формування міток часу, навчитися працювати у відлагоджувачі при використанні  переривань, спостерігати за таймером у режимі відмітника часу.

Теоретичні відомості. Відмітник часу - пристрій, який формує переривання через фіксовані проміжки часу.
Робота з таймером у режимі відмітника часу з використанням переривання складається з декількох етапів.
Спочатку необхідно встановити таймер у режимі 1 (16-розрядний таймер). Задання режиму проводиться за допомогою занесення  керуючого слова в регістр TMОD. За режим ТМ0 відповідають біти D1, D0.
Для формування необхідного коефіцієнта ділення заносимо в регістри TH0, TL0 число, що дорівнює різниці 65535 і значенню  необхідного коефіцієнта ділення.
Для дозволу роботи ТМ0 установлюємо в регістрі TCON.4 логічну «1».
Для дозволу проходження переривання від ТМ0 у регістрі IE.1 і IE.7
необхідно встановити «1».
   Для організації тимчасових затримок з використанням відмітника часу використовуємо програмно організовані лічильники,  розташовувані в пам'яті даних. Для запуску затримки в комірку заноситься число. Значення числа визначається як результат  ділення необхідної тимчасової затримки на період відмітника часу. Контроль закінчення затримки виконується перевіркою на  нуль значення в програмному лічильнику. Декрементування лічильників проводиться в оброблювачі переривання, якщо лічильник  не дорівнює нулю.
  Текст програми мовою Асемблера, що реалізує миготіння світлодіоду порту Р1.0, яка здійснює керування двома затримками.  Лічильники затримок організовано в 31 і 32 комірках пам'яті даних.
  Пояснення до програми. Дана програма використовує таймер  0 для створення апаратного відмітника часу з періодом 50 mc. Вектор переривання від таймера 0 перебуває за адресою 0bh. В оброблювачі переривань проводиться перезавантаження таймера, яке забезпечує час до наступного переривання, що дорівнює  50 mc. У комірці 30h організовано програмний постдільник на 20. Таким чином, за допомогою постдільника одержуємо період відмітника 1 с. Така змінна дуже зручна, якщо необхідно робити періодичні дії з періодом 1 с. У комірках 31 h і 32 h організовуємо затримки від 1 до 255 с.
  В основній програмі (мітка м0) робимо ініціалізацію таймера й переривання від нього, після чого запалюємо світлодіод, підключений до біта 0 порту 1, і за допомогою затримки 1 залишаємо увімкненим його на 3 с. Після цього гасимо його й залишаємо вимкненим на 3 с за допомогою затримки 2. Командою LJMP On зациклюємо програму на миготіння.
Установивши крапки зупинки на рядках з мітками On і Off, у моменти зупинки програми можна бачити, що зміна стану світлодіоду відбувається кожні 3000000 мкс.
Методика виконання:
1. Заносимо програму у вікно її редактора.
2. Контроль над роботою програми здійснюємо за допомогою редактора оточення. Для цього підключаємо на вихід P1.0 світлодіод.
3. Установлюємо крапки зупинки відповідно до пояснень до програми.
Створюємо вікно для спостереження за змінними в процесі налагодження. Для цього в меню вибираємо пункти Вид - Перегляд значень. Ініціюємо правою кнопкою миші й додаємо у вікно регістри, що цікавлять нас, і комірки пам'яті (th0, tl0, 30h, 31h, 32h) (рис. 1). Через вікно створення перегляду й конструктор виразів.
Рис. 1. Вікно для заповнення вікна налагодження
4. У результаті одержуємо вікно перегляду значень зі змінними які нам необхідні для налагодження (рис. 3).
5.Для більш повного розуміння процесів, пов'язаних з перериванням програми таймером, виконання програми до першого переривання робимо симуляцією в покроковому режимі. Для цього перший цикл переривання при ініціалізації виконаний укороченим.