Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zvit_praktiki.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
3 Мб
Скачать
☆

Інструктаж з техніки безпеки

Перед тим як приступати до роботи, отримав інструктаж з техніки безпеки та техніки протипожежної безпеки, від відповідальної особи.

Програмування навчального стенду

Завдання : Користувач вводить з допомогою цифрової клавіатури частоту від 100 до 3000Гц. Значення відображається на статичному індикаторі. При введені 5 і більше цифр здійснюється зсув введеного вліво. Після введення потрібної частоти та натиснення кнопки яка підтверджує введення синтезується звук заданої частоти.

Опис роботи:

Після того як вводиться наступна цифра попередня зсувається вліво, після того як було введено потрібну частоту та натиснуто # звук синтезувався динаміком після повторного введення іншої частоти звук змінювався , а переведене десяткове число відображалось на індикаторі

Алгоритм виконання основної програми

Початок

Початкові установки

Підпрограма опиту клавіатури.

VDP

Клавіша відп.?

ні

OPKL

NAT

Кнопка нат.?

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 Вигляд навчального стенду.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]