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

📄 20000725002.htm

📁 C++Builder教学大全
💻 HTM
字号:
<HTML>

<HEAD>



<TITLE>C++Builder下实现端口读写</TITLE>



<META content="Microsoft FrontPage 4.0" name=GENERATOR>

</HEAD>

<BODY aLink=#FF0000 bgColor=#ffffff leftMargin=0 link=#187800 topMargin=0 

vLink=#990099>



<div align="center">

  <table width="744" border="0" cellspacing="0" cellpadding="0" height="76">

    <tr> 

      <td> 

        <p align=center><font size=5><strong><b><font size="3"><br>

          C++Builder下实现端口读写</font></b></strong></font></p>

        <p align=right> (文/鲁军 张民国 张剑)</p> 

        <p class=sfont><font color=#ffffff>----</font> 本文介绍怎样在C++Builder下实现端口读写,并举出一个具体例子。  

        <h3>__emit__ 函 数 介 绍 </h3> 

        <p class=sfont><font  

            color=#ffffff>----</font>__emit__ 函数一般极少用到,通过使用C++Builder的Help菜单,可得到该函数的联机帮助信息。  

        <p><font color=#ffffff>----</font>__emit__函数用法为: <br> 

          void __emit__(argument, . . .);  

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

        <p><font color=#ffffff>----</font>该函数无返回值。  

        <p><font color=#ffffff>----</font>下面利用该函数定义一个inportb和outportb函数,使之具有BorlandC++中inportb和outportb函数的功能。  

        <pre>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 寄 存 器 中 的 值 送 到 端 口

    }</pre> 

        <p><font color=#ffffff>----</font> 这个outportb函数调用后,把value参数指定的值送到port参数指定的端口。  

        <pre>  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;// 返 回 函 数 值

}</pre> 

        <p><font color=#ffffff>----</font>这个inportb函数调用后,从port参数指定的端口读入并返回一个字节。  

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

        <h3>应 用 举 例 </h3> 

        <p class=sfont><font color=#ffffff>----</font> 本程序的编程环境是Win98操作系统和C++Builder4.0编程语言。  

        <p><font color=#ffffff>----</font>启动C++Builder4.0,激活菜单File/New  

          Application,创建一个工程。在表单上添加两个Button控件。各对象属性设置如下:  

        <pre>    构 件 名 称	 属 性	    属 性 值

    表 单 构 件	Name	    Form1

	         	Caption      读 写 端 口

    命 令 按 钮	Name	    Button1

        		Caption	    写 端 口

    命 令 按 钮	Name	    Button2

		        Caption	    读 端 口</pre> 

        <p><font color=#ffffff>----</font>在单元文件的.h文件添加如下代码:  

        <pre>     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;

         } </pre> 

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

        <p><font color=#ffffff>----</font>分别双击两个Button控件,产生OnClick事件函数。在单元文件的.cpp文件添加如下代码:  

        <pre>   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 的 端 口 读 入 数 据

  } </pre> 

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

      </td> 

    </tr> 

  </table> 

  

</div> 

</BODY></HTML> 

⌨️ 快捷键说明

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