七月 2018
« 四月    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

[C#] 用 inpout32.dll 讀寫 LPT Port

這篇文章,是因為要做專題所做的筆記
不囉嗦,切入正題

1.下載 inpout32_source_and_bins.zip 找到裡面的 inpout32.dll ,放到 C:\Windows\System32\ 目錄下
2.開始寫程式碼

?View Code CSHARP
1
2
3
4
5
6
7
8
9
10
11
12
using System.Runtime.InteropServices;  //記得在最上面要加上這行
 
        public class PortAccess         //產生一個名為 PortAccess的類別
        {
            [DllImport("inpout32.dll", EntryPoint = "Out32")]
            public static extern void Output(int adress, int value);
           //Output( I/O位置, 輸出值 );
 
            [DllImport("inpout32.dll", EntryPoint = "Inp32")]
            public static extern int Input(int adress);
            //傳回一個整數 Input( I/O位置 );
        }


接下來就是開始寫應用了,假如要讓 LPT Port 輸出 4,I/O位置是 0x378H ,就寫

?View Code CSHARP
1
            Output( 888, 4);  // 0x378 換成十進位就是 888

如果要讀取 LPT Port 的值,要記得先改變 ECR 暫存器的值,將暫存器設定為雙向模式

位 元 功 能
=========================================================
7,6,5
0 0 0 SPP標準模式(Standard Mode)
0 0 1 雙向模式(byte mode)
0 1 0 並列緩衝模式(Parallel Port FIFO Mode)
0 1 1 ECP緩衝模式(ECP FIFO Mode)
1 0 0 EPP模式
1 0 1 保留
1 1 0 緩衝試驗模式
1 1 1 輪廓模式
———————————————————
4 ECP中斷位元
3 DMA致能位元
2 ECP服務位元
1 FIFO緩衝器已滿
0 FIFO緩衝器已空
=========================================================
ECR 暫存器位置為 0x77AH,換算為十進位就是1914

?View Code CSHARP
1
            Output( 1914, 32);  // 設定雙向模式

然後把 LPT Port 設為輸入模式,將 0x37AH 第 5 位元設為 1

?View Code CSHARP
1
            Output( 890, 32);  // 設定為輸入腳

最後就是讀取啦~

?View Code CSHARP
1
            int i = Input( 888);  // 記得會回傳一個 int 的輸入值

如果要輸出的話,記得將第 5 位元設為 0
好了,教學到此結束~
自己寫了一個測試程式,有需要可以用(不過不含原始碼)

參考資料:
How to check print port’s mode – Delphi K.Top討論區
要如何從使用ASM來擷取LPT中的訊號呢? – Delphi K.Top討論區

延伸閱讀:
I/O Ports Uncensored – 1 – Controlling LEDs (Light Emiting Diodes) with Parallel Port
I/O Ports Uncensored Part 2 – Controlling LCDs (Liquid Crystal Displays) and VFDs (Vacuum Fluorescent Displays) with Parallel Port

11 comments to [C#] 用 inpout32.dll 讀寫 LPT Port

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>