《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > PC并行端口作為數(shù)字I/O口的應(yīng)用
PC并行端口作為數(shù)字I/O口的應(yīng)用
中電網(wǎng)
摘要: 本文介紹PC并行端口在單片機(jī)等控制系統(tǒng)中作為數(shù)字I/O口的應(yīng)用。在控制系統(tǒng)中,有許多的數(shù)字開(kāi)關(guān)量、數(shù)字控制信號(hào)、數(shù)字信號(hào)等,都可以通過(guò)計(jì)算機(jī)并行端口進(jìn)行采集;并將采集的數(shù)字信號(hào)經(jīng)計(jì)算機(jī)處理后形成數(shù)字控制信號(hào),再?gòu)挠?jì)算機(jī)的并行端口輸出進(jìn)行各種自動(dòng)控制。
關(guān)鍵詞: PC 并行端口 I/O口
Abstract:
Key words :

一、PC并行端口介紹

目前,計(jì)算機(jī)中的并行接口主要作為打印機(jī)端口,接口使用的不再是36針接頭而是25針D形接頭。所謂“并行”,是指8位數(shù)據(jù)同時(shí)通過(guò)并行線(xiàn)進(jìn)行傳送,這樣數(shù)據(jù)傳送速度大大提高。

現(xiàn)在常見(jiàn)的并口有五種:SPP型、PS/2型、EPP型、ECP型和多模式接口,大多數(shù)PC機(jī)配有SPP并口:

SPP標(biāo)準(zhǔn)并行口有4位、8位、半8位:4位口一次只能輸入4位數(shù)據(jù),但可以輸出8位數(shù)據(jù);8位口可以一次輸入和輸出8位數(shù)據(jù);半8位也可以。

PS/2簡(jiǎn)單雙向并行口:它引入雙向數(shù)據(jù)端口,這種雙向數(shù)據(jù)端口容許外設(shè)每次向PC機(jī)發(fā)送8位信息。PS/2型并口是指所有具有雙向數(shù)據(jù)端口,但不支持后面介紹的EPP或ECP模式的并行接口。

EPP增強(qiáng)并行口:允許8位雙向數(shù)據(jù)傳送,它可以在大約1ms的時(shí)間內(nèi)完成包括握手聯(lián)絡(luò)在內(nèi)的一個(gè)字節(jié)的數(shù)據(jù)傳送;而SPP或SP/2接口則需要大約4ms才能完成同樣的工作。因此可以連接各種非打印機(jī)設(shè)備,如掃描儀、LAN適配器、磁盤(pán)驅(qū)動(dòng)器和CDROM 驅(qū)動(dòng)器等。

ECP口擴(kuò)展并行口:是雙向數(shù)據(jù)端口,并能以ISA總線(xiàn)速度傳送數(shù)據(jù)。ECP有緩沖區(qū),支持命令周期、數(shù)據(jù)周期和多個(gè)邏輯設(shè)備尋址,在多任務(wù)環(huán)境下可以使用DMA(直接存儲(chǔ)器訪(fǎng)問(wèn))。

多模式接口:許多新型接口支持多種模式,可以工作在以上提到的部分或全部模式下,用戶(hù)可以使用配置選擇,使用上述各種接口形式,或只使用其中一些而禁止其它。

二、PC標(biāo)準(zhǔn)配備并行口介紹

本文主要介紹計(jì)算機(jī)的標(biāo)準(zhǔn)配備并行端口即25針的母接頭端口的應(yīng)用,在此基礎(chǔ)上可以運(yùn)用相同的原理使用其它模式的并行端口。并行端口共有25支腳,但不是每支腳均被使用到。這些腳被區(qū)分為3種主要的功能,分別是用于數(shù)據(jù)的傳送、檢查打印機(jī)的狀態(tài)及控制打印機(jī),其接口如下所示:

 

在PC機(jī)中,標(biāo)準(zhǔn)并行口使用3個(gè)8位的端口寄存器,PC就是通過(guò)對(duì)這些寄存器,也就是所說(shuō)的數(shù)據(jù)、狀態(tài)、控制寄存器的讀寫(xiě)訪(fǎng)問(wèn)并口的信號(hào)的。本文中使用一些通用的叫法,8個(gè)數(shù)據(jù)位分別為D0~D7,5個(gè)狀態(tài)位為S3~S7,4個(gè)控制為C0~C3。其中字母表示了端口寄存器,數(shù)字則表示該信號(hào)在寄存器中的位。

數(shù)據(jù)寄存器

數(shù)據(jù)端口或稱(chēng)數(shù)據(jù)寄存器(D0~D7)保存了寫(xiě)入數(shù)據(jù)輸出端口的一字節(jié)信息。數(shù)據(jù)端口可以寫(xiě)入數(shù)據(jù),也可以讀出數(shù)據(jù)(即可擦寫(xiě));寫(xiě)進(jìn)去的當(dāng)然是我們希望從數(shù)據(jù)端口引腳輸出的數(shù)據(jù),不過(guò)讀進(jìn)來(lái)的也只是我們上次寫(xiě)進(jìn)去的數(shù)據(jù),或是原來(lái)保留在里面的數(shù)據(jù),并不是從端口引腳輸入PC的數(shù)據(jù)。數(shù)據(jù)端口引腳是PIN2~PIN9,其定義如下:

數(shù)據(jù)寄存器(即數(shù)據(jù)輸出端口) 可擦寫(xiě)、基地址

bit引腳:D-sub信號(hào)名信號(hào)源是否在連接器處倒相

0Pin2D0PC否

1Pin3D1PC否

2Pin4D2PC否

3Pin5D3PC否

4Pin6D4PC否

5Pin7D5PC否

6Pin8D6PC否

7Pin9D7PC否

如果我們把這8支腳當(dāng)成一般的數(shù)字輸出的腳位看待,上述8支腳就相當(dāng)于是8個(gè)數(shù)字輸出的位置一般,我們就可以把它們當(dāng)成是8個(gè)可以自由控制的輸出點(diǎn)。當(dāng)我們通過(guò)數(shù)據(jù)端口傳送數(shù)據(jù)時(shí),就是改變這8支腳的電平狀態(tài);而接受方也按照相同的編碼原則解釋?zhuān)涂梢垣@得傳送的數(shù)據(jù)。

狀態(tài)寄存器

狀態(tài)端口或稱(chēng)狀態(tài)寄存器保存的是5個(gè)輸入(S3~S7)的邏輯狀態(tài)。S0~S2位不出現(xiàn)在并口連接器中。除了S0以外,狀態(tài)寄存器是只讀的,讀出數(shù)據(jù)信息是狀態(tài)端口引腳上的邏輯狀態(tài)。S0是支持EPP傳輸并口的超時(shí)標(biāo)志信息,可以用軟件方法清零。在許多并口中,狀態(tài)輸入接有上拉電阻。狀態(tài)端口引腳是Pin10~Pin13、Pin15,其定義如下:

狀態(tài)寄存器(即狀態(tài)輸入端口) 基地址+1

bit引腳:D-sub信號(hào)名信號(hào)源是否在連接器處倒相

0Time-Out

1未使用

2未使用

3Pin15nError(nFault)外設(shè)否

4Pin13Select外設(shè)否

5Pin12PaperEnd外設(shè)否

6Pin10nAck外設(shè)否

7Pin11Busy外設(shè)是

上表中所謂的(基地址+1)指的是:如果我們的LPT地址是378H,在加上1就是379H;這個(gè)地址是專(zhuān)門(mén)用來(lái)傳遞打印機(jī)的狀態(tài)的。和數(shù)據(jù)地址比較起來(lái)不一樣的是,這里地址并非在連接器的腳位上均有對(duì)應(yīng)點(diǎn)。在這個(gè)狀態(tài)的顯示上只有5個(gè)腳位有對(duì)應(yīng),位S0~S2是沒(méi)有的--最起碼是無(wú)法讓計(jì)算機(jī)有對(duì)應(yīng)的值可讀取。

如果打印機(jī)接到并口上,那么打印機(jī)的狀態(tài)將會(huì)通過(guò)這幾支腳傳送到PC,程序只要去基地址+1的位置讀取數(shù)值即可知道現(xiàn)在打印機(jī)所處的狀態(tài)。由于這幾支腳可以讓打印機(jī)傳送狀態(tài)給PC,那么我們可以把這幾支腳位拿來(lái)當(dāng)作數(shù)字輸入的通道;我們可以讓這幾支腳位的狀態(tài)發(fā)生電位的改變,而利用程序去讀取這些腳位的數(shù)值,即可實(shí)現(xiàn)數(shù)據(jù)的輸入。

控制寄存器

控制端口或稱(chēng)控制寄存器保存了C0~C3的4位的控制信息。C4~C7不出現(xiàn)在并口連接器中。一般來(lái)說(shuō),這些位被用來(lái)輸出,然而大多數(shù)SPP中,控制位為集電極開(kāi)路/漏極開(kāi)路模式,也就是說(shuō),它們同樣可以用作輸入。要從控制位上讀取外部邏輯信號(hào),首先將向相應(yīng)的輸出寫(xiě)入“1”,然后讀取控制寄存器的值即可。但是,為了提高交換速度,大多數(shù)支持EPP和ECP接口中,控制位工作在不能用作輸入的推拉模式下。在一些多模式接口中,控制位采用的是改進(jìn)型的推拉模式,可以用作輸入。控制端口引腳是Pin1、Pin14、Pin16和Pin17,其定義如下:

控制寄存器(即控制輸出端口) 基地址+2

bit引腳:D-sub信號(hào)名信號(hào)源是否在連接器處倒相

0Pin1nStrobePC是

1Pin14nAutoLFPC是

2Pin16nInitPC否

3Pin17nSelectInPC是

4IRQ

5未使用

6未使用

7未使用

上表中所謂的(基地址+2)指的是:如果我們的LPT地址是378H,在加上1就是37AH;這個(gè)地址是專(zhuān)門(mén)用來(lái)控制打印機(jī)動(dòng)作的。

如同數(shù)據(jù)的送出,我們的程序只要將我們的信息送往(基地址+2)的地址去,就可以實(shí)現(xiàn)數(shù)據(jù)輸出,接受端在相應(yīng)引腳就可以接受到相應(yīng)的邏輯電位狀態(tài)。當(dāng)控制端口的信號(hào)源為高電平時(shí),這些引腳可以作為輸入引腳,如同狀態(tài)端口引腳一樣。

在上述定義表格中,所謂“是否在連接器處倒相”是指并口硬件將連接器與相應(yīng)寄存器位之間的4個(gè)信號(hào)進(jìn)行了倒相處理。具體說(shuō)來(lái),S7、C0、C1、C3信號(hào)的邏輯狀態(tài)在連接器處是與相應(yīng)寄存器位反相的。當(dāng)你對(duì)這些位進(jìn)行寫(xiě)操作時(shí),必須牢記寫(xiě)入的值應(yīng)該與你想在連接器處設(shè)置的值相反;當(dāng)要對(duì)這些位進(jìn)行讀操作時(shí),也必須記住所讀取的值與連接器處的值相反。

計(jì)算機(jī)的標(biāo)準(zhǔn)配備并行端口除以上介紹的數(shù)據(jù)端口引腳Pin2~Pin9、狀態(tài)端口引腳Pin15、Pin10~Pin13、控制端口引腳Pin1、Pin14、pin16、Pin17外,連接器上的 其它引腳Pin18~Pin25是歸地引腳GND。

三、PC并行口數(shù)字輸入/輸出

所謂的數(shù)字輸出就是在程序要求某一個(gè)設(shè)備的某一開(kāi)關(guān)點(diǎn)開(kāi)或關(guān),產(chǎn)生高電位或低電位。從計(jì)算機(jī)的觀點(diǎn)來(lái)說(shuō),低電位就是0.7V以下(邏輯0),而高電位是2.1V以上(邏輯1),若電位處在0.7~2.1V時(shí),電位的邏輯狀態(tài)是不確定的。想要通過(guò)計(jì)算機(jī)去控制外部設(shè)備,最簡(jiǎn)單的方法就是控制數(shù)字輸出。

所謂的數(shù)字輸入,也就是外界的狀況被計(jì)算機(jī)用0或1的數(shù)值予以記錄下來(lái)而儲(chǔ)存,此0與1就代表了外界某一個(gè)設(shè)備的某一開(kāi)關(guān)點(diǎn)開(kāi)或關(guān)的兩種情形。

PC并行口即可以作數(shù)字輸出口,也可以作數(shù)字輸入口。其中的數(shù)據(jù)端口、控制端口都可以作為數(shù)字輸出端口,數(shù)據(jù)端口共8位,控制端口共4位,兩個(gè)端口可以組成1~12位的任意數(shù)字輸出端口;其中的狀態(tài)端口、控制端口都可以作為數(shù)字輸入端口,狀態(tài)端口共5位,控制端口共4位,兩個(gè)端口可以組成1~9位的任意數(shù)字輸入端口。本文給出了并行端口3種寄存器的讀寫(xiě)方法,如下圖所示:

 

四、PC并行口數(shù)字輸入/輸出的VC實(shí)現(xiàn)

由于Windows對(duì)系統(tǒng)底層操作采取了屏蔽的策略,因而對(duì)用戶(hù)而言,系統(tǒng)變得更為安全,但這卻給眾多的硬件或者系統(tǒng)軟件開(kāi)發(fā)人員帶來(lái)了不小的困難,因?yàn)橹灰獞?yīng)用中涉及到底層的操作,開(kāi)發(fā)人員就不得不深入到Windows的內(nèi)核去編寫(xiě)屬于系統(tǒng)級(jí)的設(shè)備驅(qū)動(dòng)程序。對(duì)并行口的讀寫(xiě)操作就是如此,由于Windows對(duì)系統(tǒng)的保護(hù),絕對(duì)不允許任何的直接I/O動(dòng)作發(fā)生,所以必須帶上*.dll、*.sys或*.vxd文件,這些文件用來(lái)讓操作系統(tǒng)知道有一個(gè)特定的I/O可能會(huì)被調(diào)用。系統(tǒng)開(kāi)機(jī)后,這些文件中的內(nèi)容就會(huì)加載到內(nèi)存中,一旦有對(duì)應(yīng)的動(dòng)作發(fā)生,就會(huì)引發(fā)I/O的實(shí)際動(dòng)作。

本文只是介紹并行口作為數(shù)字I/O口的使用,不在于介紹并行I/O口驅(qū)動(dòng)的編寫(xiě)。故本文中直接使用由 Yariv Kaplan 編寫(xiě)的 WinIo 庫(kù),它有如下特點(diǎn):WinIo 庫(kù)通過(guò)使用內(nèi)核模式下設(shè)備驅(qū)動(dòng)程序和其它一些底層編程技巧繞過(guò) Windows 安全保護(hù)機(jī)制,允許32位 Windows 程序直接對(duì) I/O 口進(jìn)行操作。

支持Windows 9x、Windows NT、Windows2000、WindowsXP環(huán)境;在Windows NT/2000/XP下,允許非 Administrator 用戶(hù)應(yīng)用 WinIo 應(yīng)用程序;不支持中斷。

注意事項(xiàng):使用這個(gè)類(lèi)代碼時(shí)請(qǐng)確保不要與其它使用常規(guī) Win32 調(diào)用操作并行端口的程序發(fā)生沖突。

WinIo庫(kù)在VC應(yīng)用程序中的使用(WinIo庫(kù)下載)

為了在VC中能正常使用WinIo庫(kù),必須按以下步驟進(jìn)行配置:

(1):將WinIo.dll、WinIo.sys、WINIO.VXD三個(gè)文件放在程序可執(zhí)行文件所在目錄下;

(2):將WinIo.lib添加到工程中,WinIo.lib及winio.h文件必須放在工程目錄下;

(3):在StdAfx.h頭文件中加入#include "winio.h"語(yǔ)句;

(4):調(diào)用InitializeWinIo函數(shù)初始化WinIo驅(qū)動(dòng)庫(kù);

(5):調(diào)用讀寫(xiě)IO口的GetPortVal或SetPortVal函數(shù);

(6):調(diào)用ShutdownWinIo函數(shù);

在非管理員權(quán)限下運(yùn)行,必須首先完成以下步驟:

(1):將WinIo.dll、WinIo.sys、WINIO.VXD三個(gè)文件放在任一WinIo應(yīng)用程序可執(zhí)行文件所在目錄下;

(2):以管理員或其它具有管理員權(quán)限的用戶(hù)身份登陸;

(3):調(diào)用InstallWinIoDriver函數(shù),第一個(gè)參數(shù)設(shè)置為WinIo.sys文件所在目錄路徑,第二個(gè)參數(shù)設(shè)置為false;

(4):重新啟動(dòng)系統(tǒng);

(5):以普通用戶(hù)身份登錄,現(xiàn)在可以調(diào)用WinIo庫(kù)函數(shù);

(6):當(dāng)不再需要WinIo庫(kù)時(shí),可以再次以管理員身份或其它具有管理員權(quán)限的用戶(hù)身份登陸系統(tǒng),調(diào)用RemoveWinIoDriver卸載該庫(kù);

WinIo庫(kù)中幾個(gè)函數(shù)說(shuō)明:

(1):初始化與終止

bool _stdcall InitializeWinIo();

void _stdcall ShutdownWinIo();

(2):安裝與卸載

bool _stdcall InstallWinIoDriver(PSTR pszWinIoDriverPath, bool IsDemandLoaded = false);

bool _stdcall RemoveWinIoDriver();

(3):讀寫(xiě)I/O口

bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);

bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);

GetPortVal函數(shù)從指定端口讀取一個(gè)BYTE/WORD/DWORD類(lèi)型的值;

wPortAddr是指定一個(gè)端口地址值;

pdwPortVal為指向一雙字節(jié)型變量的指針,該變量存儲(chǔ)從wPortAddr端口讀取的值;

bSize指定讀取字節(jié)數(shù),值可以為1,2或4。

SetPortVal函數(shù)向指定端口寫(xiě)入一個(gè)BYTE/WORD/DWORD類(lèi)型的值;

除dwPortVal為輸入?yún)?shù),表示待寫(xiě)入外,其余個(gè)變量含義與GetPortVal相似。

PC并行口數(shù)字輸出的VC實(shí)現(xiàn)(示例工程下載)

為了測(cè)試并行口的數(shù)字輸出,可以準(zhǔn)備12支LED發(fā)光二極管,將LED的陽(yáng)極分別與數(shù)據(jù)端口引腳Pin2~Pin9和控制端口引腳Pin1、Pin14、Pin16、Pin17相連接;將LED的陰極連接在一起與并行口的歸地引腳GND相連即可。在實(shí)際控制應(yīng)用中不能這樣連接,因?yàn)閿?shù)據(jù)端口引腳、控制端口引腳輸出的電流非常小,只有10mA左右,必須添加 其它硬件電路。

(1):數(shù)據(jù)端口數(shù)字輸出的VC實(shí)現(xiàn)

//獲得數(shù)據(jù)端口地址

WORD m_nport=(WORD)0x378;

//獲得要寫(xiě)入數(shù)據(jù)端口的值WriteValue(數(shù)據(jù)范圍為0~255)

DWORD m_nValue=(DWORD)WriteValue;

//調(diào)用WinIo庫(kù)函數(shù)SetPortVal寫(xiě)端口值

SetPortVal(m_nport, m_nValue, 1);//write a BYTE value to an I/O port

(2):控制端口數(shù)字輸出的VC實(shí)現(xiàn)

//獲得控制端口地址

WORD m_nport=(WORD)0x37A;

//獲得控制端口的值,保持高位值不變,將要輸出的值從低4位輸出,且使連接器上的電位狀態(tài)與想輸出的值一致

DWORD temp_dwPortVal;

unsigned int temp_aa;

GetPortVal(m_nport, &temp_dwPortVal, 1); //reads a BYTE value from an I/O port

temp_aa=(unsigned int)temp_dwPortVal;

temp_aa=temp_aa&0x0F0; //取低8位值,將低4位置為0;高4位不變;

temp_aa=temp_aa^0x0B; //將低4位中C0、C1、C3置為1,C2置為0;高4位不變;

//獲得要寫(xiě)入控制端口的值WriteValue(數(shù)據(jù)范圍為0~15)

unsigned int WriValue;

WriValue=WriteValue&0x0F; //取低4位;

temp_aa=temp_aa^WriValue; //將寫(xiě)入值的低4位中的C0、C1、C3取反,C2位不變,高4位保持端口值不變

SetPortVal(m_nport, (DWORD)temp_aa, 1); //寫(xiě)出的值中,高4位保持端口原來(lái)的值不變,

//低4位是寫(xiě)入什么電平,連接器上既是什么電平

(3):數(shù)據(jù)端口及控制端口組合成12位數(shù)字輸出的VC實(shí)現(xiàn)

//獲得端口地址

WORD m_nportData=(WORD)0x378;

WORD m_nportControl=(WORD)0x37A;

//獲得要寫(xiě)入端口的值WriteValue(數(shù)據(jù)范圍為0~4095)

DWORD m_nValue=(DWORD)(WriteValue&0x0FF);//取低8位值

SetPortVal(m_nportData, m_nValue, 1);//write a BYTE value to Data port

DWORD temp_dwPortVal;

unsigned int temp_aa;

GetPortVal(m_nportControl, &temp_dwPortVal, 1); //reads a BYTE value from an I/O port

temp_aa=(unsigned int)temp_dwPortVal;

temp_aa=temp_aa&0x0F0; //取低8位值,將低4位置為0;高4位不變;

temp_aa=temp_aa^0x0B; //將低4位中C0、C1、C3置為1,C2置為0;高4位不變;

unsigned int WriValue;

WriValue=WriValue>>8;//取高4位值

temp_aa=temp_aa^WriValue; //將寫(xiě)入值的低4位中的C0、C1、C3取反,C2位不變,高4位保持端口值不變

SetPortVal(m_nportControl, (DWORD)temp_aa, 1); //寫(xiě)出的值中,高4位保持端口原來(lái)的值不變,

//低4位是寫(xiě)入什么電平,連接器上既是什么電平

PC并行口數(shù)字輸入的VC實(shí)現(xiàn)

(1):狀態(tài)端口數(shù)字輸入的VC實(shí)現(xiàn)

為了測(cè)試并行口狀態(tài)端口的數(shù)字輸入,可以將數(shù)據(jù)端口引腳Pin2~Pin6連接到狀態(tài)端口引腳Pin15、Pin13、Pin12、Pin10、Pin11上。引腳接好后,先從數(shù)據(jù)端口輸出數(shù)據(jù),在從狀態(tài)端口和控制端口讀出數(shù)據(jù),讀出的數(shù)據(jù)應(yīng)與寫(xiě)入的數(shù)據(jù)一致,數(shù)據(jù)范圍為0~31。

DWORD dwPortVal;

unsigned int ValueGet=0;

//獲得端口地址

WORD m_nport=(WORD)0x379;

//獲得端口數(shù)據(jù)

GetPortVal(m_nport, &dwPortVal, 1);

ValueGet=(unsigned int)dwPortVal;

ValueGet=ValueGet^0x80; //保持得到的State值與連接器處的值一直;

ValueGet=ValueGet&0xF8; //去掉S0 ~S2位;

ValueGet=ValueGet>>3; //右移3位,將S7~S3變?yōu)榈?位

(2):控制端口數(shù)字輸入的VC實(shí)現(xiàn)

為了測(cè)試并行口控制端口的數(shù)字輸入,可以將數(shù)據(jù)端口引腳Pin2~Pin5連接到控制端口引腳Pin1、Pin14、Pin16、Pin17上 。引腳接好后,先從數(shù)據(jù)端口輸出數(shù)據(jù),在從狀態(tài)端口和控制端口讀出數(shù)據(jù),讀出的數(shù)據(jù)應(yīng)與寫(xiě)入的數(shù)據(jù)一致,數(shù)據(jù)范圍為0~15。

//獲得端口地址

WORD m_nport=(WORD)0x37A;

//===== 將C0~C3位置1,即使連接器上為高電平 ,使控制端口為輸入端口=====

DWORD temp_dwPortVal;

unsigned int temp_aa;

GetPortVal(m_nport, &temp_dwPortVal, 1); //獲取端口的當(dāng)前值

temp_aa=(unsigned int)temp_dwPortVal;

temp_aa=temp_aa&0x0F0; //取低8位值,將低4位置為0;高4位不變;

temp_aa=temp_aa^0x4; //將低4位中C0、C1、C3置為0,C2置為1;高4位不變;

SetPortVal(m_nport, (DWORD)temp_aa, 1); //寫(xiě)出的值中,高4位保持端口原來(lái)的值不變,

//低4位是寫(xiě)高電平,即使連接器上是高電平

//=============================================================

unsigned int ValueGet=0;

DWORD dwPortVal;

//獲得端口數(shù)據(jù)

GetPortVal(m_nport, &dwPortVal, 1);

ValueGet=(unsigned int)dwPortVal;

ValueGet=ValueGet^0x0B; //保持C0,C1,C3位的值與連接器處的值一至;

ValueGet=ValueGet&0x0F; //去掉高4位值

(3):控制端口及狀態(tài)端口組合成9位數(shù)字輸入的VC實(shí)現(xiàn)

為了測(cè)試并行口的數(shù)字輸入,可以將數(shù)據(jù)端口引腳Pin2~Pin9連接到控制端口引腳Pin1、Pin14、Pin16、Pin17和狀態(tài)端口引腳Pin15、Pin13、Pin12、Pin10上,Pin11引腳連接到歸地引腳GND或懸空。引腳接好后,先從數(shù)據(jù)端口輸出數(shù)據(jù),在從狀態(tài)端口和控制端口讀出數(shù)據(jù),讀出的數(shù)據(jù)應(yīng)與寫(xiě)入的數(shù)據(jù)一致,當(dāng)Pin11引腳連接到歸地引腳GND時(shí),數(shù)據(jù)范圍為0~255;當(dāng)Pin11引腳懸空時(shí),數(shù)據(jù)范圍為256~511。

unsigned int ValueGet=0;

//獲得端口地址

WORD m_nportState=(WORD)0x379;

WORD m_nportControl=(WORD)0x37A;

//Read State Port

DWORD dwPortVal;

unsigned int ValueState=0;

GetPortVal(m_nportState, &dwPortVal, 1);

ValueState=dwPortVal;

ValueState=ValueState^0x80; //保持得到的State值與連接器處的值一直;

ValueState=ValueState&0xF8; //去掉S0 ~S2位;

ValueState=ValueState<<1; //左移1位,將S7~S3變?yōu)楦?位

//Read control Port

//========== 將C0~C3位置1,即使連接器上是高電平 ,使控制端口為輸入端口=====

GetPortVal(m_nportControl, &dwPortVal, 1); //獲取端口的當(dāng)前值

ValueGet=(unsigned int)dwPortVal;

ValueGet=ValueGet&0x0F0; //取低8位值,將低4位置為0;高4位不變;

ValueGet=ValueGet^0x4; //將低4位中C0、C1、C3置為0,C2置為1;高4位不變;

SetPortVal(m_nportControl, (DWORD)ValueGet, 1); //寫(xiě)出的值中,高4位保持端口原來(lái)的值不變,

//低4位是寫(xiě)高電平,即使連接器上是高電平

//=============================================================

unsigned int ValueControl=0;

GetPortVal(m_nportControl, &dwPortVal, 1);

ValueControl=(unsigned int)dwPortVal;

ValueControl=ValueControl^0x0B; //保持C0,C1,C3位的值與連接器處的值一至;

ValueControl=ValueControl&0x0F; //去掉高4位值

//get 9bit value

ValueGet=ValueState^ValueControl;

五、結(jié)束

本文只是介紹PC并行端口作為數(shù)字I/O口的應(yīng)用方法,在實(shí)際運(yùn)用到控制系統(tǒng)中進(jìn)行數(shù)字信號(hào)通信時(shí),必須注意對(duì)并行端口信號(hào)進(jìn)行其它的處理,以提高端口信號(hào)的抗干擾能力、穩(wěn)定性及可靠性等。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
主站蜘蛛池模板: 脱岳裙子从后面挺进去在线观看 | 亚洲精品少妇一区二区 | 亚洲综合精品成人 | 美女扣逼喷水视频 | 久久一道本| 免费又黄又爽1000禁片 | 少妇精品一区二区三区在线观看 | 色婷婷久久综合 | 欧美专区综合 | 久久久久久高潮国产精品视 | 99久久国产露脸精品吞精 | 国产亚洲精品久久久久久网站 | 欧美日韩亚洲一区二区 | 国产毛片基地 | 欧美在线视频免费观看 | 色翁荡熄又大又硬又粗又视频图片 | 免费午夜爽爽爽www视频十八禁 | 国产肉体xxx裸体312大胆 | 国产97在线 | 亚洲 | 久久国产精品久久久久久久久久 | 在线播放免费人成毛片乱码 | 久草在线视频在线 | 精品国产免费一区二区三区香蕉 | 中文字幕亚洲无线码在线一区 | hd最新国产人妖ts视频 | 日韩欧美视频在线 | 超黄网站在线观看 | 91爱爱影院| 中国女人精69xxx25 | 国产精品视频全国免费观看 | 久久99热这里只频精品6学生 | 国产在线精 | 一卡二卡国产 | 免费无码一区二区三区蜜桃 | 国产精品永久久久久久久www | 日韩美一区二区三区 | 放荡的少妇2欧美版 | 国产日韩亚洲欧美 | 亚洲 欧美 中文 在线 视频 | 中文字幕日产乱码中文字幕 | 国产真实乱 | 免费人成视频网站在线观看18 | 久久久91 | 国产1区2区在线观看 | 亚洲图片欧美日韩 | 亚洲黄色片网站 | 久久久久久毛片 | 久久成人a| 久久国产午夜精品理论片最新版本 | 动漫美女露胸网站 | 天天操天天摸天天干 | 亚洲卡一卡二卡三 | 高清国产视频 | 成在线人免费视频 | 国产一级片在线播放 | 亚洲综合色婷婷 | 欧美男人的天堂 | 国产啊v在线观看 | 尼姑福利影院 | 久久疯狂做爰流白浆xx | 国产一级伦理片 | 野花国产精品入口 | 国产精品一区二区 尿失禁 又污又爽又黄的网站 | 草裙社区精品视频播放 | 日韩欧美精品在线观看 | 国产精品十八禁在线观看 | 亚洲精品国产精品国自产网站按摩 | 男操女视频网站 | 成人黄色毛片 | 九色真实伦实例 | 国产精品点击进入在线影院高清 | 国产高清一区二区三区四区 | 欧美色xxxxx| 久久99国产精品免费网站 | 狠狠色噜噜狠狠狠狠黑人 | 欧美天天性影院 | 俄罗斯videodesxo极品 | 日本丶国产丶欧美色综合 | 久久久精品国产一区二区三区 | 久久久久av69精品 | 性视频欧美 | 亚洲成熟毛多妇女av毛片 | 国产艳妇av在线观看果冻传媒 | 亚洲先锋影音 | 亚洲线精品一区二区三区八戒 | 麻豆91精品91久久久的优点 | 天天综合在线观看 | 五月天六月婷婷 | 比利时xxxx性hd极品 | 人人妻人人澡人人爽久久av | 久久久成人免费 | 777天堂麻豆爱综合视频 | 欧美黄在线 | 久久久久久九九九 | 久久久精品成人免费观看 | 中老年妇女性色视频 | 中文字幕中文字幕 | 久久激情影院 | 91香蕉视频官网 | 久久久精品国产sm调教网站 | 国产成人毛片在线视频 | 国四虎影永久去哪里了 | 91麻豆精品一二三区在线 | 亚洲成人三级 | www.久久伊人 | 性一交一乱一伦视频免费观看 | 久久亚洲欧美日韩精品专区 | 黄色片免费在线观看 | 免费国产女王调教在线视频 | 人人妻人人澡人人爽人人精品 | 夜夜爱av| 国内自拍第一页 | 欧美乱大交xxxxx | 一级aaa级毛片午夜在线播放 | 亚洲精品国产福利 | 欧美日韩国产网站 | 欧美另类v | 亚洲无毛| 成人天堂视频理伦片 | 色琪琪久久草在线视频 | 精品亚洲成a人在线观看 | 4438x成人网一全国最大色成网站 | 天天玩天天操 | 中文字幕一区二区三区四区免费看 | 色播99| 一区二区三区在线 | 欧洲 | 精品午夜福利无人区乱码一区 | 在线无码va中文字幕无码 | 夜夜爽8888 | 国内精品久久久久 | 丁香五月欧美成人 | 中出极品少妇 | 日本不卡在线观看 | 奇米影视第四色888 奇米影视久久 | av一级黄色片| 国产精品久久久久久久久久99 | 欧美激情a∨在线视频播放 欧美激情aaa | 一区二区三区精品在线 | 国产区一区二区三 | 盗摄精品av一区二区三区 | 亚洲成人激情av | 毛片毛片女人毛片毛片 | 青青青手机视频 | 亚洲欧美日韩国产综合精品二区 | 开心色站 | 国产一区精品在线 | 激情97综合亚洲色婷婷五 | 后进极品美女白嫩翘臀 | 欧美精品高清 | 成人欧美视频 | 色婷婷香蕉在线一区二区 | 国产极品视频在线观看 | 99久热re在线精品99 6热视频 | 国产一区二区三区精品在线观看 | 国产成人免费爽爽爽视频 | 久久精品无码av | 亚洲国产成人极品综合 | 天堂在线资源最新版 | 97se综合| 国产一区二区精品久久 | 久久国产精品视频 | 特级a级毛片 | 男女无套免费视频 | 日韩毛片免费看 | 中文字幕人妻少妇引诱隔壁 | 国产97av | 蜜桃网站入口在线进入 | 两根大肉大捧一进一出好爽视频 | 在线综合亚洲欧美网站 | av免费网站观看 | 视频精品一区二区 | 一本色道综合久久欧美日韩精品 | 性裸体bbwbbwbbwbbw | 免费看黄色三级三级 | 毛片网页| 天天射狠狠干 | 国产精品a级 | 国产69精品久久久久99尤物 | 亚洲一级中文字幕 | 另类αv欧美另类aⅴ | 国产成人精品福利 | 亚洲你懂得 | 夜夜草天天干 | 久久久精品欧美一区二区 | 99久久精品国产成人一区二区 | 免费黄色网址在线 | 狠久久 | 找国产毛片看 | 深夜福利网 | 国产suv精品一区二区五 | 真人一毛片 | 国产又粗又黄又爽又硬的免费视频 | 国产精品国产成人国产三级 | 日本特黄特色aaa大片免费 | 亚洲羞羞视频 | 亚洲色图插插插 | 中文字幕在线观看英文怎么写 | 黄色一级片久久 | 亚洲久草视频 | 风间由美一区二区 | 人妻少妇无码精品视频区 | 亚洲精品高清视频 | 成人做爰高潮片免费视频美国 | 欧美一级黑人 | 久久久久亚洲ai毛片换脸星大全 | 日本网站在线免费观看 | 亚洲精品久久7777777 | 男女激情免费网站 | 久久国产精品成人片免费 | 欧美性久久久久 | 日本大尺度激情做爰hd | 69久久夜色精品国产69 | 夫妻啪啪呻吟x一88av | 鲁一鲁啪一啪 | 青草青草久热精品视频国产4 | 921国产乱码久久久久久 | 国产一级精品毛片 | 国产av天堂无码一区二区三区 | 男女吃奶做爰猛烈紧视频 | 亚洲激情另类 | 制服丝袜在线视频 | 亚洲综合色区中文字幕 | 色站综合| 亚洲激情小视频 | 超碰97观看| 总受合集lunjian双性h | 少妇人妻偷人精品视频 | 国产精品18久久久久久vr | 天堂在线中文在线 | 91精品国产自产在线观看 | 天天澡天天狠天干天 | 亚洲一区二区免费看 | 少妇第一次交换又紧又爽 | 欧美mv日韩mv国产网站 | 狠狠综合久久久久综合网 | 亚洲精品久久久久久国产精华液 | 国产高清美女一级a毛片久久w | 国产日产欧产精品精乱了派 | 国产精品多人p群无码 | 少妇一级淫免费观看 | 爱啪啪网站 | 亚洲性视频在线 | 国产传媒中文字幕 | 五月婷婷激情综合 | 99热在线精品国产观看 | 可以免费看污视频的网站 | 亚洲一区二区黄 | 亚洲熟女乱色综合一区 | 免费视频永久免费人 | 美女午夜影院 | 麻豆成人久久精品二区三区小说 | 嫩草网站入口一区二区 | 色妞欧美| 成人国产在线观看 | 亚洲精品午夜国产va久久成人 | 99精品国产一区二区三区麻豆 | 天天视频黄色 | 欧美亚洲国产精品久久高清 | 黄色网址你懂的 | 中文字幕ipx696希岛あい | 午夜精品久久久久久久白皮肤 | 又色又爽又黄无遮挡的免费视频 | 国产新婚疯狂做爰视频 | 人成午夜免费视频在线观看 | 亚洲视频区 | 无码乱码av天堂一区二区 | 性xxxx视频播放免费 | 欧美日韩成人在线视频 | 丰满人妻翻云覆雨呻吟视频 | 国产福利在线观看视频 | 毛片在线免费播放 | 日日夜夜av | 老汉色av | 日韩国产欧美精品 | 石原莉奈在线播放 | 免费的黄色大片 | 波多野结衣在线观看一区二区三区 | 精品久久久久久中文字幕 | 男女做www免费高清视频网站 | 欧洲-级毛片内射 | 欧美三级理论 | 红杏亚洲影院一区二区三区 | 久久久亚洲国产美女国产盗摄 | 国产精品久久久久久亚洲影视内衣 | 久久成人亚洲 | 免费观看又色又爽又黄的韩国 | 亚洲夜夜叫| 亚洲日韩精品一区二区三区 | 国产精品天干天干在线 | 亚洲日韩乱码一区二区三区四区 | 国产精品一页 | 国产伦对白刺激精彩露脸 | 好吊一区二区三区 | 激情视频久久 | 天天草av| 成人交配视频 | 日本少妇白嫩猛烈进入免费视频 | 成人国产在线观看 | 欧美一区二区在线免费观看 | 亚洲性一区二区 | 亚洲成人免费视频在线 | 91久久国产露脸精品 | 国产精无久久久久久久免费 | 天天干夜夜干 | 四虎影酷 | 亚洲精品国产suv一区别 | 午夜宅男影院 | 国产视频九色蝌蚪 | 在线免费观看日本视频 | 国产女人的高潮大叫毛片 | 网色网站 | 国产在线精品成人欧美 | 国产亚洲精品久久久久四川人 | 精品少妇人妻av免费久久久 | 国产日韩不卡 | 久久精品国产亚洲77777 | 91久久久精品国产一区二区蜜臀 | 欧美日韩精品一区二区天天拍 | 国产欧美另类精品久久久 | 一级女人18片毛片蜜桃av | 999久久久久 | 日产高清b站成品片a | 欧美国产一级片 | 伊人久久综合视频 | 开心激情站 | 91在线精品秘密一区二区 | 涩涩的视频在线观看 | 黑人巨大精品欧美一区二区, | 国产清纯白嫩初高生在线观看性色 | 成人v| 成人精品一区日本无码网 | 欧美日韩成人网 | 手机看片久久久 | 国产亚洲欧美精品永久 | 狠狠gao| 亚洲日本国产 | 亚洲看 | 久久艹伊人 | 亚洲国产久 | 西欧free性满足hd | 性开放少妇xxxxⅹ视频蜜桃 | 欧美日韩免费看 | 日韩一区二区三区四区五区六区 | 欧美日韩一区二区三区不卡视频 | 国产成人看片 | 中国毛片在线观看 | av午夜久久蜜桃传媒软件 | 日韩av.com| 精品亚洲韩国一区二区三区 | 小明www永久免费播放平台 | 国产网红无码精品视频 | 熟女俱乐部五十路六十路 | 欧美日韩影院 | 久久久久成人精品免费播放动漫 | 性一交一乱一伧老太 | 日韩欧美国产另类 | 日韩福利在线 | www.国产色 | 无码国产精品一区二区免费3p | 午夜丰满少妇性开放视频 | 国产三级黄色毛片 | 欧美性猛交 | 成熟丰满中国女人少妇 | 成人免费av影院 | 狠狠色狠狠色合久久伊人 | 女同av国产亚洲片bbb及 | 91偷拍精品一区二区三区 | 激情五月婷婷综合网 | 欧美成人一区二区三区在线视频 | 欧美丰满熟妇xxxxx | 国产日本精品 | 中文字幕在线视频观看 | 亚洲第一成人区av桥本有菜 | 在线亚洲综合 | 欧美黑人性暴力猛交喷水 | 青娱乐国产视频 | 91人人揉日日捏人人看 | 又湿又紧又大又爽a视频国产 | 欧美特黄视频 | 欧美一区自拍 | 亚洲欧美精品在线 | 国产免费一区二区三区四在线播放 | 国产精品9999| 无套内谢少妇在线观看视频 | 调教女m荡骚贱淫故事 | 日本黄色美女视频 | ,亚洲人成毛片在线播放 | 天天躁日日躁狠狠躁 | 一起操网站 | 国内少妇偷人精品视频免费 | 亚洲国产成人无码av在线影院 | 狠狠色依依成人婷婷九月 | 女人脱精光让男人躁爽爽视频 | 夜夜爽av | 亚洲国产精品久久精品怡红院 | 麻豆成人久久精品二区三区免费 | 免费观看a级片 | 米奇777四色精品人人爽 | 少妇精品久久久一区二区三区 | 色av免费| 国产又色又爽又刺激在线播放 | 日本少妇喂奶 | 精品国产一区二区三区麻豆仙踪林 | www.91自拍| 久久久久久久久888 国产激情无码一区二区 | 粗暴91大变态调教 | 国产女s调教男m免费网站 | 日韩一本之道一区中文字幕 | 国产真实伦在线视频 | 日日噜噜噜夜夜爽爽狠狠视频97 | 国产精品8888| 欧美黄色一区二区 | 国产黄色自拍 | 在线xxxxx| 两性午夜刺激性视频 | 欧美黑人又粗又大高潮喷水 | 黑人一区二区 | 成人三一级一片aaa 成人涩涩 | 亚洲精品综合在线 | 无码av片av片av无码 | 亚洲精品在线视频免费观看 | 欧美品牌jizzhd欧美 | 伊人色婷婷 | 四虎国产精品免费观看视频优播 | 污污视频网站免费观看 | 久久久视频在线 | 四季av中文字幕一区 | 久草新 | 色久网| www日本免费| 午夜少妇影院 | a视频免费| 日韩www| 国产午夜福利在线观看视频 | 中文天堂在线视频 | 亚洲欧美日韩天堂 | mm1313亚洲国产精品无码试看 | youjizzcom国产 | 91麻豆精品国产自产在线观看一区 | 一本一道av | 大桥未久女教师在线观看bd22 | 伊人婷婷久久 | 色老妹| 日日爽爽| 欧美性折磨bdsm激情另类视频 | 男女啪啪做爰高潮免费看 | 少妇啊灬啊别停灬用力啊房东 | av性天堂网 | 国产精品中文字幕在线 | 亚洲精品久久网白云av | 99久久久无码国产精品性 | 一本一道精品欧美中文字幕 | 99久久国产综合 | 国模私拍一区二区三区 | 亚洲黄色av | 国产盗摄夫妻原创视频在线观看 | 欧美一级淫片免费 | 嫩草视频网站 | 久久精品国产99国产精品澳门 | 久久人妻无码一区二区 | 一区二区不卡视频 | 久久精品人人做人人妻人人玩 | 亚洲日本中文字幕乱码在线电影 | 日韩精品欧美激情 | 秋霞视频在线观看 | 日日燥夜夜燥 | 日韩av影片 | 乱码午夜-极品国产内射 | 久久精品国产99国产精品澳门 | 深夜在线免费观看 | 精品国精品国产自在久国产87 | 成年人激情网站 | 国产三级av在线播放 | 老司机一区二区三区 | 91社区视频 | 国产精品免费视频网站 | 俄罗斯精品一区二区 | 欧美精品高清在线观看 | 亚洲一区二区美女 | 精品日产乱码久久久久久仙踪林 | 午夜视频欧美 | www天堂在线 | 亚洲午夜成aⅴ人片 | 天堂网视频在线 | 国产精品久久久久久久久免费丝袜 | 99re99热| 国产69精品久久久久人妻刘玥 | 亚洲第一av网 | 精品久久久一区二区 | 天堂а√在线地址在线 | 求欧美精品网址 | 亚洲自拍偷拍一区二区 | 少妇裸体淫交视频免费观看 | 天堂欧美城网站地址 | 成人精品视频一区二区三区 | 无尺码精品产品网站 | 久久久国产成人一区二区三区 | 免费中文字幕av | 欧美爱爱视频 | 九九综合va免费看 | 性娇小13――14欧美 | 成人婷婷网色偷偷亚洲男人的天堂 | 操操操综合 | 九九热精品视频 | jizzyou中国少妇农村 | 国产无遮掩 | 91麻豆成人| 日日碰狠狠添天天爽五月婷 | yy8090新视觉午夜毛片 | 亚洲综合无码一区二区 | 国产69xx| 巨胸喷奶水视频www免费网站 | 成人123区 | 男男车车的车车网站w98免费 | 亚洲国产成人精品女人久久 | 亚洲人亚洲人成电影网站色 | 日本在线一区二区三区 | 毛片tv网站无套内射tv网站 | 中文人妻熟妇乱又伦精品 | 午夜无遮挡 | 欧美中文字幕无线码视频 | 99国产超薄丝袜足j在线播放 | 国产一区二区三区中文字幕 | 国产做a爱一及毛片久久 | 成人六区 | 日韩超碰| 欧美日韩精品 | 国产精品一品二品 | 香港曰本韩国三级网站 | 无码一区二区三区中文字幕 | 91久久久久久波多野高潮 | 亚洲精品国产电影 | 精品国产免费久久久久久婷婷 | 日本免费一区二区三区四区五六区 | 中文字幕免费在线观看 | 狂虐性器残忍蹂躏 | 日韩毛片在线观看 | 亚洲a∨国产av综合av网站 | 欧美性猛交xxxx黑人猛交 | 欧美一区2区三区4区贰佰公司 | 狠狠色噜噜狠狠狠狠777米奇 | 日本美女久久久 | 五月激情丁香婷婷 | 毛茸茸熟妇丰满张开腿呻吟性视频 | 怡红院av亚洲一区二区三区h | 亚洲男女av| 91九色pron| 青草视频在线播放 | 日本黑人一区二区免费视频 | 大咪咪dvd| 无码人妻av一区二区三区波多野 | 成人av免费看 | 成年人看的黄色 | 国产男女免费完整视频 | 久久鲁视频 | 久久久国产精品x99av | av中文字幕网站 | 日韩国产精品一区二区 | 免费成人视屏 | 婷婷天堂网 | 久久久久久亚洲精品不卡 | 精品少妇一区二区 | 在线中出 | 国产一区二区三区中文字幕 | 三级免费黄录像 | 国产v亚洲 | 亚洲成av人片在www色猫咪 | 理论片午午伦夜理片影院99 | 成年午夜视频 | 免费最爽乱淫无遮挡 | 欧美黑人性猛交大片 | 三上悠亚精品二区 | 成年人免费高清视频 | 中年两口子高潮呻吟 | 欧美一级片毛片 | 色偷偷亚洲男人的天堂 | 国产精品久久久爽爽爽麻豆色哟哟 | 色偷偷偷在线视频播放 | 成人小视频免费在线观看 | 日本久久免费 | 91黄色在线视频 | 最新日韩在线视频 | 一区二区三区久久久 | 男人疯狂高潮呻吟视频 | 国产精品豆花视频www | 一本之道久久 | 成人做爰69片免费看网站野花 | 强开小婷嫩苞又嫩又紧视频韩国 | 国产精品久久久久久久久免费桃花 | 蜜臀久久99精品久久久久久宅男 | 337p日本欧洲亚洲大胆艺术图 | 欧美精品乱码久久久久久按摩 | 无遮挡国产高潮视频免费观看 | 男女69式互吃动态图在线观看 | 亚洲国产精品成人va在线观看 | 亚洲成人av一区二区三区 | 亚洲精品一区二区精华 | av永久| 日本三级不卡 | 欧美专区综合 | 国产无套精品一区二区 | 无码日本精品xxxxxxxxx | 日本精品久久久久久 | 亚洲码国产岛国毛片在线 | 久久99精品波多结衣一区 | 在线免费观看网站入口在哪 | 男人j进入女人j内部免费网站 | 亚洲天堂日韩精品 | 精品国产乱码一区二区三区99 | 国产视频污 | 久久密av| 亚洲男人av香蕉爽爽爽爽 | 性插插视频 | 99精品人妻国产毛片 | 91正在播放 |