⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 005.htm

📁 Delphi书籍--Delphi网上教程
💻 HTM
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI专题文档-外设应用-->在DELPHI2.0/3.0中直接操作端口</TITLE>
<META NAME="keywords" CONTENT=" DELPHI专题文档-外设应用 在DELPHI2.0/3.0中直接操作端口">
<META NAME="description" CONTENT=" - DELPHI专题文档-外设应用 - 在DELPHI2.0/3.0中直接操作端口">

<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<a href="index7.html">返回</a>

<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>

<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">在DELPHI2.0/3.0中直接操作端口</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p class="tt2"> Borland Delphi2.0/3.0以其强大的功能及方便快捷的程序设计而为广大程序员所喜爱。但是在用它来编写工业控制程序时,需要对计算机所连接的外部设备进行操作,即直接对I/O地址进行读写操作,这时该软件就显得有些美中不足了。针对这一问题,笔者使用Delphi 
2.0/3.0以内嵌汇编的方式编写了一个模块PORT95. PAS,可方便地实现直接对I/O地址的读写操作,代码简捷且执行速度较快。使用时只要将PORT95.PAS加到工程文件中,并在users中加上Port95,就可以在应用程序中直接对I/O端口进行操作。具体的实现方法及PORT95.PAS的源代码如下:<br> 
<br> 
unit Port95;<br> 
interface<br> 
function PortReadByte(Addr:Word) : Byte;<br> 
function PortReadWord(Addr:Word) : Word;<br> 
function PortReadWordLS(Addr:Word) : Word;<br> 
procedure PortWriteByte(Addr:Word; Value:Byte);<br> 
procedure PortWriteWord(Addr:Word; Value:Word);<br> 
procedure PortWriteWordLS(Addr:Word; Value:Word);<br> 
implementation<br> 
{*<br> 
* Port Read byte function<br> 
*Parameter:port address<br> 
*Return: byte value from given port<br> 
*}<br> 
function PortReadByte(Addr:Word) : Byte; assembler; regi<br> 
ster;<br> 
asm<br> 
MOV DX,AX<br> 
IN AL,DX<br> 
end;<br> 
{*<br> 
* HIGH SPEED Port Read Word function<br> 
* Parameter: port address<br> 
* Return: word value from given port<br> 
* Comment:may problem with some cards and computers that<br> 
can't to access whole word, usualy it works.<br> 
*}<br> 
function PortReadWord(Addr:Word) : Word; assembler; regi<br> 
ster;<br> 
asm<br> 
MOV DX,AX<br> 
IN AX,DX<br> 
end;<br> 
{*<br> 
* LOW SPEED Port Read Word function<br> 
* Parameter: port address<br> 
*Return:word value from given port<br> 
*Comment:work in cases,only to adjust DELAY if need<br> 
*}<br> 
function PortReadWordLS(Addr:Word) : Word; assembler; re<br> 
gister;<br> 
const<br> 
Delay = 150;<br> 
// depending of CPU speed and cards speed<br> 
asm<br> 
MOV DX,AX<br> 
IN AL,DX<br> 
//read LSB port<br> 
MOV ECX,Delay<br> 
@1:<br> 
LOOP @1 //delay between two reads<br> 
XCHG AH,AL<br> 
INC DX<br> 
//port+1<br> 
IN AL,DX //read MSB port<br> 
XCHG AH,AL //restore bytes order<br> 
end;<br> 
{* Port Write byte function*}<br> 
procedure PortWriteByte(Addr:Word; Value:Byte); assemble<br> 
r; register;<br> 
asm<br> 
XCHG AX,DX<br> 
OUT DX,AL<br> 
end;<br> 
{*<br> 
* HIGH SPEED Port Write word procedure<br> 
* Comment:may problem with some cards and computers that<br> 
can't to access whole word, usualy it works.<br> 
*}<br> 
procedure PortWriteWord(Addr:word; Value:word); assemble<br> 
r; register;<br> 
asm<br> 
XCHG AX,DX<br> 
OUT DX,AX<br> 
end;<br> 
{*<br> 
* LOW SPEED Port Write Word procedure<br> 
*}<br> 
procedure PortWriteWordLS(Addr:word; Value:word); assemb<br> 
ler; register;<br> 
const<br> 
Delay = 150;<br> 
// depending of CPU speed and cards speed<br> 
asm<br> 
XCHG AX,DX<br> 
OUT DX,AL<br> 
MOV ECX,Delay<br> 
@1:<br> 
LOOP@1<br> 
XCHG AH,AL<br> 
INC DX<br> 
OUT DX,AL<br> 
end;<br> 
end. //单元结束<br> 
上述PORT95.PAS适用于Delphi 2.0/3.0、Windows 95 操作系统。 </p> 
<hr color="#EE9B73" size="1" width="94%"> 
 
</TD> 
 
</TR> 
</table> 
</BODY></HTML>

⌨️ 快捷键说明

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