Delphi控制并行端口位操作.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Delphi控制并行端口位操作 并行端口简称并口,它有3个端口:数据端口、状态端口、控制端口,常用的并口为LPT1,它的3个端口的地址分别为:378H、379H和37AH。   一、并口读写   在汇编语言中,可以用 in、out 指令操作并口,而在Delphi中并没有相对应的函数、方法可对并口进行读写,幸运的是Delphi可以嵌入汇编程序,通过直接嵌入汇编指令 in、out 可方便地对并口进行读写。我们还可以通过调用 Windows API 函数或第三方提供的DLL、VXD来访问并口,但通过使用嵌入汇编的方法对并口进行读写更方便、快捷。   使用下面的 ReadPort 函数和 WritePort 过程可以读写并口,参数 Port 为要操作的端口地址。 function ReadPort(Port:WORD):BYTE; 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; 二、位操作    要按位来控制并口,可以先读取并口的数据,再进行位操作,最后再重新写入并口,就可以实现对并口的位的控制。    逻辑运算符and对两个要操作的数执行按位的逻辑与运算:即中有1“与”1的结果为1,其它的0“与”1、1“与”0、0“与”0的结果都为0。    逻辑运算符or对两个要操作的数执行按位的逻辑或运算:即只要相“或”的两位有一位是1,结果就为1;否则“或”的结果为0。    使用and运算符可以对指定的位置0,例如:十六进制84H的二进制为它的第三位为1,若要将第三位置为0,且其它位不变,可以使用:$84 and $FB = $80,80H的二进制值    使用or运算符可以对指定的位置1,例如:十六进制84H的第二位为0,若要将第二位置为1,且其它位不变,可以使用:$84 or $02 = $86,86H的二进制值    例子:    1、将数据端口378H的D2位的电位设置为低,即置0: B:=ReadPort($378); B:=B and $FB; WritePort($378,B);    2、将数据端口378H的D2位的电位设置为高,即置1: B:=ReadPort($378); B:=B or $04; WritePort($378,B);    3、判断数据端口378H的D2位的电位高低: B:=ReadPort($378); if ((B and $04)=$04) then //电位为高时的代码 else //电位为低时的代码 或: B:=ReadPort($378); if ((B or $FB)=$FF) then //电位为高时的代码 else //电位为低时的代码 三、具体实现    下面的例子是控制并口的数据端口378H的各个位的电位高低。数据端口的8个位:D0~D7分别对应并行接口的2~9脚,关于并行接口其它的引脚的说明就查看相关资料,这里就不多说了。    首先运行 Delphi,新建一个工程,按一下F12在Form1的单元文件Unit1中加入读写端口的代码: function ReadPort(Port:WORD):BYTE; procedure WritePort(Port:WORD;ConByte:BYTE); function ReadPort(Port:WORD):BYTE; 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;    添加8个 CheckBox 组件,修改它们的 Caption(标题)属性分别为 D0 到 D7 ,将它们按右到左进行排列好。    双击 CheckBox1,在CheckBox1组件的OnClick(单击)事件中加入以下的程序代码: procedure TForm1

文档评论(0)

海川电子书城 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档