Проектування приладу вимірювального тривалість імпульсу
 ВСТУП
 В даний час мікропроцесорна техніка робить великі успіхи в застосуванні, у різних галузях виробництва. Зараз мікропроцесори стали застосовуватися не тільки у побутовій техніці і в автомобілях, а й навіть у виробництві керуючи складними технологічними процесами.
 Мета курсового проекту сприяла створення вимірювального приладу на базі мікропроцесора AVR90S8515
 Мікропроцесори американської фірми ATMEL, в останні роки роблять значні успіхи в освоєнні нових областей в сфері свого застосування. Мікропроцесорне ядро, що використовується в мікроконтролерах AVR, схоже на більшість процесорів з RISC архітектурою, мабуть, за винятком 8-розрядних регістрів. Розроблено двома розробниками з Норвегії, в місті Trondheim. Пізніше, в 1995 році, розробка була придбана фірмою Atmel. До цих пір розвиток ядра відбувається в Норвегії, в той час як периферійні пристрої та пам'ять розробляються у відділенні Atmel в Каліфорнії.
 За допомогою проектованого приладу можна буде виміряти довжину імпульсів в діапазоні від 10 мсек до 10 Сек виміряна величі відображатися на чотирьох розрядному світлодіодному індикаторі
 1.  ТЕХНІЧНЕ ЗАВДАННЯ
 b> 
 Необхідно спроектувати прилад для вимірювання тривалості імпульсу.
 мін.
 Макс.
 Діапазон виміру:
 10 мС
 10с
 Похибка виміру
 1%
 Кількість гальванічно розв'язаних каналів
 Вхідна напруга логічної одиниці
 Вхідна напруга логічного нуля
 1
 рівень ТТЛШ
 рівень ТТЛШ
 Кількість режимів вимірювання
 2
 З-ие високо рівня тривалості імпульсу
 З-ие низького рівня тривалості імпульсу
 Можливість індикації обмірюваної тривалості
 Кількість режимів відображення обмірюваної тривалості
 Є
 Світлодіодні індикатори -4 шт
 2
 відображення в секундах
 відображення в милі секундах
 Вихідна напруга джерела живлення
 +5 В
 
 2. Розробка структурних схем. Узагальнений алгоритм РОБОТИ
 b> 
 Структурна схема вимірювального приладу наведена на рис.1
 Структурна схема вимірювального приладу
 
 МСЕК - кнопка вибору відображення обмірюваної тривалості імпульсу в милі секундах.
 Сек - кнопка вибору відображення обмірюваної тривалості імпульсу в секундах
 Інверсія - кнопка вибору першого або другого режиму вимірювання см ТЗ.
 Св.Д1. - Світлодіод показує включення другого режиму вимірювання
 Св.Д2. - Світлодіод показує включення режиму відображення обмірюваної тривалості імпульсу в секундах.
 Св.Д3. - Світлодіод показує включення режиму відображення обмірюваної тривалості імпульсу в милі секундах.
 AVR90S8515 - однокристальна мікро-ЕОМ AVR90S8515
 
 Малюнок 1.
 b> 
 Дешифратор проводять дешифрування двійковій-десяткового коду, а індикатори відображають результати вимірювання.
 При включенні харчування мікро-ЕОМ виробляє виконання підпрограми ініціалізації (ініціалізація стека, настроювання використовуваних портів введення/виводу, завантажується в компаратор А таймер/лічильника число 80000, вибирається потрібний режим роботи таймер/лічильника 1 (біт CTC1 регістра керування таймером/лічильником 1 (TCCR1B), встановлюється в одиницю, що означає скидання таймер/лічильника 1 при спрацьовуванні компаратора А, також біт CS10, що знаходиться в цьому ж регістрі, встановлюється в одиницю, це означає, що як джерело синхронізації буде використовуватися частота синхронізації кварцового резонатора) , відбувається глобальне дозвіл переривань). Далі відбувається опитування стану кнопки вибору режиму виміру тривалості імпульсу і залежно від її стану (0 - вимірювання низького рівня тривалості імпульсу, 1 - вимірювання високого рівня тривалості імпульсу), відбувається перехід на відповідну підпрограму (IMPULS_POLOGITELNAY - підпрограма вимірювання високого рівня тривалості імпульсу, IMPULS_OTRICHATELNAY - підпрограма вимірювання низького рівня тривалості імпульсу).
 Алгоритм роботи цих двох підпрограм практичний однаковий, для прикладу розглянемо роботу підпрограми IMPULS_POLOGITELNAY. При переході на цю підпрограму МП починає опитування лінії PA0 і в разі виявлення на ній логічної одиниці запускає таймер/лічильник 1. При спрацьовуванні компаратора А відбувається скидання таймер/лічильника 1 (у компаратор А додано число - 8000, при частоті синхронізації МП рівній 8Мгц спрацьовування компаратора відбудеться рівно через 1мС ±
1%), що говорить про після 1мСек. Звіт милі секунд відповідно до ТЗ почнеться після минулої дев'ятого милі секунди. Індикація вимірюваної тривалості імпульсу відбувається кожні 50 МСЕК. Разом з цим МП продовжує сканувати лінію PA0 і після того як він виявить на ній стан логічного нуля, що говорить про кінець вимірювання тривалості імпульсу, відбудеться зупинка таймера/лічильника 1 і зробить перехід на підпрограму перекладу двійкового шістнадцяти розрядного числа в двійковій-десяткове - bin16BCD5 (детальний алгоритм перекладу двійкового шістнадцяти розрядного числа в двійковій-десяткове розглянуто нижче). Після виконання підпрограми bin16BCD5, МП опитує стан кнопок МСЕК і Сек. Якщо натиснута кнопка Сек (індикація результату вимірювання проводиться в секундах), то тоді МП шляхом видачі з лінії РА7 логічної одиниці відображає точку розділяє цілу частину числа від дробової. Якщо не натиснута ні одна з двох кнопок або натиснуті все, то тоді індикація результату вимірювання проводиться не буде. Після того як проведе індикація результату вимірювання (через лінії порту D і C) МП повертається в основну програму. На цьому цикл роботи програми закінчується.
 Алгоритм підпрограма перекладу двійкового шістнадцяти розрядного числа в двійковій-десяткове
 Арифметико-логічний пристрій AVR-мікроконтролерів (як і інших мікропроцесорів) виконує елементарні арифметичні та логічні операції над числами, представленими в двійковому коді. У двійковому коді зчитуються результати перетворення АЦП, в двійковому коді (у форматі цілих чисел або чисел з плаваючою точкою) зручно виконувати обробку результатів вимірювання. Однак, коли остаточний результат відображається на індикаторі, він повинен бути перетворений в десятковий формат, зручний для сприйняття людиною.
 Формати представлення десяткових чисел
 В даний час поширені два формати представлення десяткових чисел в мікропроцесорах - упакований двійковій-десятковий код (BCD-Binary-Coded Decimal).
 Упакований BCD-код - це таке подання десяткового числа, коли кожна десяткова цифра видається 4-х бітним двійковим позиційним кодом 8-4-2-1. При цьому байт містить дві десяткові цифри. Молодша десяткова цифра займає праву тетраду (біти 3: 0), старша - ліву тетраду (біти 7: 4). Багаторозрядних BCD-числа займають кілька суміжних байт. Якщо число є знаковим, то для представлення знака в BCD-форматі відводиться старша тетрада старшого байта
 Алгоритм підпрограми bin16bcd5 полягає в наступному. Припустимо, що є ціла беззнакові 16-бітне число (діапазон від 0 до 65535). Очевидно, що необхідно знайти 5 десяткових цифр. Спосіб перетворення полягає в тому, щоб, віднімаючи з вихідного числа число 10000, спочатку визначити десяткову цифру десятків тисяч. Потім знаходиться цифра тисяч послідовним вирахуванням числа 1000 і т. д. Віднімання щоразу проводиться до отримання негативної різниці з підрахунком числа віднімання. При переході до визначення кожного наступного десяткового розряду в регістрах вихідного числа відновлюється остання позитивна різниця. Після того, як буде знайдено десяткова цифра десятків, в регістрах вихідного числа залишиться десяткова цифра одиниць.
 
 3. РОЗРОБКА І РОЗРАХУНОК ЕЛЕМЕНТІВ Принципова електрична схема
 3.1 Вибір мікропроцесорного комплекту
 b> 
 Відповідно до ТЗ ядром вимірювального приладу послужила однокристальна мікро-ЕОМ AVR90S8515 фірми Atmel.
 Основні характеристики однокристальної мікро-ЕОМ AVR90S8515:
 • AVR RISC архітектура - архітектура високої продуктивності та малого споживання
 • 120 команд, більшість яких виконується за один машинний цикл
 • 8 Кбайта Flash ПЗУ програм, з можливістю внутрішньосистемного перепрограмування і завантаження через SPI послідовний канал, 1000 циклів стирання/запис
 • 512 байтів ЕСППЗУ даних, з можливістю внутрішньосистемної завантаження через SPI послідовний канал, 100000 циклів стирання/запис
 • 512 байтів вбудованого СОЗУ
 • 32 x 8 біт регістра загального призначення
 • 32 програмованих ліній введення/виводу
 • 16-розрядний і 32-розрядний формат команд
 • Діапазон напруг живлення від 2,7 В до 6,0 В
 • Повністю статичний прилад - працює при тактовою частотою від 0 Гц до 8 МГц
 • Тривалість командного циклу: 125 нс, при тактовою частотою 8 МГц
 • 8-розрядний і 16-розрядний (з режимами порівняння та захоплення) таймери/лічильники
 • Здвоєний ШІМ з 8, 9 або 10-розрядних роздільною здатністю
 • Програмований повний дуплексний UART
 • Два зовнішніх і десять внутрішніх джерел сигналу переривання
 • Програмований сторожовий таймер з власним вбудованим генератором
 • Вбудований аналоговий компаратор
 • Режими енергозбереження: пасивний (idle) і стоповий (power down)
 • Блокування режиму програмування
 • Промисловий (-40 ° C. .. +85 ° C) та комерційний (0 ° C. .. +70 ° C) діапазони температур
 • 40-вивідний корпус PDIP і 44-вивідні корпусу TQFP і PLCC
 КМОП мікроконтроллер AT90S8515 реалізований за AVR RISC архітектури
 (Гарвардська архітектура з роздільною пам'яттю і роздільними шинами для пам'яті програм і даних) і сумісний з вихідних кодів і тактірованію з 8-розрядними мікроконтролерами сімейства AVR (AT90SXXX). Виконуючи команди за один тактовий цикл, прилад забезпечує продуктивність, що наближається до 1 MIPS/МГц. AVR ядро об'єднує потужну систему команд з 32 8-розрядними регістрами загального призначення і конвеєрне звернення до пам'яті програм. Шість з 32 регістрів можуть використовуватися як три 16-розрядних регістра-покажчика при непрямої адресації простору пам'яті. Виконання відносних переходів і команд виклику реалізується за прямої адресацією всіх 4К адресного простору. Адреса периферійних функцій містяться в просторі пам'яті введення/виводу. Архітектура ефективно підтримує як мови високого рівня, так і програми на мовах асемблера. Вбудована завантажувана Flash пам'ять забезпечує внутрішньосистемні перепрограмування з використанням інтерфейсу SPI (в послідовному Вбудована завантажувана Flash пам'ять забезпечує внутрішньосистемні перепрограмування з використанням інтерфейсу SPI (в послідовному низько вольтовому режимі) або з використанням стандартних програматорів незалежній пам'яті (у 12-вольтовому паралельному режимі). Споживання приладу в активному режимі складає 3,5 мА і в пасивному режимі 1 мА (при VCC = 3 В і f = 4 МГц). У стоповою режимі, при працюючому сторожовому таймері, мікроконтроллер споживає 50 мкА. низько вольтовому режимі) або з використанням стандартних програматорів незалежній пам'яті (у 12-вольтовому паралельному режимі). Споживання приладу в активному режимі складає 3,5 мА і в пасивному режимі 1 мА (при VCC = 3 В і f = 4 МГц). У стоповою режимі, при працюючому сторожовому таймері, мікроконтроллер споживає 50 мкА.
 
 3.1.1 Вибір кварцового резонатора
 b> 
 Для роботи МП необхідний кварцовий резонатор який підключається до висновків XTAL1 і XTAL2 (див. графічну частину курсового проекту)
 Робоча частота кварцового резонатора безпосередньо пов'язана з точністю вимірювання тривалості імпульсу (з рис. 2 видно, що чим більше частота синхронізації тим точніше вимірювання тривалості) для заданої похибки виміру достатньо, щоб частота резонатора дорівнювала fрез = 8 МГц
 
 Малюнок 2
 
 3.1.1.1 Визначення похибки від джерела синхронізації
 b> 
 Похибка від кварцового резонатора виникає внаслідок нестабільності його частоти під час роботи.
 Нестабільність частоти кварцового резонатора МА406 приблизно дорівнює 0.00001 від частоти синхронізації, виходячи з цього похибка виникає внаслідок нестабільності частоти можна визначити за формулою
 
 де К - нестабільність частоти кварцового резонатора
 К = 0.00001 * 8000000 = 80 Гц
 fBQ - частота кварцового резонатора
 
 
 3.2 Вибір інтегральної мікросхеми дешифратора
 b> 
 У дешифратора буде використовуватися інтегральна мікросхема КР514ІД2
 
 3.3 Вибір засобів індикації
 b> 
 Як засоби індикації будуть використовуватися світлодіодні індикатори - ААС3224А
 
 3.4 Вибір зовнішніх елементів гальванічної розв'язки
 b> 
 Як елементи гальванічної розв'язки використовується цифрова мікросхема  249ЛП5  b> - Оптоелектронний перемикач на основі діодних оптопари виконаних у металлостеклянном корпусі. основні характеристики цифрової мікросхеми  249ЛП5  b> наведено в табл. 1.
 Таблиця 1
 
 Основні характеристики цифрової мікросхеми 249ЛП5  b>
 Електричні параметри
 Вхідна напруга при IВХ = 15 мА
 не більше 1.7 В
 Вихідна напруга в стані логічного нуля
 0.4 В
 Вихідна напруга в стані логічної одиниці
 2.4
 Граничні експлуатаційні дані
 Вхідний постійний струм
 12 мА
 Вхідний імпульсний струм
 15 мА
 Напруга живлення
 5 (±
0.5) У
 Діапазон робочих температур
 -60 ... +85 °
З
 
 4. Визначення похибки вимірювання тривалості імпульсу
 b> 
 Похибка виміру тривалості імпульсу, як уже говорилося вище, безпосередньо пов'язана безпосередньо пов'язана зі швидкістю роботи МП, в свою чергу швидкість якого задається тактовою частотою кварцового резонатора.
 Величина тимчасового кванта (d) у нашому випадку, дорівнює періоду проходження імпульсів кварцового резонатора (t
) Тобто d = t
. Зміряне значення однієї милі секунди дорівнює (відповідно до ТЗ дискретність вимірювання тривалості дорівнює 1мСек):
 T = t
* N
 Де N - число імпульсів, що надійшли на таймер/счетчік1.
 Отже виміряне значення відрізняється від істинного на величину похибки квантування D
К = D
tК:
 D
tК = T-Tx = N * t
-Tx
 де Tx - справжнє значення.
 Похибка квантування залежить від величини кванта t
 і від моментів початку та закінчення циклів вимірювання (див. рис.2) по відношенню до імпульсів кварцового резонатора. Очевидно, що як початок і кінець вимірювання тривалості можуть розташовуватися в будь-якій точці між двома сусідніми імпульсами. В результаті виникають дві складових похибки D
tК Перша з них (D
t1 див. рис.2) позитивна, тому що виміряний часовий інтервал більше істинного його значення, а другий D
t2 негативна, тому що із за неї виміряний часовий інтервал виходить більше фактичного. Отже справжнє значення тимчасового інтервалу буде:
 Тх = N * t
- (D
t1-D
t2) = N * t
-D
t1 + D
t2
 Pзакон розподілу помилок D
t1 і D
t2 з урахуванням їх різних знаків представляє собою розподіл Сімпсона, а середньо квадратична похибка квантування слідуючи вказівкам [2, с 20] буде дорівнювати
 
 
 
 
 5 Лістинг програми розрахунку тривалості імпульсу на мові асемблер
 b> 
 Налагодження програми була зроблена за допомогою відладчика-симулятора AVRSTUDIO 3.0
 Код програми:
. include "8515def.inc". def fbinL = r22; двійкове значення, молодший байт байт.def fbinH = r23; двійкове значення, старший байт.def tBCD0 = r23; BCD значення, цифри 1 і
. def tBCD1 = r24; BCD значення, цифри 3 і2
. def tBCD2 = r25; BCD значення, цифри 4
; Призначення висновків порту А:
; bit 0 - надходить імпульс
; тривалість якого
; необхідно виміряти
; bit 1 - підключається кнопка
; режиму вимірювання
; 0 - вимірювання тривалості
; негативного імпульсу
; 1 - вимірювання тривалості
; позитивного імпульсу
; bit 2 - індикація режиму вимірювання
; 0 - (світлодіод погашений)
; індикація режиму вимірювання
; негативного імпульсу
; 1 - (світлодіод світиться)
; індикація режиму вимірювання
; позитивного імпульсу
; bit 3 - підключається кнопка
; режиму вимірювання
; тривалості імпульсу в мС
; bit 4 - підключається кнопка
; режиму вимірювання
; тривалості імпульсу в С
; bit 5 - підключається світлодіод
; режиму вимірювання тривалості
; імпульсу в мС
; bit 6 -?? одключается світлодіод
; режиму вимірювання тривалості
; імпульсу в С
. ORG 0
 RJMP MET1
 RJMP IMPULS
 RJMP MET1
 RJMP MET1
 1: RJMP Prog
 RJMP Prog
 RJMP MET1
 RJMP MET1
 
 MET1:  b> LDI R16, 0x02
 OUT SPH, R16; Ініціалізація
 LDI R16, 0X10; стека
 OUT SPL, R16
 LDI R16, 0B11100100
 OUT DDRA, r16; Налаштовуємо Ліни b 0,1,3,4
; ПОРТУ А НА ENTER, а лінії 2,5,6,7 на висновок
 LDI R16, 0B11111111; Налаштовуємо ВСЕ ЛІНІЇ
 OUT DDRC, R16; ПОРТУ C НА ВИСНОВОК
 LDI R16, 0B11111111; Налаштовуємо ВСЕ ЛІНІЇ
 OUT DDRD, R16; ПОРТ D НА ВИСНОВОК
 LDI R16, 0B01000000; Дозвіл переривання
 OUT TIMSK, R16; по переповнення T/C1
 LDI R16, 0B00000000; ЗАБОРОНА переривання
 OUT GIMSK, R16; по INT0
 LDI R16, 0X1F; Завантажуємо в
 OUT OCR1AH, R16; компататор А - 8000
 LDI R16, 0X40
 OUT OCR1AL, R16
 LDI R16, 0B00000000
 OUT TCNT1L, R16
 LDI R16, 0B00001000; T/C1 буде обнулятиметься при кожному збігу
 OUT TCCR1B, R16; зі значенням компаратора А
 LDI R16, 0B10000000; Глобальне дозвіл переривань
 OUT SREG, R16
 LDI R16, 0X9
 LDI R19, 0X9; R19 регістр перепризначених для порівняння
; з R16 якщо вони рівні, то тоді вимір
; тривалості імпульсу не починалося
 CLR R17
 clr r22
 
 OPROS_KEY_OF_INVERT:  b>; Опитування стану кнопки
 SBIC PORTA, 1; режиму вимірювання тривалості імпульсу
 RCALL IMPULS_POLOGITELNAY; режим з-ия тривалості сигналу високого рівня
 RCALL IMPULS_OTRICHATELNAY; режим з-ия тривалості сигналу низького рівня
 
 M2:
 IMPULS_POLOGITELNAY:
 b> 
 SBI PORTA, 2; Включаємо світлодіод
 SBIC PORTA, 0; Йде сканування лінії PA0
 RCALL IMPULS
 SBIS PORTA, 0; Відбувається перевірка на наявність 1
 RCALL IMPILS_1_TO_0; на PA1, якщо її немає, тоді перехід
 
 M5:  b> CPI R17, 0xFF
 BRCS M2; якщо R17 переповниться, то
 LDI R17, 0XA; тоді занесемо в R17 10
 RJMP M2;
 
 Prog:  b> INC R17;
 CPI R17, 0XA; Звіт тривалості імпульсу почнеться
 BRCS M3; тоді коли в R17 буде 10 (DEX) (пройде 10 мС)
 INC R16; інкремент R17 (лічильник пройшли мСекунд спрацьовує при R17> 10)
 BRBC 1, M3; якщо R16 переповниться
 INC R18; тоді інкрементіруем R18 (Тривалість імпульсу
; Минуло десять мС далі йде рахунок кожної мС
 
 M3:  b> RETI; знаходиться в R18 (ст. розряд), R16 (мол. розряд)
 
 IMPULS:
 b> 
 LDI R20, 0B00001001; якщо приходить імпульс то тоді запускається T/C1
 OUT TCCR1B, R20
 RET
 
 IMPILS_1_TO_0:
 b> 
 LDI R20, 0B00000000; якщо імпульс закінчився T/C1 зупиняється
 OUT TCCR1B, R20
 CPSE R16, R19; перевірка на початок циклу вимірювання якщо він начілся
 RCALL TEST_OF_STOP_TC1; то тоді перехід на TEST_OF_STOP_TC1
 SBIC PORTA, 1; Опитування стану кнопки режиму вимірювання тривалості імпульсу
 RCALL IMPULS_POLOGITELNAY; режим з-ия високого рівня тривалості
 RCALL IMPULS_OTRICHATELNAY; режим з-ия низького рівня тривалості
 RET
 
 TEST_OF_STOP_TC1:  b>; підпрограма перевірки (чи дійсно T/C1 зупинився
 IN R21, TCCR1B; під час режиму вимірювання тривалості)
 ANDI R21, 0B000000000; якщо все в порядку, то тоді переходимо на bin16BCD5
 BRNE ENDTEST_OF
 RCALL bin16BCD5
 ENDTEST_OF:
 RET
 
 M2OTR:
 IMPULS_OTRICHATELNAY  b>:
 CBI PORTA, 2; Вимикаємо світлодіод
 SBIS PORTA, 0; Відбувається перевірка на наявність 0
 RCALL IMPULS_OTR
 SBIC PORTA, 0
 RCALL IMPILS_0_TO_1; на PA1, якщо його немає, тоді перехід
 
 M5OTR:  b> CPI R17, 0xFF
 BRCS M2OTR
 LDI R17, 0XA
 RJMP M2OTR;
 
 IMPULS_OTR  b>:
; LDI R16, 0X9
; LDI R17, 0X0
 LDI R20, 0B00001001; то тоді запускається T/C1
 OUT TCCR1B, R20
 RET
 
 IMPILS_0_TO_1:
 b> 
 LDI R20, 0B00000000; T/C1 зупинений
 OUT TCCR1B, R20
 CPSE R16, R19
 RCALL TEST_OF_STOP_TC1_OTR
 SBIC PORTA, 1
 RCALL IMPULS_POLOGITELNAY
 RCALL IMPULS_OTRICHATELNAY
 RET
 
 TEST_OF_STOP_TC1_OTR  b>:
 IN R21, TCCR1B
 ANDI R21, 0B000000000
 BRNE ENDTEST_OF_OTR
 RCALL bin16BCD5
 
 ENDTEST_OF_OTR:
 b> 
 RET
 
 bin16BCD5:  b> Підпрограма переведення двійкового числа в двійковій-десяткове
 MOV R22, R16
 MOV R23, R18
 ldi tBCD2, -1
 
 bin16BCD5_loop_1:
 b> 
 inc tBCD2; визначення
 subi fbinL, low (10000); кількості
 sbci fbinH, high (10000); десятків тисяч
 brsh bin16BCD5_loop_1; в числі яке перекладається
 subi fbinL, low (-10000)
 sbci fbinH, high (-10000)
 ldi tBCD1,-0x11
 
 bin16BCD5_loop_2:
 b> 
 subi tBCD1,-0x10; визначення
 subi fbinL, low (1000); кількості
 sbci fbinH, high (1000); тисяч
 brsh bin16BCD5_loop_2; в числі яке перекладається
 subi fbinL, low (-1000)
 sbci fbinH, high (-1000)
 
 bin16BCD5_loop_3:
 b> 
 inc tBCD1; визначення
 subi fbinL, low (100); кількості
 sbci fbinH, high (100); десятків
 brsh bin16BCD5_loop_3; в числі яке перекладається
 subi fbinL, -100
 ldi tBCD0,-0x10
 
 bin16BCD5_loop_4:
 b> 
 subi tBCD0,-0x10; визначення
 subi fbinL, 10; кількості
 brsh bin16BCD5_loop_4; одиниць
 subi fbinL, -10; в числі яке перекладається
 add tBCD0, fbinL
 LDI R16, 0X9
 LDI R17, 0X0
 ldi r18, 0x0
 LDI R27, 0X0
 
 WAIT_PRESS_KEY:  b>; Підпрограма перевірки, в чому відображати
; індикацію в мСекундах або Секутдах
; Примітка:
; якщо жодна з кнопок режиму відображення
, не натиснута або натиснуті все, індикація відображатися не БУДЕ
 SBRC R27, 0
 RJMP EXIT
 SBIC PORTA, 3; Якщо натиснута кнопка мСекунди
 RCALL FLASH_mC; то тоді перехід на FLASH_mC
 SBIC PORTA, 4; якщо натиснута кнопка Секунди
 RCALL FLASH_C; то тоді перехід на FLASH_C
 RJMP WAIT_PRESS_KEY; якщо жодна з кнопок не натиснута
; то тоді очікуємо натискання
 SBIS PORTA, 3; у противному випадку вихід з підпрограми
 RJMP EXIT
 SBIC PORTA, 4; якщо натиснуті всі дві кнопки, то тоді
 чекаємо поки одну кнопку не відключать
 RJMP WAIT_PRESS_KEY
 OUT PORTD, R23; висновок на порт D двійковій-десяткового числа
 OUT PORTC, R24; висновок на порт C двійковій-десяткового числа
 OUT TCNT1H, R18; обнулення регістра NCNT1H (ст. регістр T/C1)
 OUT TCNT1L, R18; обнулення регістра NCNT1L (мол. регістр T/C1)
 
 EXIT:  b> RET
 
 FLASH_mC:
 b> 
 SBI PORTA, 5; Включаємо світлодіод (режим мСекунди)
 CBI PORTA, 6; Вимикаємо світлодіод (режим Секунди)
 CBI PORTA, 7; і вимикаємо розділову точку
 INC R27
 RET
 
 FLASH_C:
 b> 
 CBI PORTA, 5; Включаємо світлодіод (режим Секунди)
 SBI PORTA, 6; Вимикаємо світлодіод (режим мСекунди)
 SBI PORTA, 7; і включаємо розділову точку
 INC R27
 RET