Інструктаж з техніки безпеки
Перед тим як приступати до роботи, отримав інструктаж з техніки безпеки та техніки протипожежної безпеки, від відповідальної особи.
Програмування навчального стенду
Завдання : Користувач вводить з допомогою цифрової клавіатури частоту від 100 до 3000Гц. Значення відображається на статичному індикаторі. При введені 5 і більше цифр здійснюється зсув введеного вліво. Після введення потрібної частоти та натиснення кнопки яка підтверджує введення синтезується звук заданої частоти.
Опис роботи:
Після того як вводиться наступна цифра попередня зсувається вліво, після того як було введено потрібну частоту та натиснуто # звук синтезувався динаміком після повторного введення іншої частоти звук змінювався , а переведене десяткове число відображалось на індикаторі
Алгоритм виконання основної програми
Початок
Початкові установки
Підпрограма опиту клавіатури.
Клавіша відп.?
ні
OPKL
Кнопка нат.?
Perevid
Завантаження TMR0
Дозвіл переривання TMR0
Кінець
Підпрограма опиту клавіатури
OP_KL
Затримка
100_ms
scan=9
scan=6
scan=3
scan=0
scan=8
scan=5
scan=2
scan=7
scan=4
st3.3=0?
st3.2=0?
st3.1=0?
st3.0=0?
st2.3=0?
st2.2=0?
st2.1=0?
st2.0=0?
st1.2=0?
st1.1=0?
st1.0=0?
scan=1
9006h→st1 9005h→st2 9003h→str3 9003h→st3
scan=aah
scan=ff
Вихід
Затримка 100_mS
Zatr
r1=k1
r2=k2
r1
r2
ret
Програмний код
org 0
jmp osn
org 0bh ;підпрограма обробки переривань по TMR0
mov th0,k_1
mov tl0,k_0
cpl p1.6 ;інверсія порту p1.6(синтезування звуку)
reti
osn: mov scr1,#0 ;очистка всіх змінних
mov scr2,#0
mov scr3,#0
mov k_1,#0
mov k_0,#0
vdp: call op_kl ;перевірка на відпускання
mov a,scan
xrl a,#ffh
jnz vdp
nat: call op_kl ;перевірка на натискання
mov a,scan
xrl a,#ffh
jz nat
mov a,scan
xrl a,#aah ;перевірка на натискання решітки
mov dptr,#0
jz perevid
mov a,scr3 ;посування чисул в ліво
swap a ;в старшому байті
add a,scr2
mov des_s,a
mov dptr,#a000h ;вивід зображення на старший байт індикатора
movx @dptr,A
mov a,scr1 ;посування чисул в ліво
swap a ;в молодшому байті
add a,scan
mov des_m,a
mov dptr,#b000h ;вивід зображення на молодший байт індикатора
movx @dptr,A
mov scr3,scr2 ;збереження стану індикатора в змінних
mov scr2,scr1
mov scr1,scan
jmp vdp
perevid: mov a,des_m ;перевід з десяткової в двійкову систему
add a,#99h
da a
mov des_m,a
mov a,des_s
addc a,#99h
da a
mov des_s,a
inc dptr ;отримуємо двійкове число в dptr
mov a,des_m
jnz perevid
mov a,des_s
jnz perevid
mov dv_m,dpl ;запис двійкового числа в змінні
mov dv_s,dph
mov c_0,#00000000b
mov c_1,#10110000b
mov c_2,#00000100b
clr c
mov dptr,#0
div: mov a,c_0 ;ділення способом багатократного віднімання
subb a,dv_m
mov c_0,a
mov a,c_1
subb a,dv_s
mov c_1,a
mov a,c_2
subb a,#0
mov c_2,a
inc dptr
jnc div
mov k_2,#00000001b ;число 65536
mov k_1,#00000000b
mov k_0,#00000000b
clr c
mov a,k_0 ;розрахунок числа для завантаження в таймер
subb a,dpl
mov k_0,a
mov a,k_1
subb a,dph
mov k_1,a
mov a,k_2
subb a,#0
mov k_2,a
mov a,k_0 ;вивід на індикатори числа
mov dptr,#b000h ; яке завантажується в таймер
movx @dptr,A
mov a,k_1
mov dptr,#a000h
movx @dptr,A
mov tmod,#00000001b ;запуск TMR0 в другому режимі
setb tr0 ;дозвіл переривань по TMR0
setb et0 ;запуск TMR0
setb ea
jmp vdp
op_kl: call z_100ms ;опит клавіатури
mov dptr,#9006h ;зчитування стану кнопок
movx a,@dptr ;і запис його в змінні
mov st1,a
mov dptr,#9005h
movx a,@dptr
mov st2,a
mov dptr,#9003h
movx a,@dptr
mov st3,a
jnb st1.0,kn_1 ;кнопка 1 натиснута?
jnb st1.1,kn_4 ;кнопка 4 натиснута?
jnb st1.2,kn_7 ;кнопка 7 натиснута?
jnb st2.0,kn_2 ;кнопка 2 натиснута?
jnb st2.1,kn_5 ;кнопка 5 натиснута?
jnb st2.2,kn_8 ;кнопка 8 натиснута?
jnb st2.3,kn_0 ;кнопка 0 натиснута?
jnb st3.0,kn_3 ;кнопка 3 натиснута?
jnb st3.1,kn_6 ;кнопка 6 натиснута?
jnb st3.2,kn_9 ;кнопка 9 натиснута?
jnb st3.3,kn_enter ;кнопка решітка натиснута?
mov scan,#ffh ;не натиснута ніяка кнопка
ret
kn_1: mov scan,#1 ;скан код =1
ret
kn_4: mov scan,#4 ;скан код =4
ret
kn_7: mov scan,#7 ;скан код =7
ret
kn_2: mov scan,#2 ;скан код =2
ret
kn_5: mov scan,#5 ;скан код =5
ret
kn_8: mov scan,#8 ;скан код =8
ret
kn_0: mov scan,#0 ;скан код =0
ret
kn_3: mov scan,#3 ;скан код =3
ret
kn_6: mov scan,#6 ;скан код =6
ret
kn_9: mov scan,#9 ;скан код =9
ret
kn_enter: mov scan,#aah ;скан код =аа
ret
z_100ms:mov r1,#120 ;затримка 100мс
mov r2,#0
djnz r2,$
djnz r1,$-2
ret
st1 equ 20h ;виділення памяті для змінних
st2 equ 21h
st3 equ 22h
scan equ 23h
scr1 equ 24h
scr2 equ 25h
scr3 equ 26h
des_m equ 27h
des_s equ 28h
dv_m equ 29h
dv_s equ 2ah
c_2 equ 2bh
c_1 equ 2ch
c_0 equ 2dh
k_2 equ 2eh
k_1 equ 2fh
k_0 equ 30h
end
Рис.1 Вигляд навчального стенду.
