![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
LPT порт [D6, WinME]
Dionis © (2003-01-26 20:04:00)Хочу записать в порт LPT. Имеется код:
asm
MOV DX,890;
MOV AL,Data
OUT DX,AL
end;
У меня при 0<=Data<=255 в порт записывается 58 (при любом начальном значении в порту). Что делать? (ОС Windows ME)
Yaga (2003-01-27 18:12:00) [1]Если есть желание разобраться...
Адрес LPT1 в области данных BIOS - 0:408h, если есть сомнения отноcительно 378h, добавляете маленький кусочек кода:
mov ax,40h
mov ds,ax
mov dx,ds:[8]
в результате чего в dx - базовый адрес LPT1
Предположем, что базовый 378h:
378h - Регистр данных, запись/чтение
379h - Регистр состояния принтера, чтение:
биты:
3: 0 - при печати возникла ошибка
4: 0 - принтер в автономном режиме
5: 1 - конец бумаги
6: 0 - принтер готов к печати след. символа
7: 0 - принтер занят, находится в автономном режиме или произошла ошибка
37Ah - Регистр управления принтером, запись/чтение
биты:
0: бит запуска печати (кратковременно устанавливается в 0)
1: 1 - после возврата каретки выводить перевод строки
2: 1 - инициализировать принтер
3: 1 - разрешить вывод на печать
4: 1 - разрешить прерывания от принтера
Это если на асме. Перед кормлением очередным байтом не забудьте проверить готов ли заглотать его и не произошло ли какой-нить ошибки.
Не совсем согласна с jack128 - асм сила, но тоже рекомендую использовать CreateFile(), ReadFile(), WriteFile(). Использовать готовые компоненты, конечно тоже выход, но приятнее разобраться.
Valentain (2003-01-27 16:01:00) [2]
procedure port_Write( APortAddr:Word; AData:Byte ); assembler;
{$IfDef WIN32} pascal; {$EndIf}
{ -- }
asm
mov dx,APortAddr
mov al,AData
out dx,al
end;{port_Write}
Порт принтера имеет диапазонввода/вывода, информацию по каждому адресу диапазона (за что каждый отвечает) можно найти...
а port_Write(888,х) нормально работало в Win95/98...
С уважением...
Dionis (2003-01-27 11:53:00) [3]А каким образом этот DirectPort использовать?
koka (2003-01-27 09:54:00) [4]Проблема в W2000 и выше
Решается - просто
-использованием стороннего компонента DirectPort
Dionis (2003-01-27 09:24:00) [5]888 не работает. У меня порт на 890 сидит! А в 888 записывается только 120 независимо от Data.
int64 (2003-01-27 03:18:00) [6]
asm
MOV DX, 888;
MOV AL,Data
OUT DX,AL
end;
Вообще-то, не только регистры порта, но и сами порты могут разные адреса иметь.
ЗЫ.Только не спрашивай потом, почему не работает под НТ.
Serious Sam (2003-01-26 23:21:00) [7]Использовать сторонний компонент DlPortIo
jack128 (2003-01-26 22:45:00) [8]Учить WinApi, а не асм...
СreateFile(),ReadFile(),WriteFile()