Вверх ↑
Этот топик читают: Гость
Ответов: 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
как архив добавить?

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

1
Голосовали:Леонид
vip
#1.1контекстная реклама от партнеров
Ответов: 165
Рейтинг: 7
#2: 2020-04-11 09:43:38 ЛС | профиль | цитата
Пользователи ->файлы
карма: 1

0
Ответов: 8886
Рейтинг: 823
#3: 2020-04-11 10:24:25 ЛС | профиль | цитата
У меня на материнке есть разъём для LPT, в устройствах отображается, но начиная с Win7-64, Win10-64 работать с ним не получается а хотелось бы.
Анекдот писал(а):
Старый-то способ хорош был!

карма: 19

0
Ответов: 32
Рейтинг: 7
#4: 2020-04-11 11:37:36 ЛС | профиль | цитата
проверил на вин7 64 работает
http://www.highrez.co.uk/downloads/inpout32/ сылка на свежий DLL

спасибо за подсказу про файлы!

Редактировалось 1 раз(а), последний 2020-04-11 11:39:01
карма: 1

0
Ответов: 8886
Рейтинг: 823
#5: 2020-04-11 12:40:29 ЛС | профиль | цитата
gadzhe77 писал(а):
проверил на вин7 64 работает

Вы проверяете на *.dll из приведённой в предыдущем посте ссылке или на той, что установлена по умолчанию?
(Порадовался на ваш IC, с примечаниями, как на ладони!)
карма: 19

0
Ответов: 32
Рейтинг: 7
#6: 2020-04-11 13:31:05 ЛС | профиль | цитата
спасибо люблю когда сразу все понятно
да причем код изменять не нужно. тока в биосе в параметрах LPT выставил NORM, с BI-Direc работает странно но работает
добавил архив с файлами

Редактировалось 2 раз(а), последний 2020-04-11 13:35:10
карма: 1

0
Ответов: 8886
Рейтинг: 823
#7: 2020-04-11 13:54:38 ЛС | профиль | цитата
Матроскин писал(а):
Ура-а! Заработало!

Скачал по вашей ссылке и установил inpoutx64.dll. С inpout32.dll тоже работает. Положил их в папку с программой и записал в IC полный путь. Пока "самоизляция", выведу порт наружу, буду экспериментировать. (Ранее порт LPT на чистую память без вычислений до аж 1 МГц, а с обработкой 60--100 кГц.)
Спасибо за наводку!
(Попробуйте реализовать драйвер для HiAsm.)
карма: 19

0
Ответов: 32
Рейтинг: 7
#8: 2020-04-11 16:14:08 ЛС | профиль | цитата
через переходник usb2lpt на cy7c68013 то же работает и на вин7 64
драйвер для HiAsm это как? заменить родной чтоб также с компонентами работал?

на вин10 64 тоже работает, реального LPT нет поэтому проверял на переходнике как LPT1 (адрес 888)
только в драйвере галочку ставил эмуляция-прерывания


Редактировалось 1 раз(а), последний 2020-04-11 17:25:02
карма: 1

0
Ответов: 32
Рейтинг: 7
#9: 2020-04-12 15:48:56 ЛС | профиль | цитата
вот архив со всей инфой

Редактировалось 1 раз(а), последний 2020-04-12 15:49:50
карма: 1

0
файлы: 1инфа.zip [386.2KB] [433]
Ответов: 4612
Рейтинг: 746
#10: 2020-04-13 11:24:11 ЛС | профиль | цитата
Леонид писал(а):
С inpout32.dll тоже работает
Насколько помню, inpout32.dll в фоновом режиме устанавливает драйвер, при выгрузке - удаляет (а может даже не удаляет). Удобно, но если такое поведение устраивает. Требует запуска программы с правами администратора?

Редактировалось 1 раз(а), последний 2020-04-13 14:01:19
карма: 26

0
Ответов: 32
Рейтинг: 7
#11: 2020-04-13 13:27:31 ЛС | профиль | цитата
на вин10x64 библиотеки ложил в папку с программой, по другому(своей инсталяцией) не находил DLL
с правами не помню

Редактировалось 2 раз(а), последний 2020-04-13 13:28:27
карма: 1

0
Ответов: 32
Рейтинг: 7
#12: 2020-04-20 16:44:26 ЛС | профиль | цитата
попытался доработать InlineCode для работы с LPT
что получилось и библиотеки с примерами в архиве
карма: 1

0
12
Сообщение
...
Прикрепленные файлы
(файлы не залиты)