відповідне нашому технічному завданню. p align="justify"> Для того, щоб вирішити дану проблему, нам необхідно вдосконалити наш алгоритм. Для цього в програму досить ввести процедуру очікування. Процедура очікування призупиняє основний цикл програми відразу після того, як відбудеться перемикання світлодіода. Тепер програма повинна очікувати момент відпускання кнопки. Як тільки кнопка виявиться відпущеної, виконання головного циклу поновлюється. p align="justify"> Новий, доопрацьований алгоритм наведено на рис. 4.9. Як видно з малюнка, новий алгоритм доповнено всього двома новими операціями, які й реалізують цикл очікування. Цикл очікування додано після процедури перемикання світлодіода. Виконуючи цикл очікування, програма спочатку читає значення біта PD0, а потім перевіряє його на рівність одиниці. Якщо PD0 не дорівнює одиниці (кнопка натиснута), то цикл очікування повторюється. Якщо PD0 дорівнює одиниці (кнопка відпущена) то цикл очікування переривається, управління перейде на початок основного циклу. br/>
4. Лабораторна № 4
.1 біжать вогні
Постановка завдання
В«Розробити автоматВ« Ті, що біжать вогні В»для управління складовою гірляндою з восьми окремих гірлянд. Пристрій має забезпечувати В«рухВ» вогню у двох різних напрямках. Перемикання напряму В«рухуВ» має здійснюватися за допомогою перемикача В». br/>
4.2 Схема
Відповідно з поставленим завданням наш пристрій має керувати вісьмома світловими гірляндами. Зручно задіяти для цього всі вісім виходів одного з портів. Крім того, нам доведеться підключати перемикач напрямку. Для цього нам знадобиться ще один порт. Очевидно, що для такого завдання цілком підійде вже знайомий нам мікроконтроллерATtiny2313. p align="justify"> Для створення і налагодження програми зовсім не обов'язково підключати до мікроконтролера гірлянди лампочок. Для початку підключимо просто вісім світлодіодів. Для підключення цієї гірлянди кожен світлодіод потрібно замінити ключовою схемою на тиристорі, до якої вже підключити гірлянду. Приклади ключових схем легко знайти в радіоаматорського літературі. Схема біжать вогнів зі світлодіодами наведена на рис. 1. br/>
4.3 Алгоритм
Для створення ефекту В«біжать вогнівВ» найзручніше скористатися операторами зсуву, які є в системі команд будь-якого мікроконтролера. Такі оператори зрушують вміст одного з регістрів мікроконтролера на один розряд вліво або вправо. Якщо зрушувати вміст регістра і після кожного зсуву виводити новий вміст в порт РВ, підключені до нього світлодіоди будуть загорятися по черзі, імітуючи біжить вогонь. Алгоритм роботи біжать вогнів може різний. Один з можливих алгоритмів в найзагальніших рисах буде виглядати наступним чином:
Вважати стан перемикача управління.
Якщо контакти перемикача розімкнуті, перейти до процедури зсуву вправо.
Якщо контакти замкнені, перейти до процедури зсуву вліво.
Після закінчення повного циклу зсуву (вісім послідовних зрушень) перейти до початку алгоритму, тобто до пункту 1.
Таким чином, весь час, поки контакти перемикача розімкнуті, програма буде виконувати зрушення вправо. Якщо стан перемикача не змінилося, зрушення в колишньому напрямі триває. Якщо замкнути контакти перемикача, то весь час, поки вони замкнуті, виконуватиметься зрушення вліво. Як при зсуві вправо, так і при зсуві вліво після кожного повного циклу зсуву (8 кроків) відбувається перевірка перемикача. Якщо його стан не такий же, як і колись, то напрям зрушення не змінюється. В іншому випадку програма змінює напрямок зсуву. p align="justify"> Виконання алгоритму зсуву
В
Рис. 1. Схема автомата В«Біжать вогнівВ»
Подивимося тепер, як виконується сам алгоритм зсуву. Зрушення вліво і зсув вправо виконуються аналогічно. Нижче наводиться узагальнений алгоритм для зсуву вліво і зсуву вправо, забезпечений коментарями. ol>
Записати в робочий регістр початкове значення. В якості початкового значення використовується двійкове число, у якого один з розрядів дорівнює одиниці, а інші розряди дорівнюють нулю. Для зсуву вправо нам потрібно число з одиницею в самому старшому розряді (0b10000000) Для зсуву вліво в одиницю встановлюється молодший розряд (0 b 0 0 0 0 0 0 0 l).
Вивести значення робочого регістра в порт РВ.
дізнався підпрограму затримки. Затримка потрібна для того, щоб швидкість В«перегониВ» вогнів була нормальна для очей спостерігача. Якби не було затримки, то швидкість В«перегониВ» була б н...