Вот пока пример программы для считывания скан кодов.
Написано на 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




Ответить с цитированием