`
isiqi
  • 浏览: 16590405 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

[C++] C++ Builder 下实现端口读写

阅读更多

C++ Builder 下实现端口读写
转载自《计算机世界日报》(文/鲁军张民国张剑)


----本文介绍怎样在C++Builder下实现端口读写,并举出一个具体例子。
__emit__函数介绍
__emit__函数一般极少用到,通过使用C++Builder的Help菜单,可得到该函数的联机帮助信息。
----__emit__函数用法为:
void __emit__(argument,...);

----该函数为C++Builder一个内部函数,
调用的参数为机器语言指令。它在编译的时侯,将机器语言指令直接嵌入目标码
中,不必借助于汇编语言和汇编编译程序。在Borland C++中,它的原型
在头文件中说明,而C++Builder的编译器能自动认识它,不必加入头文件。

----该函数无返回值。

----下面利用该函数定义一个inportb和outportb函数,使之具有Borland C++中inportb和outportb函数的功能。
void outportb(unsigned short int port, unsigned char value)
//port参数为输出端口地址,
//value参数为输出值
{
__emit__(0x8b, 0x95,&port);
//把端口地址送到处理器32位EDX寄存器中
__emit__(0x8a, 0x85,&value);
//把value送到处理器8位AL寄存器中
__emit__(0x66, 0xee);
//把AL寄存器中的值送到端口
}
----这个outportb函数调用后,把value参数指定的值送到port参数指定的端口。
unsigned char inportb(unsigned short int port)
//port参数为输入端口地址
{
unsigned char value;
//指定变量value为无符号字符型
__emit__(0x8b, 0x95,&port);
//把端口地址送到处理器32位EDX寄存器中
__emit__(0x66, 0xec);
//从指定端口中将一数据字节送到8位AL寄存器中
__emit__(0x88, 0x85,&value);
//把AL寄存器中的值赋给value
return value;//返回函数值
}

----这个inportb函数调用后,从port参数指定的端口读入并返回一个字节。

----如果用户想使用__emit__函数,必须熟悉80x86处理器族的机器语言指令。如果调用的参数是错误机器语言指令,则程序将非正常运行,并很容易导致死机。

应用举例
----本程序的编程环境是Win98操作系统和C++Builder 4.0编程语言。
----启动C++Builder4.0,激活菜单File/New Application,创建一个工程。在表单上添加两个Button控件。各对象
属性设置如下: 构件名称属性 属性值
表单构件Name Form1
Caption 读写端口
命令按钮Name Button1
Caption 写端口
命令按钮Name Button2
Caption 读端口

----在单元文件的.h文件添加如下代码:
public:
//声明inportb和outportb
函数为公有成员函数
void __fastcall outportb(unsigned short int port, unsigned char value)
{
__emit__(0x8b,0x95,&port);
__emit__(0x8a,0x85,&value);
__emit__(0x66, 0xee);
}
//------------
unsigned char inportb(unsigned short int port)
{
unsigned char value;
__emit__(0x8b, 0x95,&port);
__emit__(0x66, 0xec);
__emit__(0x88, 0x85,&value);
return value;
}

----也可将inportb和outportb函数的实现
放在单元文件的.cpp文件中。C++Builder支持成员函数的实现放在类体内或
类体外的C++标准。

----分别双击两个Button控件,产生OnClick
事件函数。在单元文件的.cpp文件添加如下代码:
void __fastcall TForm1::Button1Click(TObject*Sender)
{
outportb(0x2c0,0x00);
//向地址为2c0H的端口输出数据
outportb(0x2c1,0x00);
//向地址为2c1H的端口输出数据
}
//-------------
void __fastcall TForm1::Button2Click(TObject*Sender)
{
int i;
i=inportb(0x2c2);
//从地址为2c2H的端口读入数据
}

----上面是一个对I/O端口进行读写操作的简单例子,只要将定义inportb和outportb函数的代码如上所述包含到单元文件中,通过调用可方便地实现I/O端口读写。

分享到:
评论

相关推荐

    C++ builder 使用CAN总线上位机实现信息传输

    本主题聚焦于如何利用C++ Builder这一强大的开发环境来构建一个上位机应用程序,实现CAN总线的数据收发功能。C++ Builder是一款由Embarcadero开发的集成开发环境(IDE),它提供了丰富的库和组件,便于开发者创建高...

    C++ Builder下的socket编程(可实现)

    通过理解以上知识点,你可以开始在C++ Builder环境下构建一个基本的局域网聊天应用。不过实际开发过程中,还需要考虑性能优化、用户界面设计、消息格式化、网络状态检测等多个方面,以提供更完善的用户体验。

    C++Builder 资料库

    28.I/O 端口读写的实现 29.检测鼠标位置 30.令Win32 应用程序跳入系统零层 31.如何取得Memo的行和列 32.使用Sockets 33.Windows95/98下怎样隐藏应用程序不让它出现在CTRL-ALT-DEL对话框中? 34.怎样隐藏应用...

    IO端口读写(BCB).rar_C++builder _bcb_bcb 图像_c builder_io

    在实际项目中,20.htm可能是一个包含详细教程或代码示例的HTML文档,向开发者展示了如何在C++Builder中实现I/O端口读写和图像处理。而www.pudn.com.txt可能是一个指向资源下载网站的链接,其中可能包含了更多关于C++...

    C++ Builder网络开发实例

    2. **C++ Builder的网络组件**:学习如何在C++ Builder IDE中使用TIdTCPClient组件来创建客户端连接,设置服务器地址和端口,以及如何读写数据。 3. **事件驱动编程**:理解C++ Builder中的事件处理机制,如何响应...

    C++ Builder XE7 的端口控件

    在C++ Builder XE7中,端口控件是用于处理串行通信的重要组件,这使得软件可以与外部设备如Arduino、PLC、GPS接收器或其他通过串行接口通讯的硬件进行交互。这些端口控件通常包含了一系列属性、方法和事件,以方便...

    C++Builder连接局域网中MySQL.pdf

    标题中的"C++Builder连接局域网中MySQL"指的是使用C++Builder编程环境,通过ODBC(Open Database Connectivity)驱动程序连接并操作局域网内的MySQL数据库。这个过程涉及到多个步骤,包括环境准备、ODBC配置以及C++...

    c++ builder 2007 使用的串口控件

    TSerialPort是BCB(Borland C++ Builder)中的VCL库的一部分,提供了一种简单的方式来控制和操作串行端口。你可以通过属性、方法和事件来设置串口的各种参数,如波特率、数据位、停止位、校验位等,并实现读写数据的...

    C++builder的60个编程资料

    16. **系统底层操作**:跳入Win32系统的零层,进行低级别操作,如I/O端口读写。 17. **Memo控件操作**:处理Memo控件的行和列,以及内容的获取和设置。 18. **Sockets编程**:用C++Builder实现网络套接字通信。 ...

    在 C++ Builder中利用串行通信控件编程

    首先,C++ Builder提供了TSerialPort组件,这是实现串行通信的核心。这个组件是 Indy 库的一部分,允许开发者直接在界面上拖放并配置串行端口的相关参数。要添加TSerialPort控件,你需要打开你的项目,在工具箱中...

    C++BUILDER RS-232 VCL

    这个文件可能包含了如何在C++Builder中使用VCL组件进行RS-232通信的实例,包括如何初始化通信端口、设置波特率、数据位、校验位、停止位,以及如何发送和接收数据,处理中断等。通过分析和学习"Victor",开发者可以...

    MSCommr控件_C++Builder

    总之,MSCommr控件在C++Builder中提供了强大的串口通信能力,虽然它并非C++Builder原生支持的控件,但通过适当的安装和配置,开发者可以充分利用其功能来实现各种串口通信需求。在实际项目中,应结合具体的应用场景...

    C++ 客户端通讯库(TCP/UDP/SERIALPORT)

    本文将深入探讨C++中实现TCP、UDP以及串行口通信的关键知识点,结合"C++ 客户端通讯库(TCP/UDP/SERIALPORT)"这一主题,以及在C++Builder 10.0环境下调试通过的背景。 首先,TCP(传输控制协议)是一种面向连接的...

    《C++Builder与RS-232串行通信控制》光盘

    本书中,作者详细介绍了C++Builder如何利用VCL(Visual Component Library)框架中的TSerial类或TComPort组件来实现RS-232通信。这些组件简化了底层硬件操作,使得开发者可以方便地读写串行端口、设置通信参数以及...

    NetWork_c++builder串口通讯_服务器_

    在"NetWork_c++builder串口通讯_服务器_"的项目中,我们将利用C++ Builder创建一个服务器程序,该程序将通过串口与单片机(这里假设为服务器)进行通信,而上位机(可能是PC或其他设备)则作为客户端或终端。...

    初学者学习C++ Builder第一个程序(模拟聊天室)v1.01,经典!

    C++ Builder是一款集成开发环境(IDE),主要用于使用C++语言编写Windows应用程序。它以其便捷的可视化组件库和快速的应用程序开发能力而闻名,是初学者和专业开发者学习C++编程的常见工具。在这个"初学者学习C++ ...

    c++ builder串口通讯源码示例程序

    在本示例中,我们关注的是C++ Builder中的串口通信实现,这在工业自动化、数据采集、物联网设备等许多领域都有广泛应用。串口通信是计算机通信的一种基本方式,通过串行接口进行数据传输。 1. **Borland C++**:这...

    可用于RAD EX2 C++ builder的串口控件

    在C++ Builder中,我们可以使用VCL(Visual Component Library)库中的TSerial类或第三方控件来实现串口功能。在“可用于RAD EX2 C++ builder的串口控件”中,我们可能指的是一个专门设计用于该环境的串口组件,比如...

    我的串口通信软件,C++Builder自主开发,简单易用

    C++Builder提供了VCL(Visual Component Library)框架,其中包含了许多用于串口操作的预定义组件,如TSerialPort类,使得开发者无需深入理解底层硬件细节,就能轻松实现串口的打开、关闭、读写等操作。 串口通信的...

    C++Builder3.0 串口通讯

    C++Builder串口通讯程序的源代码,通常会包含创建TSerialPort对象,配置其属性,设置事件处理程序,以及实现读写和错误处理功能的代码。通过阅读和理解这些代码,开发者可以学习到如何在C++Builder中构建自己的串口...

Global site tag (gtag.js) - Google Analytics