ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Вимірювання тривалості імпульсу
         

     

    Інформатика, програмування
    Проектування приладу вимірювального тривалість імпульсу

    ВСТУП

    В даний час мікропроцесорна техніка робить великі успіхи в застосуванні, у різних галузях виробництва. Зараз мікропроцесори стали застосовуватися не тільки у побутовій техніці і в автомобілях, а й навіть у виробництві керуючи складними технологічними процесами.

    Мета курсового проекту сприяла створення вимірювального приладу на базі мікропроцесора AVR90S8515

    Мікропроцесори американської фірми ATMEL, в останні роки роблять значні успіхи в освоєнні нових областей в сфері свого застосування. Мікропроцесорне ядро, що використовується в мікроконтролерах AVR, схоже на більшість процесорів з RISC архітектурою, мабуть, за винятком 8-розрядних регістрів. Розроблено двома розробниками з Норвегії, в місті Trondheim. Пізніше, в 1995 році, розробка була придбана фірмою Atmel. До цих пір розвиток ядра відбувається в Норвегії, в той час як периферійні пристрої та пам'ять розробляються у відділенні Atmel в Каліфорнії.

    За допомогою проектованого приладу можна буде виміряти довжину імпульсів в діапазоні від 10 мсек до 10 Сек виміряна величі відображатися на чотирьох розрядному світлодіодному індикаторі

    1. ТЕХНІЧНЕ ЗАВДАННЯ

    Необхідно спроектувати прилад для вимірювання тривалості імпульсу.

    мін.

    Макс.

    Діапазон виміру:

    10 мС

    10с

    Похибка виміру

    1%

    Кількість гальванічно розв'язаних каналів

    Вхідна напруга логічної одиниці

    Вхідна напруга логічного нуля

    1

    рівень ТТЛШ

    рівень ТТЛШ

    Кількість режимів вимірювання

    2

    З-ие високо рівня тривалості імпульсу

    З-ие низького рівня тривалості імпульсу

    Можливість індикації обмірюваної тривалості

    Кількість режимів відображення обмірюваної тривалості

    Є

    Світлодіодні індикатори -4 шт

    2

    відображення в секундах

    відображення в милі секундах

    Вихідна напруга джерела живлення

    +5 В

    2. Розробка структурних схем. Узагальнений алгоритм РОБОТИ

    Структурна схема вимірювального приладу наведена на рис.1

    Структурна схема вимірювального приладу

    МСЕК - кнопка вибору відображення обмірюваної тривалості імпульсу в милі секундах.

    Сек - кнопка вибору відображення обмірюваної тривалості імпульсу в секундах

    Інверсія - кнопка вибору першого або другого режиму вимірювання см ТЗ.

    Св.Д1. - Світлодіод показує включення другого режиму вимірювання

    Св.Д2. - Світлодіод показує включення режиму відображення обмірюваної тривалості імпульсу в секундах.

    Св.Д3. - Світлодіод показує включення режиму відображення обмірюваної тривалості імпульсу в милі секундах.

    AVR90S8515 - однокристальна мікро-ЕОМ AVR90S8515

    Малюнок 1.

    Дешифратор проводять дешифрування двійковій-десяткового коду, а індикатори відображають результати вимірювання.

    При включенні харчування мікро-ЕОМ виробляє виконання підпрограми ініціалізації (ініціалізація стека, настроювання використовуваних портів введення/виводу, завантажується в компаратор А таймер/лічильника число 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 Вибір мікропроцесорного комплекту

    Відповідно до ТЗ ядром вимірювального приладу послужила однокристальна мікро-ЕОМ 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 Вибір кварцового резонатора

    Для роботи МП необхідний кварцовий резонатор який підключається до висновків XTAL1 і XTAL2 (див. графічну частину курсового проекту)

    Робоча частота кварцового резонатора безпосередньо пов'язана з точністю вимірювання тривалості імпульсу (з рис. 2 видно, що чим більше частота синхронізації тим точніше вимірювання тривалості) для заданої похибки виміру достатньо, щоб частота резонатора дорівнювала fрез = 8 МГц

    Малюнок 2

    3.1.1.1 Визначення похибки від джерела синхронізації

    Похибка від кварцового резонатора виникає внаслідок нестабільності його частоти під час роботи.

    Нестабільність частоти кварцового резонатора МА406 приблизно дорівнює 0.00001 від частоти синхронізації, виходячи з цього похибка виникає внаслідок нестабільності частоти можна визначити за формулою

    де К - нестабільність частоти кварцового резонатора

    К = 0.00001 * 8000000 = 80 Гц

    fBQ - частота кварцового резонатора

    3.2 Вибір інтегральної мікросхеми дешифратора

    У дешифратора буде використовуватися інтегральна мікросхема КР514ІД2

    3.3 Вибір засобів індикації

    Як засоби індикації будуть використовуватися світлодіодні індикатори - ААС3224А

    3.4 Вибір зовнішніх елементів гальванічної розв'язки

    Як елементи гальванічної розв'язки використовується цифрова мікросхема 249ЛП5 - Оптоелектронний перемикач на основі діодних оптопари виконаних у металлостеклянном корпусі. основні характеристики цифрової мікросхеми 249ЛП5 наведено в табл. 1.

    Таблиця 1

    Основні характеристики цифрової мікросхеми 249ЛП5

    Електричні параметри

    Вхідна напруга при IВХ = 15 мА

    не більше 1.7 В

    Вихідна напруга в стані логічного нуля

    0.4 В

    Вихідна напруга в стані логічної одиниці

    2.4

    Граничні експлуатаційні дані

    Вхідний постійний струм

    12 мА

    Вхідний імпульсний струм

    15 мА

    Напруга живлення

    5 (± 0.5) У

    Діапазон робочих температур

    -60 ... +85 ° З

    4. Визначення похибки вимірювання тривалості імпульсу

    Похибка виміру тривалості імпульсу, як уже говорилося вище, безпосередньо пов'язана безпосередньо пов'язана зі швидкістю роботи МП, в свою чергу швидкість якого задається тактовою частотою кварцового резонатора.

    Величина тимчасового кванта (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 Лістинг програми розрахунку тривалості імпульсу на мові асемблер

    Налагодження програми була зроблена за допомогою відладчика-симулятора 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: 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: ; Опитування стану кнопки

    SBIC PORTA, 1; режиму вимірювання тривалості імпульсу

    RCALL IMPULS_POLOGITELNAY; режим з-ия тривалості сигналу високого рівня

    RCALL IMPULS_OTRICHATELNAY; режим з-ия тривалості сигналу низького рівня

    M2:

    IMPULS_POLOGITELNAY:

    SBI PORTA, 2; Включаємо світлодіод

    SBIC PORTA, 0; Йде сканування лінії PA0

    RCALL IMPULS

    SBIS PORTA, 0; Відбувається перевірка на наявність 1

    RCALL IMPILS_1_TO_0; на PA1, якщо її немає, тоді перехід

    M5: CPI R17, 0xFF

    BRCS M2; якщо R17 переповниться, то

    LDI R17, 0XA; тоді занесемо в R17 10

    RJMP M2;

    Prog: INC R17;

    CPI R17, 0XA; Звіт тривалості імпульсу почнеться

    BRCS M3; тоді коли в R17 буде 10 (DEX) (пройде 10 мС)

    INC R16; інкремент R17 (лічильник пройшли мСекунд спрацьовує при R17> 10)

    BRBC 1, M3; якщо R16 переповниться

    INC R18; тоді інкрементіруем R18 (Тривалість імпульсу

    ; Минуло десять мС далі йде рахунок кожної мС

    M3: RETI; знаходиться в R18 (ст. розряд), R16 (мол. розряд)

    IMPULS:

    LDI R20, 0B00001001; якщо приходить імпульс то тоді запускається T/C1

    OUT TCCR1B, R20

    RET

    IMPILS_1_TO_0:

    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: ; підпрограма перевірки (чи дійсно T/C1 зупинився

    IN R21, TCCR1B; під час режиму вимірювання тривалості)

    ANDI R21, 0B000000000; якщо все в порядку, то тоді переходимо на bin16BCD5

    BRNE ENDTEST_OF

    RCALL bin16BCD5

    ENDTEST_OF:

    RET

    M2OTR:

    IMPULS_OTRICHATELNAY :

    CBI PORTA, 2; Вимикаємо світлодіод

    SBIS PORTA, 0; Відбувається перевірка на наявність 0

    RCALL IMPULS_OTR

    SBIC PORTA, 0

    RCALL IMPILS_0_TO_1; на PA1, якщо його немає, тоді перехід

    M5OTR: CPI R17, 0xFF

    BRCS M2OTR

    LDI R17, 0XA

    RJMP M2OTR;

    IMPULS_OTR :

    ; LDI R16, 0X9

    ; LDI R17, 0X0

    LDI R20, 0B00001001; то тоді запускається T/C1

    OUT TCCR1B, R20

    RET

    IMPILS_0_TO_1:

    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 :

    IN R21, TCCR1B

    ANDI R21, 0B000000000

    BRNE ENDTEST_OF_OTR

    RCALL bin16BCD5

    ENDTEST_OF_OTR:

    RET

    bin16BCD5: Підпрограма переведення двійкового числа в двійковій-десяткове

    MOV R22, R16

    MOV R23, R18

    ldi tBCD2, -1

    bin16BCD5_loop_1:

    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:

    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:

    inc tBCD1; визначення

    subi fbinL, low (100); кількості

    sbci fbinH, high (100); десятків

    brsh bin16BCD5_loop_3; в числі яке перекладається

    subi fbinL, -100

    ldi tBCD0,-0x10

    bin16BCD5_loop_4:

    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: ; Підпрограма перевірки, в чому відображати

    ; індикацію в мСекундах або Секутдах

    ; Примітка:

    ; якщо жодна з кнопок режиму відображення

    , не натиснута або натиснуті все, індикація відображатися не БУДЕ

    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: RET

    FLASH_mC:

    SBI PORTA, 5; Включаємо світлодіод (режим мСекунди)

    CBI PORTA, 6; Вимикаємо світлодіод (режим Секунди)

    CBI PORTA, 7; і вимикаємо розділову точку

    INC R27

    RET

    FLASH_C:

    CBI PORTA, 5; Включаємо світлодіод (режим Секунди)

    SBI PORTA, 6; Вимикаємо світлодіод (режим мСекунди)

    SBI PORTA, 7; і включаємо розділову точку

    INC R27

    RET

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status