Вверх ↑
Ответов: 32
Рейтинг: 7
#1: 2020-04-11 09:01:17 ЛС | профиль | цитата
попробовал прикрутить к HiAsmу доступ к портам inpout32.dll, не могу разобраться как прикрепить сюда SHA либо архив со всем
подскажите пожалуйста
Add(MainForm,2953706,238,175)
{
Width=365
Height=222
}
Add(InlineCode,15017054,483,280)
{
WorkPoints=#11:doWritePort|10:doReadPort|
EventPoints=#9:onOutPort|
DataPoints=#8:DataPort|7:AddPort|
Code=#0:|15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|57:/// внешние функции или процедуры для нашей работы из DLL|84: function Out32(PortAdr: word; Data: byte): byte; stdcall; external 'inpout32.dll';|72: function Inp32(PortAdr: word): byte; stdcall; external 'inpout32.dll';|79:///////////////////////////////////////////////////////////////////////////////|0:|0:|32:type // объявления типов классов|28: THiAsmClass = class(TDebug)|3: |3: |99: private // раздел переменных и процедур, которые могут использоваться только внутри этого модуля|61: OutPort:byte; // обьявили переменную для результата байт|3: |59: public //здесь будут описаны точки компонента InlineCode|69: onOutPort:THI_Event; // точка выхода данных прочитанных из порта|45: DataPort:THI_Event; // байт данных |51: AddPort:THI_Event; // десятичный адрес порта|89: procedure doWritePort(var Data:TData; index:word); // процедура записи данных в порт|90: procedure doReadPort(var Data:TData; index:word); // процедура чтения данных из порта|100: procedure Result(var Data:TData; index:word); // процедура для вывода данных в поток по событию|5: end;|0:|0:|0:|63://// Тут работаем /////////////////////////////////////////////|14:implementation|0:|76://// Процедура записи данных в порт ////////////////////////////////////////|88:procedure THiAsmClass.doWritePort(var Data:TData; index:word); // процедура где работаем|26:var // обьявили переменные|36: dat:byte; // переменная для данных|40: PortAdr:word; // переменная для адреса|5:begin|118: dat := ReadInteger(Data, DataPort); // переносим внешнюю переменую для данных из точки DataPort во внутрен перем dat|113: PortAdr := ReadInteger(Data, AddPort); // переносим внешнюю переменую из точки AddPort во внутрен перем PortAdr|99: OutPort := dat + PortAdr ; // сумма адреса и порта чисто для проверки!!!! можно закоментить (//)|157: Out32(PortAdr, dat); // отправляем данные во внешнюю функцию Out32() из DLL (PortAdr=адрес порта: dat=переменная с записываемыми данными в порт) |77: _hi_OnEvent(onOutPort, OutPort); // создаем событие и выводим сумму в поток|4:end;|75:///////////////////////////////////////////////////////////////////////////|0:|0:|77://// Процедура чтения данных из порта порт //////////////////////////////////|88:procedure THiAsmClass.doReadPort(var Data:TData; index:word); // процедура где работаем|3:var|46: PortAdr:word; // переменная для адреса порта|5:begin|113: PortAdr := ReadInteger(Data, AddPort); // переносим внешнюю переменую из точки AddPort во внутрен перем PortAdr|130: OutPort := Inp32(PortAdr); // читаем из порта данные (функция Inp32() из inpout32.dll) и заносим в переменную OutPort|82: _hi_OnEvent(onOutPort, OutPort); // создаем событие и выводим данные в поток|4:end;|75:///////////////////////////////////////////////////////////////////////////|0:|0:|76:/// Создаем событие и выводим резултат OutPort /////////////////////////////|57:procedure THiAsmClass.Result(var Data:TData; index:word);|5:begin|27: dtInteger(Data, OutPort);|4:end;|80:////////////////////////////////////////////////////////////////////////////////|27:end. // глобальный конец!!!|
link(DataPort,14303973:Text,[(489,233)(475,233)])
link(AddPort,6852602:Text,[(496,233)(524,233)])
link(onOutPort,5444815:doText,[])
}
Add(Button,1831825,343,252)
{
Left=20
Top=105
Caption="запись"
link(onClick,15017054:doWritePort,[(429,258)(429,286)])
}
Add(Edit,5444815,665,280)
{
Left=200
Top=60
Width=45
Text=""
DataType=1
}
Add(Edit,14303973,469,154)
{
Left=25
Top=60
Text=""
DataType=1
}
Add(Edit,6852602,518,154)
{
Left=105
Top=60
Text=""
DataType=1
}
Add(Label,10694634,595,63)
{
Left=80
Top=55
Width=15
Height=28
Font=[MS Sans Serif,14,0,0,1]
Caption="+"
}
Add(Label,14940203,581,63)
{
Left=170
Top=55
Width=15
Height=28
Font=[MS Sans Serif,14,0,0,1]
Caption="="
}
Add(Label,4095063,469,112)
{
Left=30
Top=40
Width=42
Height=17
Caption="данные"
}
Add(Label,7448487,518,112)
{
Left=110
Top=40
Width=34
Height=17
Caption="адрес"
}
Add(Button,423910,343,322)
{
Left=20
Top=140
Caption="чтение"
link(onClick,15017054:doReadPort,[(429,328)(429,293)])
}
Add(Label,6691554,567,63)
{
Left=40
Top=10
Width=147
Height=17
Caption="сумма только для проверки"
}
Add(Label,3207119,546,63)
{
Left=200
Top=40
Width=35
Height=17
Caption="выход"
}


вроде вот так
проверил, работает на ХР LPT1 адрес 888
как архив добавить?
карма: 1

1
Голосовали:Леонид
Редактировалось 5 раз(а), последний 2020-04-11 09:07:32