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

📄 delphi_derect_io.htm

📁 对于学习很有帮助
💻 HTM
字号:
<html><head><title>在DELPHI2.0/3.0中直接操作端口</title><style><--! A{text-decoration:none}--></style><meta http-equiv=Content-Type content=text/html; charset=gb2312><meta name=GENERATOR content=Microsoft FrontPage 3.0><meta name=Microsoft Border content=none></head><body style=font-family: 宋体, serif; font-size: 9pt bgcolor=#FFFFFF link=#000080 vlink=#000080 alink=#000080><center><span style=font-family: 宋体; font-size: 9pt><font color=#000000><b><br>在DELPHI2.0/3.0中直接操作端口</b></font></span></center><center><span style=font-family: 宋体; font-size: 9pt>版主:西安 &nbsp;&nbsp;&nbsp;&nbsp; <a href=mailto:delphifan@990.net>梁&nbsp; 明</a></span></center><hr><ul> <li><p align=left><span style=font-family: 宋体; font-size: 9pt><font color=#000000><b>在DELPHI2.0/3.0中直接操作端口</b></font></span></p> <p><span style=font-family: 宋体; font-size: 9pt><br> Borland Delphi2.0/3.0以其强大的功能及方便快捷的程序设计<br> 而为广大程序员所喜爱。但是在用它来编写工业控制程序时,需要对<br> 计算机所连接的外部设备进行操作,即直接对I/O地址进行读写操作,<br> 这时该软件就显得有些美中不足了。<br> 针对这一问题,笔者使用Delphi 2.0/3.0以内嵌汇编的方式编写<br> 了一个模块PORT95. PAS,可方便地实现直接对I/O地址的读写操作,代<br> 码简捷且执行速度较快。<br> 使用时只要将PORT95.PAS加到工程文件中,并在users中加上Port<br> 95,就可以在应用程序中直接对I/O端口进行操作。<br> 具体的实现方法及PORT95.PAS的源代码如下:<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 操作系统。 <br> <br> 作者:宋永柱</span></p> </li></ul><p><span style=font-family: 宋体; font-size: 9pt>  </span><ul> <li><span style=font-family: 宋体; font-size: 9pt>版主:梁明<br> 日期:99-07-28<br> E-mail:<a href=mailto:delphifan@990.net>delphifan@990.net</a></span></li></ul><hr></body></html>

⌨️ 快捷键说明

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