Для введення інформації широко застосовуються кнопкові перемикачі. Сигнал таких перемикачів формується шляхом замикання (розмикання) електричного кола.
В стенді встановлено дві дискретні кнопки K_En I K_J, які під’єднані до входів зовнішніх переривань контролера відповідно до INT0 i INT1. Опитування даних давачів можна здійснювати як з використаннях переривань так і способом опитування стану окремого виводу потра контролера.
Також для введеня інформації використовується механічний енкодер E1.
Енкодер (датчик кута або перетворювач кут-код) – пристрій, який призначений для перетворення кута повороту обертового об’єкта (вала) в електричні сигнали, які дозволяють визначити кут його повороту.
Енкодери розділяються на інкременті і абсолютні, які можуть забезпечити дуже високу роздільну здатність. В інкрементних датчиках кутового положення поточне положення визначється шляхом підрахунку числа імпульсів від нульової точки.
На виході енкодера є два прямокутних сигнали, які зсунуті відносно один одного, в даному випадку на 900 (рисунок 4.2).
Рисунок 4.2 – Сигнали на виході енкодара
По характеру зсуву можна визначити напрамок обертання ручки вала енкодера. Розрізняється такоє кількість імпульсів на оберт, для даного типу енкодера – 20.
Приклад програми для лабораторної роботи №6
Написати програму для роботи з енкодером. При повертані ручки за годинниковою стрілкою збільшувати значення і значення виводити у двійковому вигляді на світлодіодну лінійку, при повертанні прити годинникової стрілки зменшувати значення.
$include (mod841)
DAT equ R7
ADDR equ R6
State data 9
org 0
JMP BEGIN
ORG 030H
BEGIN:
mov SP, #2fh
mov State, #0
loop:
call ReadEnc
mov a, State
add a, R7
mov State, a
mov DAT, a
mov ADDR, #7
call write
call Zatr
Jmp loop
ZATR:
MOV R7, #0H
DJNZ R7,$
RET
encA bit 0
encB bit 1
ReadEnc:
mov a, #0
mov c, encA
rlc a
mov c, P3.4
mov encA, c
rlc a
cjne a, #1, ReadEnc_NotFirst
;first
mov c, P3.5
mov encB, c
ReadEnc_NotFirst:
cjne a, #2, ReadEnc_NotSecond
;second
mov a, #0
mov c, encB
rlc a
mov c, P3.5
rlc a
cjne a, #1, ReadEnc_NotCW
;CW
mov R7, #1
Ret
ReadEnc_NotCW:
;CCW
cjne a, #2, ReadEnc_NotCCW
mov R7, #255
Ret
ReadEnc_NotCCW:
ReadEnc_NotSecond:
mov R7, #0
Ret
;===**END**===
write: setb P3.6 //Set Data bus buffer to TX
mov P0, DAT //moving data to bus buffer
mov P2, ADDR //set periferals address
nop //wait
nop
mov P2, #0x00 //clock pulse for device latch
ret //exit from subroutine
end