Вход на сайт Навигация по сайту Любить и уважать Бонус-счастливчики
|
Содержимое файла "5 (2- ).doc" (без форматирования) Лабораторна робота №5 Тема: Дослідження функціональних можливостей пам’яті МК Мета: Практичне дослідження режимів роботи та функціональних можливостей пам’яті МК за допомогою програми AVR Studio та Proteus. Завдання: Написання програми для відтворення звуку та моделювання її роботи в середовищі PROTEUS на мікро-контролері ATtiny2313. Відповідно до отриманого завдання: Задана мелодія №4 Happy bjrtbs to you, потрібно цю мелодію понизити на 1 октаву. Схема ввімкнення динаміка (Рис. 1) Рис. 1 – Схема ввімкнення динаміка через мікросхему ATtiny2313. Хід виконання роботи 1. Для виконання отриманого завдання відтворення звуку потрібно реалізувати алгоритм, представлений на (Рис. 2), тобто виконати наступні операції: awing.11 HYPER14HYPER15 Риc. 2 – Алгоритм програми відтворення звуку. 2. На основі розробленого алгоритму, переробимо програмний код заданий в прикладі. ; Для AVR: ATtiny2313 * ; Тактовая частота: 8мГц * ; **************************************** .include "tn2313def.inc" .list .def loop1=R0 .def loop2=R1 .def loop=R21 .def temp=R16 .def temp1=R17 .def count=R18 .def fnota=R19 .def dnota=R20 .cseg .org 0 START : rjmp Init reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti ;******************* Модуль иницыализации*********************** Init: ldi temp,ramend ;ініціалізація стека, out SPL, temp ;встановлюємо розміри стеку, ;вказуємо адрес останньої комірки ОЗУ, яка являтиметься кінцевим адресом ;стеку(дно стеку) ;------------------------------------------------------ ;Инициализацыя портов ввода/вывода ;------------------------------------------------------ ldi temp,0x08 out PORTB,temp OUT DDRB ,TEMP ldi temp,0x3 out PORTD,temp ldi temp,0x00 out DDRD,temp ;-------------------------------------------------------- ;выключение компаратора ;-------------------------------------------------------- ldi temp,0x80 out ACSR,temp ;--------------------------------------------------------- ;иницыализацыя таймера Т1 ;--------------------------------------------------------- m1:ldi temp,0x09 out TCCR1B,temp ldi temp,0x00 out TCCR1A,temp ;********************************************************** ;* Начало основной програмы * ;********************************************************** MAIN: ;----------------------------------------------------------- ;Сканирование клавиатуры, вычисление номера нажатой кнопки ;----------------------------------------------------------- CLR COUNT IN TEMP,PIND M2:lsr temp brcc m3 inc count cpi count,2 brne m2 rjmp m1 ;--------------------------------------------- ;Выбор мелодии ;--------------------------------------------- m3:mov YL, count ldi ZL,low(tabm*2) ldi ZH,high(tabm*2) rcall addw lpm XL,Z+ lpm XH,Z ;---------------------------------------------- ;Воспроизведение мелодии ;---------------------------------------------- m4:mov ZH,XH mov ZL,XL m5:in temp, PIND cpi temp, 0x3 breq m1 lpm temp,Z cpi temp,0xFF breq m4 andi temp,0x1F mov fnota,temp lpm temp,Z+ rol temp rol temp rol temp rol temp andi temp,0x07 mov dnota,temp rcall nota rjmp m5 ;********************************************************** ;* Вспомогательные программы * ;********************************************************** ;---------------------------------------------- ; Подпрограма 16-розр. сложения ;---------------------------------------------- addw: push YH lsl YL ldi YH,0 add ZL,YL adc ZH,YH pop YH ret ;----------------------------------------------- ;Подпрограма исполнения одной ноты ;----------------------------------------------- nota: push ZH push ZL push YL push temp cpi fnota,0x00 breq nt1 mov YL,fnota ldi ZL,low(tabkd*2) ldi ZH,high(tabkd*2) rcall addw lpm temp,Z+ lpm temp1,Z out OCR1AH,temp1 out OCR1AL,temp ldi temp,0x40 out TCCR1A,temp nt1: rcall wait ldi temp,0x00 out TCCR1A,temp ldi dnota,0 rcall wait pop temp pop YL pop ZL pop ZH ret ;---------------------------------------- ;Подпрограма формирования задержки ;---------------------------------------- wait: push ZH push ZL push YH push YL mov YL,dnota ldi ZL,low (tabz*2) ldi ZH,high(tabz*2) rcall addw lpm YL,Z+ lpm YH,Z clr ZL clr ZH ;------------------------------------------ ;цыкл задержки ;------------------------------------------ w1: ldi loop,255 w2: dec loop brne w2 adiw R30,1 cp YL,ZL brne w1 cp YH,ZH brne w1 pop YL pop YH pop ZL pop ZH ret ;-------------------------------------------------------------------- ;таблиця коеф.задержки для формування муз. длительности звучания нот ;-------------------------------------------------------------------- tabz: .dw 32,64,128,256,512,1024,2048,4096,8192 ;-------------------------------------------------------------------- ;таблиця коеф. діленя для всіх нот Di(Finote=Fzad/Di) ;-------------------------------------------------------------------- tabkd: .dw 0 .dw 9496,8960,8456,7984,7536,7112,6712,6336,5980,5644,5328,5028 .dw 4748,4480,4228,3992,3768,3556,3356,3168,2990,2822,2664,2514 .dw 2374,2240,2114,1996,1884,1778,1678,1584 ;------------------------------------------------------------------------ ; таблиця начал усіх мелодій, кожна мітка містить адресу початку мелодії ;------------------------------------------------------------------------ tabm: .dw mel4*2, mel2*2 ;------------------------------------------------------------------------ ;таблиці мелодій, значення кожної мітки-це адреса початку певної мелодії ;------------------------------------------------------------------------ ;==============Happy bjrtbs to you====================== mel4: .db 107,107,141,139,144,143,128,107,107,141 .db 139,146,144,128,107,107,151,148,146,112 .db 111,149,117,117,148,144,146,144,128,255 ;============Песияиз кинофильма Веселые ребята============ mel2: .db 78,146,112,96,105,105,109,144,111,64 .db 80,145,112,64,81,178,96,117,117,117 .db 149,116,64,82,146,112,64,79,146,144 .db 96,105,105,107,141,108,109,112,110,102 .db 104,137,128,96,105,105,105,137,102,64 .db 73,142,105,107,109,64,75,137,96,105 .db 105,105,137,102,105,142,112,64,82,180 .db 96,116,116,116,148,114,112,142,109,64 .db 78,146,144,96,105,105,107,141,108,109 .db 112,110,102,104,169,96,96,255 Перелік команд використаних в даній програмі: Регістри введення/виводу: OUT – завантаження значення в регістр; Виклики: RCALL – відносний виклик процедури; RJMP – відносний перехід; LDI – завантажити константу в регістр загального призначення; RET – повернення в головну програму; DEC – декремент; SER – всі біти записати в 1 CLR – всі біти записати в 0 ST – Непрямий запис і останнього інкременту CPI – порівняння регістра зконстантой BRNE – перехід якщо не дорівнює SEI - загальний дозвілпереривань BRCC - перехід, якщо перенесенняскинутий ADD - Скласти два регістри ADIW - шіснацяткове додавання; CP - порівняння двух РОН; ROL - циклічний здвиг вмісту регістра вліво через перенос; .DB - директива описаня даних. Висновок: в ході даної лабораторної роботи ми дослідили як за допомогою МК можна відтворювати звуки. Робота виконана в повному обсязі. Була зібрана досліджувана схема у середовищі Proteus. Було розроблено алгоритм та по алгоритму написаний програмний код. При симуляції програми в середовищі Proteus помилок не було знайдено. Тобто теоретичні результати співпали з практичними. Змн. Арк. № докум. Підпис Дата Арк. Змн. Арк. № докум. Підпис Дата Арк. Змн. Арк. № докум. Підпис Дата Арк. Змн. Арк. № докум. Підпис Дата Арк. Змн. Арк. № докум. Підпис Дата Арк. Змн. Арк. № докум. Підпис Дата Арк. Змн. Арк. № докум. Підпис Дата Арк. Змн. Арк. № докум. Підпис Дата Арк. Змн. Арк. № докум. Підпис Дата Арк. |
Посетителей: 0, из них зарегестрированных: 0, гостей: 0 Зарегистрированные пользователи: Подробно | Страница сгенерирована за 0.0701 сек. |