port.pas

来自「关于利用DELPHI来进行企业级方案解决的著作的附书源码」· PAS 代码 · 共 82 行

PAS
82
字号
unit port;

interface

function PortReadByte(Addr:Word):Byte;
function PortReadWord(Addr:Word):Word; 
function PortReadWordLS(Addr:Word):Word; 
procedure PortWriteByte(Addr:Word;Value:Byte);
procedure PortWriteWord(Addr:Word;Value:Word); 
procedure PortWriteWordLS(Addr:Word;Value:Word);

implementation
 //PortReadbyte函数
 //参数:portaddress
 //返回:给定port的byte值
function PortReadByte(Addr:Word):Byte;assembler;register;
asm
  MOV DX,AX
  IN AL,DX
end;
  //高速读端口函数:PortReadWord函数
  //参数:port address
  //返回:给定port的word值
  //注释:可能有些卡和计算机不能访问全部的word
function PortReadWord(Addr:Word):Word;assembler;register;
asm
  MOV DX,AX
  IN AX,DX
end;
  //低速读端口函数
  //参数: port address
  //返回:给定port的word值
  //注释:工作时,要调整DELAY
function PortReadWordLS (Addr:Word):Word; assembler; register;
const
  Delay = 150;
 //依靠CPU的速度和卡的速度
asm
  MOV DX,AX
  IN AL,DX //读LSB端口
  MOV ECX,Delay
  @1:
  LOOP  @1//在两次读之间延时
  XCHG AH,AL
  INC DX //port+l
  IN AL,DX//读MSB端口
  XCHG AH,AL// 重新存储字节顺序
end;

//PortWriteByte函数
procedure PortWriteByte(Addr:Word; Value:Byte); assembler; register;
asm
  XCHG AX,DX
  OUT DX,AL
end;

//高速写端口过程
//注释:工作时,可能有些卡和计算机不能访问全部的Word
procedure PortWriteWord(Addr:word; Value:word); assembler; register;
asm
  XCHG AX,DX
  OUT DX,AX
end;

//低速写端口过程
procedure PortWriteWordLS(Addr:word;Value:word); assembler; register;
const
  Delay = 150;//依靠CPU的速度和卡的速度
asm
  XCHG AX,DX
  OUT DX,AL
  MOV ECX,Delay
  @1:
  LOOP @1
  XCHG AH,AL
  INC DX
  OUT DX,AL
end;

end.//单元结束

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?