编辑: 迷音桑 | 2019-07-01 |
var B:byte;
begin ASM MOV DX, Port;
IN AL, DX;
MOV B, AL;
END;
Result:=B;
end;
//写端口过程 procedure WritePort(Port:WORD;
ConByte:BYTE);
begin ASM MOV DX, Port;
MOV AL, ConByte;
OUT DX, AL;
END;
end;
//控制 LPT 口D0 数据,使之输出为
1 var B:byte;
CP+ CP- U/D+ U/D- PD+ PD- Pin
2 / Data
0 (Data) Pin
3 / Data
1 (Data) Pin
4 / Data
2 (Data) Pin
5 / Data
3 (Data) Pin
6 / Data
4 (Data) Pin
7 / Data
5 (Data) Pin
10 / NAck (Status) Pin
11 / Busy (Status) Pin
12 / Paper-out (Status) Pin
13 / Select (Status) Pin
25 / Ground CP+ CP- U/D+ U/D- PD+ PD- X 向步 进电机 控制放 大器 Y 向步 进电机 控制放 大器 X+过位 X-过位 Y+过位 Y-过位 PC 机LPT 端―34 ― 机电设备
2004 年第
4 期begin B:=ReadPort($378);
B:=B or $01;
WritePort($378,B);
End;
这样的代码在Win98 里是正常的,但在Win2000/XP 里会报错,因为 Win2000/XP 不能直接 对硬件进行操作,它是虚拟硬件层,NT 核心的 Windows(如NT4.
0、Win
2000、WinXP)的驱动不 是一个 VxD 就能实现的,而需要 WDM 驱动, 这样 就会加大难度.Porttalk 是一个很好的设备驱动,用 它能很方便地实现对底层端口的操作,建立一个 Porttalk.sys 的Delphi 接口函数 InPortB、OutPortB、 OpenPortTalk、ClosePortTalk 等以后,就可以很方 便地调用. //控制 LPT 口D0 数据,使之输出为
1 var B:byte;
Begin if not OpenPortTalk then exit;
B:=InPortB($378);
B:=B or $01;
OutPortB($378,B);
ClosePortTalk;
end;
//读取 LPT 口 ACK 状态数据 var B:byte;
Begin if not OpenPortTalk then exit;
B:=InPor........