Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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()


Наверх

Титульная страница Поиск, карта сайта Написать письмо