Реалізація програмних затримок за допомогою таймерів

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2012
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Програмування

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки, молоді та спорту України Національний університет «Львівська політехніка» ЗВІТ про виконання лабораторної роботи №2: з курсу «Програмування мікроконтролерів СА» Тема: «Реалізація програмних затримок за допомогою таймерів» Варіант № 1 Мета роботи: Зібрати у пакеті симуляції Proteus схему на основі МК ATmega32A та написати програму мовою асемблер для реалізації вказаного алгоритму. Завдання: Таблиця 1. № п/п Завдання Часові інтервали вимірюються за допомогою таймерів, при цьому паралельно виконується робота в основній програмі. При використанні таймера 2 в асинхронному режимі передбачається, що він тактується від годинникового кварца 32768 Гц. При переключенні світлодіодів звукова піщалка має видавати звук тривалістю 0,1 сек.(для непарних варіантів) та 0,2 сек. (для парних варіантів).   Таймер Кноп-ка Сиг-нал Світло-діоди Затримка Алго-ритм  1 0 PC5 PD2 PORTA 1,15 сек. 8   Таблиця 2. Варіанти алгоритмів роботи для світлодіодів № п/п Опис алгоритму  8 Лінійка з 8-ми одноколірних світлодіодів. При натисканні кнопки світлодіоди починають почергово блимати по одному з обох боків рухаючись назустріч. P7→P0→P6→P1→ P5→P2→P4→P3   / Рис.1. Схема підключення в пакеті Proteus Остаточна версія програми: .include "m32Adef.inc" .def _flag = r0 ; 0біт - пауза =0 (пораховано), =1(ще рахує) ; 2біт - тривалість паузи =0(1сек), =1(0.5сек) .def _count = r21 .def _count2= r22 .def _countA= r23 .def _countBuz = r24 .CSEG .org $000 jmp RESET ; Reset Handler .org $014 jmp TIM0_COMP ; Timer0 Compare Handler .org $028 reti ;Store Program Memory Ready Handler ;підпрограма переривання по співпадінню Таймера 0 ---------------- TIM0_COMP: sbrs _flag, 0 ; якщо відлік дозволений rjmp Task0end inc _count ; _count++ cpi _count, 100 ; порівнюємо з числом 20 brne Task0end ; на кінець, якщо не рівне rjmp ready ready: clt ; Т=0 bld _flag, 0 ; 0біт=1 (пауза порахована) clr _count ; _count=0 Task0end: ;----------------------Task3 (звук)-------------------------- sbrs _flag, 4 rjmp Task3end inc _countBuz cpi _countBuz, 6 brne Task3end clt bld _flag, 4 ;(пораховано) clr _countBuz ;(обнулення) cbi PORTD, 2 ;викл. звук Task3end: T0end: reti ;------------------------------------------------------------------------------------------ RESET: ldi r16, Low(RAMEND) out SPL, r16 ldi r16, High(RAMEND) out SPH, r16 ldi r16, 0x00 ldi r17, 0xFF out DDRC, r16 ; порт C на вхід out PORTC, r17 out DDRD, r17 ; порт D на вихід out PORTD, r16 out DDRA, r17 out PORTA, r16 clr _countA clr _countBuz ; таймер_0 скид по співпадінню, 25msec, Prescaler=1024, OCR=0xC2 ldi r16, (1<<WGM01)|(1<<CS02)|(1<<CS00) out TCCR0, r16 ; OCR=0xC2 ldi r16, 0x59 out OCR0, r16 ; OCR=0xC2 ldi r16, (1<<OCIE0) out TIMSK, r16 ; дозвіл на перер. по співпадінню ; обнулюємо регістри clr _count clr _flag sei ; заг. дозвід на переривання ;---------- Основна програма ------------------------------------------------------- main: sbic PINC, 5 rjmp end ; а якщо ні -- робимо щось інше ldi _count2, 0 PUSH _count2 ldi _count2, 8 PUSH _count2 ldi _count2, 16 PUSH _count2 ldi _count2, 4 PUSH _count2 ldi _count2, 32 PUSH _count2 ldi _count2, 2 PUSH _count2 ldi _count2, 64 PUSH _count2 ldi _count2, 1 PUSH _count2 ldi _count2, 128 PUSH _count2 foo: sbrc _flag, 0 ; якщо пауза відрахована, тоді інверсія робимо роботу rjmp PC5end ; а якщо ні -- робимо щось інше set bld _flag, 0 bld _flag, 4 POP _count2 CPI _count2, 0 breq end out PORTA, _count2 sbi PORTD, 2 PC5end: rjmp foo end: rjmp main / Рис. 2. Результати роботи програми Висновок: На даній лабораторній роботі ми навчилися створювати програми мовою асемблер з використанням таймерів та звукових сигналів.
Антиботан аватар за замовчуванням

25.02.2013 16:02-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

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

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!