пишите немного понятнее, мне 15 лет

 

hadok

новичок
как через паскаль управлять портом
hadokmail.ru:eek:
 
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
Перенесено в Компьютерный.
 
+
-
edit
 

Mishka

модератор
★★★

Если вы имеете ввиду TurboPascal, то там были два массива
Port и PortW. Пользоваться можно было так
{ Read byte port $80 }
a := Port[ $80 ];

{ Write back }
Port[ $80 ] := $21;

{ Now read the word status ]
Status := PortW[ $81 ];

 
+
-
edit
 

Mishka

модератор
★★★

А для виндов, особенно для NT, W2K, XP - напрямую с аппаратурой работать нельзя.
 
RU Alecsandro #28.10.2002 11:46
+
-
edit
 

Alecsandro
Серокой

координатор
★★★★
Mishka>А для виндов, особенно для NT, W2K, XP - напрямую с аппаратурой работать нельзя.

Можно воспользоваться той прогой, с которой под NT работает AVReal. Прямо указываешь порт, если через API чем-то не устраивает.
http://ln.com.ua/~real/avreal/p95nt.zip
Больше не раскалятся ваши колосники. Мамонты пятилеток сбили свои клыки. ©  
+
-
edit
 

cholev

втянувшийся

Mishka>А для виндов, особенно для NT, W2K, XP - напрямую с аппаратурой работать нельзя.

Я тоже так думал но недавно проапгрейдил БИОСа моего Elitgroup MB директно через WinXP (через Gigabyte Bios Flash). По идеи ето не должно быть но случилось. :confused:
 
+
-
edit
 

Mishka

модератор
★★★

cholev>Я тоже так думал но недавно проапгрейдил БИОСа моего Elitgroup MB директно через WinXP (через Gigabyte Bios Flash). По идеи ето не должно быть но случилось. :confused:

Это не совсем то. Я тоже писал специальные драйверочки, которые позволяли мне лазить по системной памяти. Вопрос в том, что просто из программы обратиться к порту как в ДОСе не получается - ОС не дозволяет.
 
+
-
edit
 

Mishka

модератор
★★★

А так - через файловый доступ можно и COM и LPT читать как будто напрямую.
 
+
-
edit
 

GrayCat

координатор

Куча драйверочков написана на тему разрешения прямого доступа к портам. Например, GetIO: http://www.ddj.com/ftp/1996/1996.05/directio.zip
Gray ©at [Семейство кошачих]  
GrayCat>Куча драйверочков написана на тему разрешения прямого доступа к портам. Например, GetIO: http://www.ddj.com/ftp/1996/1996.05/directio.zip

Интересующимся портами под форточками (а также прерываниями, дма и исполнением кусочков своего кода на уровне ядра без особого геморроя) стоит глянуть на TVicHW32

или на Torry's Delphi Pages поискать
демо его вполне рабочее, только с напоминанием, много примеров на разных языках, и есть отличный чаво в т.ч и на русском

аналогично TetaPCHW 4.6

Yahoo! GeoCities: Get a web site with easy-to-use site building tools.

Yahoo! GeoCities offers you a free web site and all the tools you need to build a dynamic site. Features include easy-to-use site building tools, online help, web site statistics, secure and reliable hosting, and an intuitive control panel.

// www.geocities.com
 



Here are operations on PC hardware which you can complete with the product:
- physical memory access
- hardware I/O ports access
- keyboard access
- user's procedure running at ring 0 CPU
- hardware interrupts handling
- PCI detection
- DMA buffer allocation
- LPT interfacing
- HDD info getting
- mouse access
 

TEvg

аксакал

админ. бан
>А так - через файловый доступ можно и COM и LPT читать как будто напрямую.

Это - сон разума. Для СОМ настоятельно рекомендую Async Professional - есть для паскаля, разных дельфей. Работает в любых виндах.
 
+
-
edit
 

avmich

координатор

Нет, TEvg, это - максимум маразм.

Как насчёт использовать внешнюю библиотеку, в которой писать низкоуровневый код?..
 

TEvg

аксакал

админ. бан
>Нет, TEvg, это - максимум маразм.

А по моему именно сон разума.

>Как насчёт использовать внешнюю библиотеку, в которой писать низкоуровневый код?..

Нормально. Если конечно библиотека нормальная.
 
+
-
edit
 

Mishka

модератор
★★★

>>А так - через файловый доступ можно и COM и LPT читать как будто напрямую.

TEvg>Это - сон разума. Для СОМ настоятельно рекомендую Async Professional - есть для паскаля, разных дельфей. Работает в любых виндах.

А посмотреть как она устроена? Я не ручаюсь за последнюю версию, но первые я использовал чтобы научиться асинхроному вводу-выводу на RS-232 через файловый доступ.
 
TEvg>>Для СОМ настоятельно рекомендую Async Professional - есть для паскаля, разных дельфей. Работает в любых виндах.
Mishka>А посмотреть как она устроена? Я не ручаюсь за последнюю версию, но первые я использовал чтобы научиться асинхроному вводу-выводу на RS-232 через файловый доступ.

Из открытых исходников (и рабочих) для ком-порта под дельфю есть компонент AfComPort (правда он вроде больше не развивается)
  • basic serial communication (input and output buffer, line events)
    • data and event dispatcher
    • visual components (terminal window) compatible with dispatcher by means of a link (like TDataLink with databases)


и более свежая (и компактная) библиотечка SynaSer (это отросток от open source Synapse tcp/ip library), кстати там обещана работа и под линухом (но это уже я сам не проверял, но {$IFDEF LINUX} там и правда есть)
 

TEvg

аксакал

админ. бан
>А посмотреть как она устроена? Я не ручаюсь за последнюю версию, но первые я использовал чтобы научиться асинхроному вводу-выводу на RS-232 через файловый доступ.

Всем ходить и качать сюда. Качать настоятельно рекомендуется регетом.
 
TEvg>Всем ходить и качать сюда. Качать настоятельно рекомендуется регетом.

Ну ни фига себе размер. Не, я сейчас за SynaSer, 50 кб всего исходник, да еще и не компонент а библиотека, да еще и открытая и развивается пока, да еще и под линух портируется.
 
+
-
edit
 

Mishka

модератор
★★★

Не работает - 403 ошибка при попытке сгрузить.
 
+
-
edit
 

Mishka

модератор
★★★

Вот выборки из DDK
Ports and Devices: Windows DDK




Opening and Closing a Parallel Port
Clients can share a parallel port. A client must open a file on a parallel port before the client can use other I/O requests or use the parallel port callback routines. A client must not attempt to communicate with a parallel port after the client has closed its file on the port.

Note that in a Plug and Play environment, a device can be removed or added whenever there are no open files on it. In general, every time a parallel port is added, Plug and Play assigns a different location and resources.

Built on Wednesday, July 24, 2002





Serial Ports and Devices: Windows DDK

Open and Initialize a COM Port
When Serial is used as a function driver, the following considerations apply to opening and initializing a COM port:

Serial supports only one open at a time on a COM port.
A port is in an undefined state when it is opened. A client should initialize a port to a known state before using the port. A user-mode client must use the Win32 Communications API. A kernel-mode client can use the IOCTL_SERIAL_SET_Xxx and the IOCTL_SERIAL_INTERNAL_Xxx requests.
All clients must open a COM port when they need it, and they should close the port immediately after they are through with the port.
Serenum must open an RS-232 port to enumerate the port. Clients that hold an RS-232 port open indefinitely should not use Serenum.
Built on Wednesday, July 24, 2002


Так что хочешь-не-хочешь, а все Дельфаевские компоненты открывают файлы на СОМ портах.
 

TEvg

аксакал

админ. бан
Так что хочешь-не-хочешь, а все Дельфаевские компоненты открывают файлы на СОМ портах.

C какой радости?

>A client must open a file on a parallel port before the client can use other I/O requests or use the parallel port callback routines

Речь идет о LPT.

>A user-mode client must use the Win32 Communications API

Не вижу слово file.

Интересно можно ли открыв файл произвольно менять уровни сигналов DTR, RTS, RI..?

>Ну ни фига себе размер. Не, я сейчас за SynaSer, 50 кб всего исходник, да еще и не компонент а библиотека, да еще и открытая и развивается пока, да еще и под линух портируется.

Async Pro - библиотека компонентов. Большая. Под разные Дельфы, под Це Быдлер. Потому такой размер.

airbase.ru/users/TEvg/img/asp1.htm

airbase.ru/users/TEvg/img/asp3.htm


>Не работает - 403 ошибка при попытке сгрузить.

Угу. Я качал именно оттуда, шла со скрипом, но все же скачалась. Сейчас померла. Если кому надо могу записать на сидюк и выслать. В обмен на CFS2. :p
 
+
-
edit
 

Mishka

модератор
★★★

TEvg>C какой радости?

А с такой - другого пути нет. Или драйвер специальный свой, или системный. Слой абстракции железа не пускает работать напрямую с железом иначе как через его API - только драйвер и работает на уровне железа. Этим NT/2000/XP и отличаются от 95/98.

>>A client must open a file on a parallel port before the client can use other I/O requests or use the parallel port callback routines

TEvg>Речь идет о LPT.

А не важно - я просто показал, что от порта не зависит.

>>A user-mode client must use the Win32 Communications API

TEvg>Не вижу слово file.

Женя, залезте в MSDN и посмотрите определение Win32 Communications API - там файловые операции (общение с драйвером тоже происходит через его открытие как файла - таким образом, понятие файла немного шире обычного - сродни Юниху), сокеты и пара специальных.

TEvg>Интересно можно ли открыв файл произвольно менять уровни сигналов DTR, RTS, RI..?

Можно - через DeviceIOControl. Вот вам опять пара цитат из мсдн -
Platform SDK: Device I/O

Calling DeviceIoControl

Windows NT/2000/XP


An application can use the DeviceIoControl function to perform direct input and output operations on, or retrieve information about, a floppy disk drive, hard disk drive, tape drive, or CD-ROM drive. The following example demonstrates how to retrieve information about the first physical drive in the system. It uses the CreateFile function to retrieve the device handle to the first physical drive, and then uses DeviceIoControl with the IOCTL_DISK_GET_DRIVE_GEOMETRY control code to fill a DISK_GEOMETRY structure with information about the drive.

/* The code of interest is in the subroutine GetDriveGeometry. The
code in main shows how to interpret the results of the IOCTL call. */

#include <windows.h>
#include <winioctl.h>

BOOL GetDriveGeometry(DISK_GEOMETRY *pdg)
{
HANDLE hDevice; // handle to the drive to be examined
BOOL bResult; // results flag
DWORD junk; // discard results

hDevice = CreateFile("\.PhysicalDrive0", // drive to open
0, // no access to the drive
FILE_SHARE_READ | // share mode
FILE_SHARE_WRITE,
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL); // do not copy file attributes

if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive
{
retun (FALSE);
}

[ слишком длинный топик - автонарезка ]
 
+
-
edit
 

Mishka

модератор
★★★

bResult = DeviceIoControl(hDevice, // device to be queried
IOCTL_DISK_GET_DRIVE_GEOMETRY, // operation to perform
NULL, 0, // no input buffer
pdg, sizeof(*pdg), // output buffer
&junk, // # bytes returned
(LPOVERLAPPED) NULL); // synchronous I/O

CloseHandle(hDevice);

return (bResult);
}

int main(int argc, char *argv[])
{
DISK_GEOMETRY pdg; // disk drive geometry structure
BOOL bResult; // generic results flag
ULONGLONG DiskSize; // size of the drive, in bytes

bResult = GetDriveGeometry (&pdg);

if (bResult)
{
printf("Cylinders = %I64dn", pdg.Cylinders);
printf("Tracks per cylinder = %ldn", (ULONG) pdg.TracksPerCylinder);
printf("Sectors per track = %ldn", (ULONG) pdg.SectorsPerTrack);
printf("Bytes per sector = %ldn", (ULONG) pdg.BytesPerSector);

DiskSize = pdg.Cylinders.QuadPart * (ULONG)pdg.TracksPerCylinder *
(ULONG)pdg.SectorsPerTrack * (ULONG)pdg.BytesPerSector;
printf("Disk size = %I64d (Bytes) = %I64d (Mb)n", DiskSize,
DiskSize / (1024 * 1024));
}
else
{
printf ("GetDriveGeometry failed. Error %ld.n", GetLastError ());
}

return ((int)bResult);
}
This example does not work on Windows 95/98/Me for the following reasons:


The standard device input/output control codes are not available.
An application must specify a virtual device driver in the CreateFile function—not a specific device.
For an example that works on Windows 95/98/Me, see Calling DeviceIoControl on Windows 95/98/Me.
Platform SDK Release: August 2002 What did you think of this topic?
Let us know. Order a Platform SDK CD Online
(U.S./Canada) (International)


И еще:


Platform SDK: Device I/O

DeviceIoControl

The DeviceIoControl function sends a control code directly to a specified device driver, causing the corresponding device to perform the corresponding operation.


BOOL DeviceIoControl(
HANDLE hDevice,
DWORD dwIoControlCode,
LPVOID lpInBuffer,
DWORD nInBufferSize,
LPVOID lpOutBuffer,
DWORD nOutBufferSize,
LPDWORD lpBytesReturned,
LPOVERLAPPED lpOverlapped
);

Parameters
hDevice
[in] Handle to the device on which to perform the operation, typically a volume, directory, file, or alternate stream. To retrieve a device handle, use the CreateFile function. For more information, see Remarks.
 
+
-
edit
 

Mishka

модератор
★★★

hcube>Я фигею! Человек просит 'попроще' - а вы ему 'через API!' - 'нет, можно и прямой доступ!' - 'а вот тут какая библиотека есть!' ;-)

А чего фигеть-то? :) Вопрос зашел немного в теоритизирование. Женя утверждает, что его компоненты не читают файлы, я говорю, что это не так. Но спор идет, как обеспечить доступ под виндами, потому как под досом показано уже и достаточно просто - смотри первый ответ.

hcube>Смотри, человече - есть пространство памяти в IBM PC и есть пространство портов. Когда-то они отличались только одним битиком на шине - что читать, память или порт. Сейчас - не

Иная простота хуже воровства. Это правильно, но... вопрос был как программировать на Паскале. Еще, если процессор работает в реальном режиме, а не виртуальном. Т.е. под виндами немного не так. Особенно под НТ.

hcube>знаю... Пространство - это значит, что есть шина, на которой можно выставить адрес, и есть устройства - которые

Неплохо было бы объяснить, что есть шина.

hcube>могут с этой шины читать адрес и данные, и если адрес совпадает с тем, который по мнению устройства должен быть - писать данные в некий регистр внутри устройства. Далее, согласно логике работы устройства оно с этими данными что-то делает. Что именно - можно определить методом тыка, но лучше прочесть документацию (если есть). ВСЕ, что есть в компе - это

Метод тыка, конечно, важен, но для сложных протоколов, да даже для RS-232 - методом тыка много не наработаешь.

hcube>как раз такие устройства. Простые, сложные... разные. В том числе есть модуль принтерного порта, который из себя представляет встроенный в чипсет универсальный параллельный приемопередатчик i8055 - наш аналог - КМ580ВВ55А. У которого есть куча режимов, в том числе он воспроизводит содержимое порта принтера на внешних ножках. Послал в порт байт - получил на ножках набор нолей и единичек. Этим и надо пользоваться.

Здесь я чего-то пропустил - почему идет разговор про параллельный порт? Или это потому, что мотор влево-вправо?
 
+
-
edit
 

Mishka

модератор
★★★

На самом деле с портами я тоже лажанулся - нечетные номера могут быть только 8 битными. А четные - и 16 и 8 битными. Вот так вот. Так что от памяти отличаются. Да еще и в памяти обычно как - что положил, то и взял. А с портами? Вот так-то.
 

hcube

старожил
★★
Я фигею! Человек просит 'попроще' - а вы ему 'через API!' - 'нет, можно и прямой доступ!' - 'а вот тут какая библиотека есть!' ;-)

Смотри, человече - есть пространство памяти в IBM PC и есть пространство портов. Когда-то они отличались только одним битиком на шине - что читать, память или порт. Сейчас - не знаю... Пространство - это значит, что есть шина, на которой можно выставить адрес, и есть устройства - которые могут с этой шины читать адрес и данные, и если адрес совпадает с тем, который по мнению устройства должен быть - писать данные в некий регистр внутри устройства. Далее, согласно логике работы устройства оно с этими данными что-то делает. Что именно - можно определить методом тыка, но лучше прочесть документацию (если есть). ВСЕ, что есть в компе - это как раз такие устройства. Простые, сложные... разные. В том числе есть модуль принтерного порта, который из себя представляет встроенный в чипсет универсальный параллельный приемопередатчик i8055 - наш аналог - КМ580ВВ55А. У которого есть куча режимов, в том числе он воспроизводит содержимое порта принтера на внешних ножках. Послал в порт байт - получил на ножках набор нолей и единичек. Этим и надо пользоваться.

Pin In/Out Signal Name Pin In/Out Signal Name
--- ------ ------------ --- ------ -------------
1 I/O -STROBE 14 O -AUTO FEED XT
2 I/O Data Bit 0 15 I -ERROR
3 I/O Data Bit 1 16 O -INIT
4 I/O Data Bit 2 17 O -SLCT IN
5 I/O Data Bit 3 18 na Ground
6 I/O Data Bit 4 19 na Ground
7 I/O Data Bit 5 20 na Ground
8 I/O Data Bit 6 21 na Ground
9 I/O Data Bit 7 22 na Ground
10 I -ACK 23 na Ground
11 I BUSY 24 na Ground
12 I PE 25 na Ground
13 I SLCT

Для начала найди 8 штук светодиодиков, один разъем DB25M и спаяй следующую схемку - 'плюс' светодиодиков - к ножкам Data Bit 1..8, а 'минус' - объединить все одним проводом и припаять его к любой из ножек 18..25 ... можно ко всем сразу. Так ты получишь пробник. После этого можешь играться с выводом в порт разных чисел - оно их отобразит.
Убей в себе зомби!  

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru