** 用 C#操作IO端口1-用并口控制发光二极管 **
作者 : ** Levent S. ** 翻译 :Aweay
为什么要写这篇文章,不可否认,用 C# 编写这类程序不是非常合适的 , 相信来 CSDN 的很多朋友都能用其他语言轻松编写这样的程序 , 不过如果有一天你的 .net 的项目里有这样的需求 , 那么这篇文章或许就适合你了 .
什么是端口 ?
端口包含了一系列信号线 , 通过这个端口 CPU 可以同其他外部设备交换数据 , 比如我们经常见到的 Modem, 打印机等.
通常情况下 , 打开的信号是 ”1”, 关闭的信号是 ”0”. 并口在同一时间内可以发送 8 位的数据 , 接收 5 位的数据 . 而串口 RS-232 则只能发送 1 位数据 , 但串口是多向的 , 所以在同一时刻既可以发送也可以接收 .
并口
D0-D7 为数据线 , S0-S7 为状态线 , 但是 S0,S1,S2 是看不见的 ( 从图中你也可以看出 ), 状态线是用来读取数据的 , 但 S0 却不同 , 它是超时标志位 , 其他的状态线从第 10-11-12-13-15 针是用来发送数据的 ( 可以看出是 5 位 ). 那么我们怎么能得到这些数据端口呢 ? 很简单 : 每一个并口都有一个地址 . 在 Windows2000 中 , 你可以在打印机端口 (LPT1) 的属性中看到他们 . 比如 : 我的是 0378-037F, 如果是 10 进制 , 那么就是 888. 同样你也可以看到你的 COM 端口的地址 . 让我以打印机为例解释一下这些针位的意义 :
l S0: 在 EPP( 增强的串口 ) 模式下 , 如果超时的话 , 这位置 1.
l S1: 没用 ( 估计是装饰 ).
l S2: 大多数情况下没有使用 .
l S3: 如果打印机发生了错误则置 0. 它通常被叫做 nError 或者 nFault.
l S4: 如果数据达到 , 则置 1. 我们通常叫做 Select.
l S5: 如果没有打印纸了则置 1. 通常叫做 PaperEnd 或者 PaperEmpty 或者 PError.
l S6: 如果打印机得到了一个字节的数据则此位置 0, 通常叫做 nAck 或者 nAcknowledge.
l S7: 如果打印机处于繁忙的状态则此位置 0, 通常叫做 Busy.
控制线 :
这些线通常用来输出 , 但有时也可以用于输入 . 他们占用 C0-C7( 如图 ), 但是在接口上 C4, C5, C6, C7 是不可见 , 他们占用的端口地址是 0x37A.
l C0: 这一针脚是保留的 . 他发送命令去读取端口上的数据 (D0-D7). 当计算机启动的时候 , 这一位被置 1, 通常叫做 nStrobe.
l C1: 保留 . 通过他发送命令给打印机 , 可以得到下一条打印线 .(LF)
l C2: 重置打印机并且清空数据缓冲区 .(nInitialize)
l C3: 保留 . 置高电平打开数据输入 . 启动计算机时置 0.(nSelectIn)
地线 :
从 G0-G7 的针是接地用的 , 他们一般是用来完善电路的 .
综上所述,在我的应用程序里使用数据线而不是具有保留位的控制线或者状态线作为数据传输。原因显而易见:我们可以发送任何数据到数据线上,比如 00000000 ,这样 8 根针就没有任何电压( 0 伏特);当然也可以发送 11111111 ( 255 ),这样每根针都有+ 5 伏特的电压。但是如果我们使用控制线,他有 C0 , C1 和 C3 是保留,当我们发送 0000000 的时候,他却只能是 0100 ,所以这样数据就不正确了。
信号
|
数据位
|
针脚
|
方向
---|---|---|---
-Strobe
|
¬C0
|
1
|
Output
+Data Bit 0
|
D0
|
2
|
Output
+Data Bit 1
|
D1
|
3
|
Output
+Data Bit 2
|
D2
|
4
|
Output
+Data Bit 3
|
D3
|
5
|
Output
+Data Bit 4
|
D4
|
6
|
Output
+Data Bit 5
|
D5
|
7
|
Output
+Data Bit 6
|
D6
|
8
|
Output
+Data Bit 7
|
D7
|
9
|
Output
-Acknowledge
|
S6
|
10
|
Input
+Busy
|
¬S7
|
11
|
Input
+Paper End
|
S5
|
12
|
Input
+Select In
|
S4
|
13
|
Input
-Auto Feed
|
¬C1
|
14
|
Output
-Error
|
S3
|
15
|
Input
-Initialize
|
C2
|
16
|
Output
-Select
|
¬C3
<TD sty