Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

Директиви

.include - додає до поточного тексту програми інший програмний текст.

.list

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

.def

Макровизначення. Ця команда дозволяє присвоїти різним регістрам мікроконтролера будь-які осмислені імена, які спрощують читання і розуміння тексту програми.

.cseg

Псевдоопертор вибору програмного сегменту пам’яті. Для зберігання даних мікроконтролер має 3 вида пам’яті: пам'ять програми(Flash), оперативна пам'ять( SRAM), енергонезалежна пам'ять даних(EEPROM) . Існують директиви для кожного сегменту:

Сегмент кода(пам’яті програми) - .cseg

Сегмент даних ( ОЗУ ) – .desg

Сегмент EEPROM - .eseg

.org

Примусове позиціонування вказівника поточної адреси. Іноді необхідно розмістити фрагмент програми в програмній пам’яті не зразу після попереднього фрагменту, а в конкретному місці програмної пам’яті.

Оператори

ldi – завантаження в регістр загального призначення(РЗП) числової константи. Має 2 параметри: перший параметр – ім’я РЗП, куди записується константа, другий параметр – значення константи.

out – виведення значення РЗП в регістр вводу-вивиду(РВВ). Має 2 параметри: перший параметр – ім’я РВВ, який є приймачем інформації, другий параметр – ім’я РЗП, який є джерелом.

in - ввод інформації з РВВ. Має 2 параметри: перший параметр - ім’я РЗП, який є джерелом, другий параметр – ім’я РВВ, який є приймачем інформації

НЕ нашли? Не то? Что вы ищете?

rjmp – команда безумовного переходу

sbrc – пропускає наступну за нею команду, якщо відповідний розряд РЗП є 0. Має 2 параметри: перший параметр – ім’я РЗП, другий параметр – номер перевіряє мого біта.

sbrs – пропускає наступну за нею команду, якщо відповідний розряд РЗП є 1. Має 2 параметри: перший параметр – ім’я РЗП, другий параметр – номер перевіряє мого біта.

sbi – установка в нуль одного з розрядів РВВ. Команда має 2 параметри: ім’я порта і номер розряду.

cbi - установка в один одного з розрядів РВВ. Команда має 2 параметри: ім’я порта і номер розряду.

Порт в МК – це 8 ліній(контактів) вводу/виводу, які мають індивідуальні номера ( 0 – 7 ) та загальну літеру(A, B,C, …), яка відрізняє цей порт від інших.

Приклад для PORTB: Порт В має ( як і інші порти МК) мінімум 3 відповідних йому регістра:

DDRB – значення бітів в цьому регістрі вказує чим буде контакт цього порта з номером цього біта – початкове значення ( при ввімкненні МК чи після скидання) значення “0” – контакт буде входом, якщо біт = “1” – цей контакт стане виходом.

PINB – біти цього регістра показують чим (“1” або “0”) рахує МК напругу на контакті порта з номером цього біта

PORTB – біт цього регістра необхідно зробити “1” або “0” щоб на контакті порта з номером цього біта з’явився “1” або “0”.

Розглянемо задачу:

Необхідно розробити пристрій для управління 1 світодіодом за допомогою однієї кнопки. При кожному натисканні кнопки світо діод повинен по черзі вмикатися, вимикатися. При першому натисканні кнопки світо діод повинен ввімкнутися, при наступному вимкнутися і т. д.

Схема для даної задачі буде мати вигляд:

Рис. 18 Схема електрона для лабораторної роботи №2

Алгоритм для даної задачі має вигляд:

Установити вершину стека.

Програмуванні портів вводу виводу.

Зчитати значення PD0.

Перевірка PD0 == 1. Якщо так, то повернутися до п. 3, інакше – п. 5.

Перевірка PВ0 == 1. Якщо так, то встановити PB0 = 0, інакше – PB0 = 1. Перейти до пункту 6.

Зчитати значення PD0.

Перевірка PD0 == 1. Якщо так, то повернутися до п. 3, інакше – п. 6.

Код програми для мікроконтролера:

Дивись додаток 1

Завдання для лабораторної роботи

Використовуючи програму Proteus, створити схеми та їх запрограмувати згідно варіанту. Всього світо діодів – 4, перемикачів – 2.

Варіанти:

1.  За натисненням перемикача S3 включити діод RB1, за наступним натисненням погасити всі діоди.

2.  За натисненням перемикача S2 включити діод RB2, за наступним натисненням погасити всі діоди.

3.  За натисненням і утриманням перемикача S3 утримувати включеним діод RB1, вимкнути його як тільки перемикач S3 вивільниться.

4.  За натисненням і утриманням перемикача S2 утримувати включеним діод RB2, вимкнути його як тільки перемикач S2 вивільниться.

5.  За натисненням перемикача S3 включити діод RB1, за наступ - ним натисненням перемикача S2 погасити всі діоди.

6.  За натисненням перемикача S2 включити діод RB1, за наступ - ним натисненням перемикача S3 погасити всі діоди.

7.  За натисненням і одночасним утриманням перемикачів S2 і S3 утримувати включеним діод RB1, вимкнути його як тільки один із перемикачів або всі перемикачі вивільняться.

Порядок виконання лабораторної роботи

Запустити програму AVR Studio.

Створити новий проект.

Вибрати тип проекту(Atmel AVR Assembler) та дати проекту ім’я.

Вибрати AVR Simulator -> ATiny2313;

За допомогою редактора набрати програму, яка відповідає умовам лабораторної роботи;

Скомпілювати та завантажити програму до мікроконтролера;

Перевірити правильність результату у програмі Proteus.

Звіт про лабораторну роботу має містити:

Титульний аркуш з П. І.Б., номером групи та варіантом студента;

Завдання на лабораторну роботу за варіантом;

Лістинг програми, яка реалізує завдання лабораторної роботи.

Контрольні запитання

Які директиви мови Асемблер для МК AVR ви знаєте?

За допомогою якого оператора можна зчитати данні?

За допомогою якого оператора можна вивести данні?

За допомогою якого оператора можна записати значення в РЗП?

Які команди безумовного переходу ви знаєте?

Які команди умовного переходу ви знаєте?

Що таке порт?

Скільки видів пам’яті має МК?

  Лабораторна робота №3. Використання таймеру

Мета роботи: Отримати практичнi знання у роботi з таймером мiкроконтролера.

Теоретичні відомості

Таймер в МК – це, по суті діла, є двійковий рахівник. Восьмирозрядний таймер може рахувати від 0 до 255, а шістнадцяти розрядний – від 0 до 655 535. Результат того, що нарахував таймер можна зчитати в будь-який момент з рахункового регістру, який має загальну назву TCNTx, де х – номер таймера ( для 8-розрядних – номера 0, 2, для 16- розрядних – непарні 1,3 і т. д.). В 16-розрядних таймерах рахунковий регістр складається з двох 8-розрядних регістрів з загальною назвою ТСNTxH(старший) і TCNTxL(молодший). В рахункові регістри можна записувати будь-які значення, що дозволяє починати рахунок не з нуля і регулювати інтервали рахунку.

Для задання режиму роботи таймера використовуються 2 регістра: TCCRxB, TCCRxA. Наприклад, якщо в регістр TCCR1B записати код 0х05, то встановиться коефіцієнт ділення 1/1024, і таймер перейди в режим рахунку.

Також є важливим порядок читання/запису інформації в пару регістрів ТСNTxH і TCNTxL. Ці 2 регістра мають властивість так званої подвійної буферизації. Правила роботи з такими регістрами поребують, щоб спочатку записувався старший регістр ТСNTxH, а потім молодший TCNTxL. Це необхідно, тому що при записі старшого байту в регістр ТСNTxH він зберігається в спеціальному внутрішньому регістрі. Коли поступає команда запису молодшого байта в регістр TCNTxL, обидва байти записуються одночасно. Використання подвійної буферизації дозволяє змінювати значення рахункового регістру на ходу, не зупиняючи таймера.

Мікросхема ATiny2313 має 2 таймера. Один восьми розрядний(Т0) і один шістнадцяти розрядний(Т1).

Для формування часових інтервалів таймер/лічильник підраховує тактові імпульси від системного генератора. Для ATiny2313 частота сигнала генератора дорівнює 4 МГц.

Оператори

lsr – логічний зсув вправо. Цей оператор має 1 параметр – ім’я регістру, вміст якого зсувається. Схемотично дана операція має вигляд:

0 -> d7 -> d6 -> d5 -> d4 -> d3 -> d2 -> d1 -> d0 -> C.

lsl – логічний зсув вліво. Дія цього оператора обернена до попереднього, тобто:

C <- d7 <- d6 <- d5 <- d4 <- d3 <- d2 <- d1 <- d0 <- 0.

Brcc – перехід по умові “не має переносу”. Даний оператор перевіряє вміст флага переносу С и робить перехід по відносній адресі в тому випадку, якщо флаг С дорвінює 0.

Eor – оператор “виключне АБО”

.equ – псевдо оператор присвоювання. Використовується для призначення імен константам.

Cpi – порівнює вміст РЗП з константою. Має 2 параметри. Перший параметр – ім’я регістру, другий параметр – константа.

Brlo – перехід за умови “менше”. Мається на увазі, що в попередній команді, в результаті порівняння 2х операндів, перший операнд виявився менший, ніж другий. Для перевірки умови цей оператор використовує флаг переносу С. Перехід відбувається лише в том випадку, якщо С = 1.

Розглянемо роботу з таймером на прикладі задачі:

Розробити програму “Бігучі вогні” з використанням процедури затримки. Ця процедура повинна використовувати один з внутрішніх таймерів і не використовувати переривання. Затримка = 200 мкс.

Проведемо розрахунки:

Для ATiny2313 частого сигнала генератора дорівнює 4 МГц. А період імпульсів ¼ = 0,25 мкс. Для того, щоб отримати на виході 200 мкс, необхідно мати коефіцієнт ділення, рівний 200*10^3 / 0,25 * 10^(-6) = 800 * 10^3.

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

Вибираємо самий великий коефіцієнт ділення переддільника (1024). Тоді на його виході ми отримаємо сигнал з частотою 4*10^6/1024 = 3906 Гц. Період такого сигналу буде дорівнювати 1/3906 = 0,256 мкс. Саме цей сигнал поступає на вхід таймера, який забезпечує кінцеве ділення. Підрахуємо коефіцієнт ділення, який нам таймер повинен забезпечити: 200,0 / 0,256 = 780. Такий коефіцієнт перерахунку може забезпечити тільки таймер Т1.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5