Вот пока пример программы для считывания скан кодов.
Написано на fasmg. За качество не ругайте.
Код:
include "8085.inc"
;----Програма чтения ps/2 клавиатуры с--------------------------
;---использованием ВВ51 и обработчиком---------------------
;---прерываний------------------------------------------------------------------
init: di
lxi sp,ramtop
call initlcd
call initusart
ei
main: hlt
jp main
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
hextab: db '0123456789ABCDEF'
nop
nop
nop
nop
nop
nop
nop
nop
;----процедура обработки прерываний-------------------------------------------------
int: di
push psw
push d
push h
in dusart
call hexout
mvi a,068h
out dlcd
call delay
mvi a,20h
out dlcd
call delay
pop h
pop d
pop psw
ei
ret
;---Установка ВВ51 в исходное состояние---------------------------------
initusart: xra a
out cusart
out cusart
out cusart
mvi a,ir ;Сброс
out cusart
mvi a,ps2 ;Установка режима работы порта
out cusart
mvi a,rxe
out cusart ;Запись команды
call delay
in dusart
call hexout
call delay
ret
;-Установка LCD2004b в исходное состояние------------------------
initlcd: mvi a,0ffh
call delaya ;ожидание
mvi a,0ffh
call delaya ;ожидание
mvi a,lcdinit ;
out clcd
call delay
mvi a,lcdinit ;
out clcd ;инициализация
call delay
;-------------------------------------------------------------------------------------------------
mvi a,lcd8bit ;
out clcd ;режим 8бит
call delay
;--------------------------------------------------------------------------------------------------
mvi a,lcdon ;
out clcd ;включение
call delay
;---------------------------------------------------------------------------------------------------
mvi a,lcdcls ;
out clcd ;очистка
mvi a,d5ms
call delaya
;----------------------------------------------------------------------------------------------------
mvi a,06h ;
out clcd ;режим
call delay
;----------------------------------------------------------------------------------------------------
mvi a,070h ; p
out dlcd
call delay
mvi a,073h ; s
out dlcd
call delay
mvi a,02Fh ; /
out dlcd
call delay
mvi a,032h ; 2
out dlcd
call delay
mvi a,020h ;
out dlcd
call delay
ret
;----печать HEX байта из аккумулятора--------------------------------------------------------
hexout: push psw ; сохраняем аккумулятор
rrc ; сдвиг на 4 разряда
rrc
rrc
rrc
call lhout ; выводим старшие разряды
pop psw ; восстанавливаем значение
call lhout ; выводим младшие разряды
ret
lhout: lxi d,hextab ; загружаем адрес таблицы
ani 0Fh ; оставляем младший полубайт
mov l,a ; загружаем в L
dad d ; получаем адрес символа в HL
mov a,m ; загружаем символ из таблицы
out dlcd ; выводим символ
call delay
ret
;-----------задержка 100us-------------------------------------------------------------------------------
delay: mvi a,0Fh
delay1: dcr a
nop
nop
jnz delay1
ret
;-----------задержка а*100us----------------------------------------------------------------------------
delaya: mov c,a ;в а содержится время задержки
call delay
mov a,c
dcr a
jnz delaya
ret
;------------------Константы и указатели--------------------------------------------------------
ramtop= 87FFh ;
d5ms= 030h ;задержка 5ms
;---Адреса регистров УСАПП----------------------------------------------------------------------
dusart= 00h ; регистр данных
cusart= 01h ; регистр команд
;---Режимы УСАПП--------------------------------------------------------------------------------------
v9600= 04Eh ;1/16_8_no_1
v2400= 04Fh ;1/64_8_no_1
ps2= 05Dh ;1/1_8_odd_1
;---Команды УСАПП------------------------------------------------------------------------------------
txen= 01h ; Передатчик включен
dtr= 02h ; Устройство готово
rxe= 04h ; Приемник включен
sbrk= 08h ; Прерывание передачи
er= 10h ; Сброс ошибок приема
rts= 20h ; Передача разрешена
ir= 40h ; Программный сброс
eh= 80h ; Режим Hunt
;---Регистр состояния УСАПП-----------------------------------------------------------------------
txrdy= 01h ; Передатчик готов
rxrdy= 02h ; Приемник готов
txe= 04h ; Передача закончена
pe= 08h ; Ошибка четности
oe= 10h ; Ошибка переполнения
fe= 20h ; Ошибка формата
syndet= 40h ; Синхросимвол найден
dsr= 80h ; Передатчик терминала готов
;------Адреса регистров LCD----------------------------------------------------------------------------
clcd= 80h ;регистр команд
dlcd= 81h ;регистр данных
;------Команды LCD----------------------------------------------------------------------------------------
lcdon= 0Ch
lcdoff= 08h
lcdcls= 01h
lcd8bit= 038h
lcdhome= 02h
lcdinit= 030h