МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
Звіт
з лабораторної роботи № 13
на тему
“Програмування програм з використанням
системного таймера 8253/8254 та робота з годинником реального часу”
Міністерство освіти України
Національний університет “Львівська Політехніка”
Кафедра САПР
Звіт
про виконання лабораторної роботи № 13
з курсу «комп‘ютери та мікро процесори»
на тему: “Програмування програм з використанням
системного таймера 8253/8254 та робота з годинником реального часу”
виконав: студент гр. КН-37
Юрій Семчишин
прийняв: викл. Каф. САПР
Герус В.А.
місто Львів
2003 рік
Мета роботи
Навчитись програмувати системний таймер 8253/8254 та працювати з годинником реального часу.
Завдання для виконання
Написати будь-яку мелодію, яка має логічне звучання.
Короткі теоретичні відомості
Таймер в мікропроцесорних системах теж займає важливе місце. За його допомогою працює годинник реального часу та інші пристрої котрі потребують при своїй роботі відліку проходимого часу. Для того щоб працювати з таймеро і годинником реального часу існують два переривання , одне з яких системи MS-DOS а друге BIOS. В даній лабораторній роботі було програмовано системний таймер для того щоб з його допомогою генерувати паузи при створенні звукового сигналу. Так було використано переривання BIOS 1AH. За допомогою цього переривання і його функції 0, можна дізнатись інформацію про пройдений час яка зберігається в регістрах CX – старший байт лічильника та DX молодший байт лічильника. За допомогою цієї інформації визначалась і створювалась програмна затримка, котра приводила до „затягування” сигналу з системного динаміка.
Також завдяки системному таймеру можна генерувати випадкові числа, що може бути застосоване при виданні різних UID – унікальних ідентифікаційних номерів. Фактично алгоритм роботи цей самий, тільки потрібно придумати алгоритм, а вірніше формулу, по якій числа будуть генеруватись з врахуванням тих чи інших розрядів значення таймера.
Текст заданої програми
.model small
.stack 100h
.data ; 1 1 1 1 1 1 1
arraysound dw 0,2273,2703,2273,2703,2273,1,2273,2556,2703,3033,2703,2273,1,2273,3033,2273,3033,2273,2556,2703,3033,3405,2703,2273,1,2273,1,2273,2556,2273,1703,1,1703,2024,2273,3405,2556,2273,2025,1,2025,2273,2556,2864,1,2864,2556,2864,2273,2556,3033,3405
arraydelay dw 0, 4, 8, 48, 8, 4,16, 4, 4, 4, 4, 4, 2,16, 48, 8, 48, 8, 4, 4, 4, 4, 4, 4, 2,16, 48,16, 8, 4, 4, 4,16, 4, 4, 4, 4, 4, 4, 4,16, 4, 4, 4, 4,16, 4, 4, 4, 24, 2, 2, 24
;16,8,816,4,48,2,24,1,12
.code
start:
mov ax,@data
mov ds,ax
janet:
xor ax,ax
;--------------------
mov al,0B6h
out 43h,al
in al,61h
or al,3
out 61h,al
;--------------------
mov si,0
go:
;-------------------
;mov ax,1
;out 42h,al
;xchg al,ah
;out 42h,al
;call delay
;-------------------
inc si
inc si
mov ax,arraysound[si]
cmp ax,0
je jhlt
;-------------------
out 42h,al
xchg al,ah
out 42h,al ;
;-------------------
mov ax,arraydelay[si]
cmp ax,16
je j16
cmp ax,8
je j8
cmp ax,4
je j4
cmp ax,2
je j2
cmp ax,1
je j1
cmp ax,816
je j4
cmp ax,48
je j48
cmp ax,24
je j24
cmp ax,12
je j12
jmp go
;-------------------
jhlt:
jmp janet
mov ax,4c00h
int 21h
;-------------------
j16:
call delay
jmp go
j8:
call delay
call delay
jmp go
j4:
call delay
call delay
call delay
call delay
jmp go
j2:
mov bx,7
jj2:
call delay
dec bx
jnz jj2
jmp go
j1:
mov bx,15
jj1:
call delay
dec bx
jnz jj1
jmp go
j816:
call delay
call delay
call delay
jmp go
j48:
mov bx,5
jj48:
call delay
dec bx
jnz jj48
jmp go
j24:
mov bx,11
jj24:
call delay
dec bx
jnz jj24
jmp go
j12:
mov bx,23
jj12:
call delay
dec bx
jnz jj12
jmp go
;-------------------
delay:
mov cx,0ffffh
ext:
push cx
mov cx,1400
iter:
loop iter
pop cx
loop ext
ret
;-------------------
end start
Висновок
На даній лабораторній роботі було вивчено основні команди для роботи з системним таймером. Також були вивчені основні принципи і можливості використання таймера.