DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Програмування системного таймера 8253/8254 та робота з годинником реального часу

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

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

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

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

Про що ця робота

У роботі досліджується програмування системного таймера 8253/8254 та робота з годинником реального часу. Наведено код програми на асемблері для відтворення мелодії через динамік.

У роботі розглядаються

  • Архітектура комп'ютера
  • Програмування на асемблері
  • Порти вводу-виводу
  • Генерація звуку

Зміст і розділи

  1. Лабораторне завдання
  2. Результати виконаних пунктів завдання
  3. Висновок
Для кого:Студенти технічних спеціальностей вищих навчальних закладів
Викладачі:Викладач кафедри САПР

Ключові поняття

таймер 8253/8254портчастотамелодіяперериваннядинаміктактпам'ять

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

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра САПР  Лабораторна робота №10 з курсу“Архітектура комп’ютера” на тему: “Програмування системного таймера 8253/8254 та робота з годинником реального часу”. Лабораторне завдання Запрограмувати таймер на виконання мелодії  -Metallica "Nothing Else Matters" по вказаним кодам: E3(1/8) P(1/8) E3(1/4) P(1/8) E3(1/8) E2(1/4) P(1/8) E3(1/8) F3(1/8) E3(1/8) D3(1/8) D3(1/8) E3(1/8) D3(1/8) A2(1/8) P(1/8) A2(1/4) P(1/8) A2(1/8) P(1/8) H2(1/8) A2(1/4) Результати виконаних пунктів завдання Програма: .186 .model small .stack 100h PORT_B EQU 61H COMMAND_REG EQU 43H LATCH2 EQU 42H B4 EQU 16 ; тривалості нот B2 EQU B4/2 B1 EQU B4/4 M3 EQU 1 ; ноти M2 EQU 2 FA EQU 3 RE EQU 4 LA EQU 5 Se EQU 6 FIN EQU 0FFH .data ; таблиця частот FREQUENCY DW 896,1809,855,1015,2711,2415 ; тривалість нот BEAT DB B1,B1,B2,B1,B1,B2,B1,B1 DB B1,B1,B1,B1,B1,B1 DB B1,B1,B2,B1,B1,B1,B1,B2 ; номер частоти ноти MELODY DB M3, ,M3, ,M3,M2, ,M3 DB FA,M3,RE,RE,M3,RE DB LA, ,LA, ,LA, ,Se,LA,FIN .code .startup JMP INIT ; дивимося ноту, отримуємо її частоту і поміщаємо в канал 2 NEXT_NOTE: PUSHA IN AL,PORT_B ; отримуємо статус порта В AND AL,0FCH ; виключаємо динамік OUT 61H,AL ; заміняємо байт POPA ; Ініціалізація INIT: PUSHA IN AL,PORT_B ; отримужмо поточний статус OR AL,00000011B ; дозволяємо динамік и таймер OUT PORT_B,AL ; заміняємо байт MOV SI,0 ; ініціалізуємо вказівник MOV AL,0B6H ; встановлення для канала 2 OUT COMMAND_REG,AL ; посилаємо в командний регістр POPA LEA BX,MELODY ; беремо зміщення для мелодії MOV AL,[BX][SI] ; беремо код n-ної ноти рядка CMP AL,0FFH ; перевірка на кінець рядка JE NO_MORE ; якщо кінець, то на вихід CBW ; перетворюємо в слово ; отримання частоти MOV BX,OFFSET FREQUENCY ; зміщення таблиці частот DEC AX ; починаємо відлік з 0 SHL AX,1 ; *2, оскільки слова MOV DI,AX ; адресація через DI MOV DX,[BX][DI] ; отримуємо частоту з таблиці ; починаємо відтворення ноти MOV AL,DL ; готовимо молодший байт частоти OUT LATCH2,AL ; посилаємо його MOV AL,DH ; готовимо старший байт частоти OUT LATCH2,AL ; посилаємо його ; створення циклу затримки MOV AH,0 ; номер функцїї читання лічильника INT 1AH ; отримуємо значення лічильника MOV BX,OFFSET BEAT ; зміщення таблиці довжин MOV CL,[BX][SI] ; беремо довжину наступної ноти MOV CH,0 MOV BX,DX ; беремо молодше слово лічильника ADD BX,CX ; визначаємо момент закінчення STILL_SOUND:INT 1AH ; беремо значення лічильника CMP DX,BX ; порівнюємо із закінченням JNE STILL_SOUND ; нерівні - продовжуємо звук INC SI ; переходимо до наступної ноти JMP NEXT_NOTE ; закінчення NO_MORE: IN AL,PORT_B ; отримуємо статус порта В AND AL,0FCH ; виключаємо динамік OUT 61H,AL ; заміняємо байт .exit 0 End Висновок: На цій лабораторній роботі я навчився програмувати системний таймер 8253/8254 та працювати з годинником реального часу.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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