Проектування приладу вимірювального тривалість імпульсу
ВСТУП
В даний час мікропроцесорна техніка робить великі успіхи в застосуванні, у різних галузях виробництва. Зараз мікропроцесори стали застосовуватися не тільки у побутовій техніці і в автомобілях, а й навіть у виробництві керуючи складними технологічними процесами.
Мета курсового проекту сприяла створення вимірювального приладу на базі мікропроцесора 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