DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

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

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра САПР  Звіт Про виконання Лабораторної роботи №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.
Антиботан аватар за замовчуванням

2015

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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