在Turbo C++3.0的16位Dos 5上使用inp()
Using inp() on 16Bit Dos 5with Turbo C++ 3.0
首先我想说,我知道这是一个非常过时的问题。这可能就是为什么我在谷歌上找不到任何信息的原因。(或者我只是比我想承认的更不善于搜索!哈哈。(所有的结果都告诉我,inp()
&outp()
在现代系统上是无用的,因为内核处理所有的输入和输出,而不是程序。我在486机器上运行16位Dos,我已经能够完美地将outp()
与我的并行端口一起使用。我喜欢16位Dos,我对在NT时代及更高版本的系统上学习"新的和改进的"方法不感兴趣(至少现在没有(。
清除后——
我的问题是关于inp()
。我有一本旧的硬拷贝手册,上面说您将一个变量,即端口地址,传递给inp()
。在这种情况下,我假设由于我使用0x378
作为outp()
的端口,所以我也会将其用于inp()
。由于我以前没有编程接受外部输入,我不确定我会从一个简单的开关中得到什么类型的值,所以我写了这个快速代码来获取所有新值-
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <dos.h>
int main(void){
clrscr();
int input;
int buff = 0;
restart:
input = inp(0x378);
if(input != buff){
cout<<input;
buff = input;
}
goto restart;
}
我只是用了"buff",这样它就不会一次又一次地吐出"255",而且当输入引脚通电时,可能会掩盖不同的值。不用说,唯一打印出来的值是"255"。
当我编写一个程序将数据输出到并行端口上的"D"引脚时,我会向与所需输出相对应的端口发送一个十六进制代码。。。现在我正在处理输入并行端口上的"S"引脚。我应该在程序中重新输入十六进制代码吗?
此外,我进入BIOS,确保并行端口的模式是输入/输出,而不仅仅是输出。在发现我有两种模式后,我的兴奋很快就被同样糟糕的"255"输出压垮了。
任何能为我指明正确方向的信息都会有所帮助。
谢谢!
这看起来很彻底:http://www.beyondlogic.org/spp/parallel.htm
此外,请确保在BIOS中将并行端口配置为双向模式。其他可能性包括"仅输出"、"EPP"answers"ECP"模式,但"双向"模式最适合您尝试执行的操作。您需要0x37a中的位5来控制端口的方向。此外,您使用的端口的基地址可能不是0x378…内存中有一些位置可以获取LPT1-LPT4的基地址(BIOS设置页也可能会告诉您。(
在这种情况下,我认为由于我使用0x378作为outp((的端口
不要。端口可能是单向的(尽管对于LPT来说,就我的最佳内存而言,情况并非如此(。
在任何情况下,如果不知道端口上连接了什么,就很难知道问题出在哪里。通常,有一个控制寄存器(端口+2(和状态寄存器(端口+1(,您应该使用它们来控制实际控制器并读取其状态。我真的已经好几年没有处理过真实模式的PC编程了,但对于我工作的嵌入式设备,输入/输出端口必须与控制/状态寄存器结合使用,而不是盲目使用。
您首先想完成什么?并行端口不是一个好的双向通道。如果你想在计算机之间(或任意设备到计算机(进行点对点通信,带零调制解调器电缆的串行端口将是一个更好的选择。或者USB。或者,嗯,网络。你知道,以太网类型。
也就是说,假设一个I/O端口(在in((/outp((意义上(对应于一个物理端口(串行/并行/任何(是错误的,错误的,错的。特别是对于并行,有一个数据寄存器和一个控制寄存器,传输包括将字节放在数据寄存器上,并翻转控制寄存器中的一位。不知道收货是怎么回事——查一下规格。对于串行,协议甚至更为复杂。
现代操作系统及其驱动程序/用户模式的发展是有原因的。即使在DOS下,也有一些中断抽象了端口交互的实质。读取BIOS中断。
我假设您的意思是如何通过LPT1输入信号?首先,你应该阅读一个接口教程。。。LPT1接口样本你会发现引脚11与输入相关。引脚11与寄存器0x378+1有关。
关于代码,您必须导入这些库并使用该命令导入
#include<conio.h>
#include<bios.h>
#include<stdio.h>
#include<dos.h>
#define LPT1 0x378
void main (){
...
unsigned int x = inportb(LPT1+1);
...
}
- 如何在c ++中读取.inp文件?
- 将 Tcl 中的命令输出重定向到文件时,文件以 DOS 格式生成
- 检查MS-DOS(C/C )中的键是否关闭
- 如果我输入错误的 dos 命令,shellexecute 会给出正确的结果
- dos.h(静态或动态)是什么样的库
- CreateFile打开在另一个终端会话中创建的MS-DOS设备
- QProcess.execute() 一个 DOS 命令
- 在DOS窗口中的任何位置写入
- 是否可以在DOS 6.22中运行java应用程序
- C/C 的DOS.H中的函数/延迟/nosound
- 编译现有的C++代码以在DOS中运行
- 在 Windows 中自动将 xlsx 文件转换为多个 (MS-DOS) CSV 文件(每张一张一个)
- XCOPY Dos命令从子文件夹复制
- borland如何在C++中捕获DOS命令的结果
- 使用Borland C++执行dos命令并保存输出
- 在嵌入式系统上从DOS切换到Linux
- 哈希重定向的 DOS 输出
- 在C++中使用 Dos 命令时使用 GetLastError
- 如何避免此代码中的 DOS 攻击
- 在Turbo C++3.0的16位Dos 5上使用inp()