МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
Звіт
з лабораторної роботи № 13
на тему
“Програмування програм з використанням
системного таймера 8253/8254 та робота з годинником реального часу”
МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
Звіт
з лабораторної роботи № 13
на тему
“Програмування програм з використанням
системного таймера 8253/8254 та робота з годинником реального часу”
Виконав:
студент гр. КН-37
Данчук Є.С.
Перевірив:
Герус В.А.
Львів 2003
Мета роботи
Навчитись програмувати системний таймер 8253/8254 та працювати з годинником реального часу.
Завдання для виконання
Написати будь-яку мелодію, яка має логічне звучання.
Короткі теоретичні відомості
Таймер в мікропроцесорних системах теж займає важливе місце. За його допомогою працює годинник реального часу та інші пристрої котрі потребують при своїй роботі відліку проходимого часу. Для того щоб працювати з таймеро і годинником реального часу існують два переривання , одне з яких системи MS-DOS а друге BIOS. В даній лабораторній роботі було програмовано системний таймер для того щоб з його допомогою генерувати паузи при створенні звукового сигналу. Так було використано переривання BIOS 1AH. За допомогою цього переривання і його функції 0, можна дізнатись інформацію про пройдений час яка зберігається в регістрах CX – старший байт лічильника та DX молодший байт лічильника. За допомогою цієї інформації визначалась і створювалась програмна затримка, котра приводила до „затягування” сигналу з системного динаміка.
Також завдяки системному таймеру можна генерувати випадкові числа, що може бути застосоване при виданні різних UID – унікальних ідентифікаційних номерів. Фактично алгоритм роботи цей самий, тільки потрібно придумати алгоритм, а вірніше формулу, по якій числа будуть генеруватись з врахуванням тих чи інших розрядів значення таймера.
Текст заданої програми
PAUS = 5
END_MUSIC = 0
.model small
.8086
.code
int_1C_handler:
mov bx,cs:counter
shl bx,1
mov ax,WORD PTR cs:[bx][offset mus]
cmp ax,END_MUSIC
jne continue
mov cs:counter,0FFFFh
iret
continue: cmp ax,PAUS
jne not_pause
in al,97
and al,0FCh
out 97,al
jmp return
not_pause:
out 66,al
mov al,ah
out 66,al
in al,97
or al,3
out 97,al
return:
inc cs:counter
iret
start:
mov ax,351Ch
int 21h
mov cs:old1c,bx
mov ax,es
mov cs:old1ch,ax
push cs
pop ds
mov dx,offset int_1C_handler
mov ax,251ch
int 21h
wait_for: cmp cs:counter,0FFFFh
jne wait_for
in al,97
and al,11111100b
out 97,al
lds dx,dword ptr cs:old1c
mov ax,251ch
int 21h
mov ax,4C00h
int 21h
EVEN
D = 4061; re
E = 3619; mi
F = 3416; fa
G = 3042; sol
A2 = 2711; la
P = PAUS
mus:
DW A2,A2,A2,A2,P,P,G,G,G,G,P,P
DW E,E,P,F,F,P,G,G,G,P,P
DW F,F,P,E,E,P,D,D,P,P,P
DW A2,A2,P,A2,A2,P,P
DW G,G,G,G,F,F
DW E,E,P,F,F,P,G,G,G,P,P
DW F,F,P,E,E,P,D,D,P,P
DW P,P
DW A2,A2,A2,A2,P,P,G,G,G,G,P,P
DW E,E,P,F,F,P,G,G,G,P,P
DW F,F,P,E,E,P,D,D,P,P,P
DW A2,A2,P,A2,A2,P,P
DW G,G,G,G,F,F
DW E,E,P,F,F,P,G,G,G,P,P
DW F,F,P,E,E,P,D,D,P,P
DW PAUS,END_MUSIC
old1c dw 00
old1ch dw 00
counter dw 00
.stack
end start
Висновок
На даній лабораторній роботі було вивчено основні команди для роботи з системним таймером. Також були вивчені основні принципи і можливості використання таймера.