Програмування системного таймера 8253/8254.

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

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

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

Рік:
2009
Тип роботи:
Лабораторна робота
Предмет:
Архітектура комп'ютерів
Група:
КН

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

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра САПР  Звіт Про виконання Лабораторної роботи №10 Тема: Програмування системного таймера 8253/8254 Виконала: студентка групи КН-3 Львів – 2009 Тема: Програмування системного таймера 8253/8254. Мета: Навчитися програмувати системний таймер 8253/8254. Завдання Запрограмувати таймер на виконання мелодії Ricky Martin “Living La Vida Loca” за вказаним кодом: Cis3(1/16), P(1/8), P(1/16), Cis3(1/4), P(1/16), P(1/16), A2(1/8), H2(1/8), D3(1/16), P(1/8), P(1/16), D3(1/16), P(1/8), P(1/16), Cis3(1/4), P(1/4), P(1/8), Cis3(1/16), P(1/8), P(1/16), Cis3(1/4), P(1/16), P(1/16), A2(1/8), Gis2(1/8), H2(1/8), P(1/8), A2(1/4), P(1/4), P(1/8), Cis3(1/16), P(1/8), P(1/16), Cis3(1/4), P(1/8), A2(1/8), H2(1/8), D3(1/16), P(1/8), P(1/16), D3(1/16), P(1/8), P(1/16), Cis3(1/4), P(1/4), P(1/8), Cis(1/16), P(1/8), P(1/16), Cis3(1/4), P(1/8). Короткі теоретичні відомості 061H ■PC/XT■ PPI (програмований периферійний інтерфейс), порт B. ╓7┬6┬5┬4┬3┬2┬1┬0╖ біт ║_│_│_│_│_│0│_│_║ ║ ╚═► 0: Таймер 2 вхід (спікер) ═╦═► OR 03H=спікер ON ╚═══► 1: Таймер 2 данні ═════╝ AND 0fcH=спікер OFF Для занесення частоти звучання динаміка використовую канал 2 системного таймера з адресою 42h Структура регістра керуючого слова системного таймера: 7 6 5 4 3 2 1 0 Біти: 0 – встановлення типу рахунку таймера (0 – двійковий, 1 – десятковий) 1,2,3 – встановлення режиму роботи вибраного каналу таймера (від 0 до 5-ти) 4,5 – код команди читання/запису регістра лічильника (01 – старший байт, 10 – молодший, 11 – спочатку молодшого, а потім старшого) 6,7 – вибір каналу таймера (0 – 2 канали, 11 – код читання стану каналу) Код програми .8086 code segment org 100h assume cs:code,ds:code,es:code,ss:code start: mov ax,1 ;встановлення значення початкової ноти push ax xor ax,ax ;обнулення ax xor al,00000011b ; встановлення байта дозволу динаміка out portb,al ; записуєм байт у відповідний порт mov si,0 ; обнулюю si mov al,10110110b ; запис значення керуючого регістра out reg,al ; його завантаження next: pop bx ;в стеку - порядковий номер ноти mov al,bl ; в al - номер ноти inc bx ; збільшення номера і запис в стек push bx cmp al,54 ;53 ноти, якщо 54-та - вихід je no_more cbw ; розширення вмісту al до ax lea bx,freq ; адреса з частотами нот dec ax ;зменшення пор. номера ноти на 1 shl ax,1 ; множення на 2 (бо працюэмо зі словами) mov di,ax ; зміщення відносно початку адреси нот до поточної в di mov dx,[bx][di] ; читаємо в dx частоту ноти mov al,dl ;записуэмо молодший байт частоти звучання out chan2,al mov al,dh ;старший байт out chan2,al mov ah,0 ; 0-ва ф-ція - отримати значення системного таймера int 1ah lea bx,beat ; завантаження адреси довжин звучання зквуку mov cl,[bx][si] ; довжина поточної ноти в cx mov ch,0 mov bx,dx add bx,cx ; відлік від поточного часу st_sou: int 1ah ; знову отримуєм значення системного таймеру cmp dx,bx ; порівнюєм з потрібним jne st_sou ; не рівні - продовжуєм звучання inc si ; додаємо номер довжини ноти jmp next ; перехід на звучання наступної ноти no_more: in al,portb ; дістаємо байт стану динаміка and al,11111100b ; обнулення бітів активації динаміка out 61h,al pop bx ; вирівнювання стеку mov ah,4ch ; вихід з програми int 21h beat db 1,2,1,4,1,1,2,2,1,2,1,1,2,1,4,4,2,1,2,1,4,1,1,2,2,2,2,2,2,4,4,2,1,2,1,4,2,2,2,1,2,1,1,2,1,4,4,2,1,2,1,4,2 freq dw 0432h,0,0,0432h,0,0,0a97h,096fh,03f7h,0,0,03f7h,0,0,0432h,0,0,0432h,0,0,0432h,0,0,0a97h,059ch,096fh,0,096fh,0,0a97h,0,0,0432h,0,0,0432h,0,0a97h,096fh,03f7h,0,0,03f7h,0,0,0432h,0,0,10d0h,0,0,0432h,0 portb equ 61h chan2 equ 42h reg equ 43h code ends end start lst – код Turbo Assembler Version 4.1 01/19/09 14:13:28 Page 1 l10.asm 1 .8086 2 0000 code segment 3 org 100h 4 assume cs:code,ds:code,es:code,ss:code 5 0100 start: 6 0100 B8 0001 mov ax,1 ;встановлення значення початкової ноти 7 0103 50 push ax 8 0104 33 C0 xor ax,ax ;обнулення ax 9 0106 34 03 xor al,00000011b ; встановлення байта дозволу динаміка 10 0108 E6 61 out portb,al ; записуєм байт у відповідний порт 11 010A BE 0000 mov si,0 ; обнулюю si 12 010D B0 B6 mov al,10110110b ; запис значення керуючого регістра 13 010F E6 43 out reg,al ; його завантаження 14 0111 next: 15 0111 5B pop bx ;в стеку - порядковий номер ноти 16 0112 8A C3 mov al,bl ; в al - номер ноти 17 0114 43 inc bx ; збільшення номера і запис в стек 18 0115 53 push bx 19 0116 3C 36 cmp al,54 ;53 ноти, якщо 54-та - вихід 20 0118 74 2B je no_more 21 011A 98 cbw ; розширення вмісту al до ax 22 23 011B BB 0185r lea bx,freq ; адреса з частотами нот 24 011E 48 dec ax ;зменшення пор. номера ноти на 1 25 011F D1 E0 shl ax,1 ; множення на 2 (бо працюэмо зі словами) 26 0121 8B F8 mov di,ax ; зміщення відносно початку адреси нот до поточної в di 27 0123 8B 11 mov dx,[bx][di] ; читаємо в dx частоту ноти 28 29 0125 8A C2 mov al,dl ;записуэмо молодший байт частоти звучання 30 0127 E6 42 out chan2,al 31 0129 8A C6 mov al,dh ;старший байт 32 012B E6 42 out chan2,al 33 34 012D B4 00 mov ah,0 ; 0-ва ф-ція - отримати значення системного таймера 35 012F CD 1A int 1ah 36 0131 BB 0150r lea bx,beat ; завантаження адреси довжин звучання зквуку 37 0134 8A 08 mov cl,[bx][si] ; довжина поточної ноти в cx 38 0136 B5 00 mov ch,0 39 40 0138 8B DA mov bx,dx 41 013A 03 D9 add bx,cx ; відлік від поточного часу 42 013C st_sou: 43 013C CD 1A int 1ah ; знову отримуєм значення системного таймеру 44 013E 3B D3 cmp dx,bx ; порівнюєм з потрібним 45 0140 75 FA jne st_sou ; не рівні - продовжуєм звучання 46 0142 46 inc si ; додаємо номер довжини ноти 47 0143 EB CC jmp next ; перехід на звучання наступної ноти 48 0145 no_more: 49 0145 E4 61 in al,portb ; дістаємо байт стану динаміка 50 0147 24 FC and al,11111100b ; обнулення бітів активації динаміка 51 0149 E6 61 out 61h,al 52 53 014B 5B pop bx ; вирівнювання стеку 54 014C B4 4C mov ah,4ch ; вихід з програми 55 014E CD 21 int 21h 56 57 0150 01 02 01 04 01 01 02+ beat db 1,2,1,4,1,1,2,2,1,2,1,1,2,1,4,4,2,1,2,1,4,1,1,2,2,2,2,2,2,4,4,2,1,2,1, + Turbo Assembler Version 4.1 01/19/09 14:13:28 Page 2 l10.asm 58 02 01 02 01 01 02 01+ 4,2,2,2,1,2,1,1,2,1,4,4,2,1,2,1,4,2 59 04 04 02 01 02 01 04+ 60 01 01 02 02 02 02 02+ 61 02 04 04 02 01 02 01+ 62 04 02 02 02 01 02 01+ 63 01 02 01 04 04 02 01+ 64 02 01 04 02 65 0185 0432 0000 0000 0432 + freq dw 0432h,0,0,0432h,0,0,0a97h,096fh,03f7h,0,0,03f7h,0,0,0432h,0,0,0432h,0, + 66 0000 0000 0A97 096F + 0,0432h,0,0,0a97h,059ch,096fh,0,096fh,0,0a97h,0,0,0432h,0,0,0432h,0,0a97h,096fh,03f7h,0,0, + 67 03F7 0000 0000 03F7 + 03f7h,0,0,0432h,0,0,10d0h,0,0,0432h,0 68 0000 0000 0432 0000 + 69 0000 0432 0000 0000 + 70 0432 0000 0000 0A97 + 71 059C 096F 0000 096F + 72 0000 0A97 0000 0000 + 73 0432 0000 0000 0432 + 74 0000 0A97 096F 03F7 + 75 0000 0000 03F7 0000 + 76 0000 0432 0000 0000 + 77 10D0 0000 0000 0432 + 78 0000 79 =0061 portb equ 61h 80 =0042 chan2 equ 42h 81 =0043 reg equ 43h 82 83 01EF code ends 84 end start Turbo Assembler Version 4.1 01/19/09 14:13:28 Page 3 Symbol Table Symbol Name Type Value ??DATE Text "01/19/09" ??FILENAME Text "l10 " ??TIME Text "14:13:28" ??VERSION Number 040A @CPU Text 0101H @CURSEG Text CODE @FILENAME Text L10 @WORDSIZE Text 2 BEAT Byte CODE:0150 CHAN2 Number 0042 FREQ Word CODE:0185 NEXT Near CODE:0111 NO_MORE Near CODE:0145 PORTB Number 0061 REG Number 0043 START Near CODE:0100 ST_SOU Near CODE:013C Groups & Segments Bit Size Align Combine Class CODE 16 01EF Para none Результати Результатом роботи програми є виконання мелодії вказаної в завданні пісні через внутрішній динамік комп’ютера. Висновки На цій лабораторній роботі я навчилася програмувати системний таймер 8253/8254.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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