PCI-8255卡安裝
您可以上益眾科技公司的網站,找到PCI-8255介面卡的安裝資料,請依益眾科技公司說明書安裝您的PCI-8255介面卡。
一、 功能與特色
1. 最普遍的PCI界面,使用益眾科技公司的雙8255界面實驗卡(A20-0002)的舊客戶不須更改程式即可升級為PCI界面。
2. 含有兩顆8255,可處理48Bit的I/O。
3. 可自行結合其他電路作為 PCI AD/DA卡(說明書內附簡單的應用說明)、馬達控制卡……等。
4. 內含8顆LED可供測試時使用。
5. 可應用於Visual C++、Borland C++ Builder、Visual Basic、Turbo C、組合語言等開發環境。
6. 附Borland C++ Builder 範例程式。
二、 配件
1. PCI 8255卡 × 1
2. 系統磁片 × 1
3. 使用說明書 × 1
4. 25 Pin D型連接線 × 2
三、 元件配置說明
1. 8255晶片:共有兩顆用來控制I/O的控制器,其I/O位址透過【2.指撥開關】設定,並且分別由【3.8255-2 I/O埠】、【4.8255-1 I/O埠】雙向傳遞資料。
2. 指撥開關:共有8Bit,可用來設定【1.8255晶片】的位址以及關閉PCI 8255的功能,於下節有更詳細的說明。
3. 測試LED:連接至 8255-1 的Port A,可方便測試。
4. 8255-2 I/O 埠CPP2:第二顆8255的雙向I/O埠CPP2,接腳如下圖所示。
2B0 |
2B1 |
2B2 |
2B3 |
2B4 |
2B5 |
2B6 |
2B7 |
2C4 |
2C5 |
2C6 |
2C7 |
VCC |
2A0 |
2A1 |
2A2 |
2A3 |
2A4 |
2A5 |
2A6 |
2A7 |
2C0 |
2C1 |
2C2 |
2C3 |
GND |
5. 8255-1 I/O 埠CPP1:第一顆8255的雙向I/O埠CPP1,除了連接至界面卡上的接腳,另外還提供了一組 25 Pin D-SUB 的接頭,其接腳圖如下所示。
1A0 |
1B0 |
1A1 |
1B1 |
1A2 |
1B2 |
1A3 |
1B3 |
1A4 |
1B4 |
1A5 |
1B5 |
1A6 |
1B6 |
1A7 |
1B7 |
1C0 |
1C4 |
1C1 |
1C5 |
1C2 |
1C6 |
1C3 |
1C7 |
GND |
VCC |
四、 位址設定
本PCI 8255卡不支援隨插即用(PNP:Plug AND Play)功能,因此PCI 8255卡的位址都必須經由卡上的指撥開關設定,PCI 8255卡共有兩顆8255,並且都可以經由指撥開關1~3、4~6 Bit指定起始位址(詳見下頁的表格),指定位址時強烈建議讓這兩顆8255使用不同的位址,避免干擾。
在出廠時,預設的位址是:
第一顆在200H的位址,並佔用了200H、201H、202H、203H。
第二顆在240H的位址,並佔用了240H、241H、242H、243H。
位址所代表的意義依序為 PortA、PortB、PortC及控制暫存器,控制暫存器是用來設定PortA、PortB、PortC為輸出埠、輸入埠或雙向傳輸埠。
假使我們將指撥開關設定為 380H ,依照上面的規則就可以知道PortA是在380H的位址、PortB 是在 381H 的位址、PortC 是在382H 的位址,而控制暫存器是位在383H的位址,接著只要利用任何程式語言去寫入或讀取這些 I/O Port就可進行控制。
指撥 開關 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
CPP2 |
CPP1 |
功能 |
IDEN |
X |
CPP2 |
CPP1 |
||||||
PSEL2 |
PSEL1 |
PSEL0 |
PSEL2 |
PSEL1 |
PSEL0 |
位址 |
位址 |
|||
設定值 |
0 |
X |
0 |
0 |
0 |
0 |
0 |
0 |
*200 |
200 |
0 |
X |
0 |
0 |
1 |
0 |
0 |
1 |
240 |
*240 |
|
0 |
X |
0 |
1 |
0 |
0 |
1 |
0 |
280 |
280 |
|
0 |
X |
0 |
1 |
1 |
0 |
1 |
1 |
2C0 |
2C0 |
|
0 |
X |
1 |
0 |
0 |
1 |
0 |
0 |
300 |
300 |
|
0 |
X |
1 |
0 |
1 |
1 |
0 |
1 |
340 |
340 |
|
0 |
X |
1 |
1 |
0 |
1 |
1 |
0 |
380 |
380 |
|
0 |
X |
1 |
1 |
1 |
1 |
1 |
1 |
不使用 |
不使用 |
|
1 |
X |
X |
X |
X |
X |
X |
X |
不使用 |
不使用 |
五、
初步測試
益眾科技公司提供PCI 8255卡兩種測試方法,一種是利用 DEBUG 軟體(Windows 內建的除錯程式),另一種是利用益眾科技公司所提供的測試程式。使用上述兩種測試方法不必做任何接線的動作,只須觀察界面卡上的燈號即可,在進行測試前請先確定界面卡所設定的 I/O 埠位址,本測試範例使用的PCI 8255卡的指撥開關設定如下,可此可知CPP1是使用位址240H,您的設定值也許會不同,但除了與其他界面卡相衝外,位址的不同並不會影響PCI 8255卡的功能:
0 |
X |
0 |
1 |
0 |
0 |
0 |
1 |
下 |
下 |
下 |
上 |
下 |
下 |
下 |
上 |
為了讓使用者更了解所有測試程式的差異,益眾科技公司所有的測試程式統一將測試燈號輸出為下面的狀態:
1. DEBU測試方法
A. 執行 C:\WINDOWS\COMMAND\DEBUG,執行後游標左方會出現一個DEBUG的提示符號 【—】,代表已進入DEBUG的環境。參考畫面如下:
B. DEBUG的指令中,大寫的 “O” 是輸出資料到I/O 埠,其指令格式如下:
假使您卡上的 CPP1 是設定在 240H,控制時會使用到的位址有:240H、241H、242H、243H,分別代表 PortA、PortB、PortC及控制位元的位址。
請您輸入: O 243 80 ,將控制位元設定為雙向I/O
再輸入: O 240 A0 ,將PortA(測試燈號)設定為
其操作畫面如右:
C. 如果燈號輸出為:亮暗亮暗 暗暗暗暗,就代表界面卡輸出功能正常。
D. 如果您想要測試輸入,DEBUG 也提供大寫的 “I” 用來讀取 I/O埠的資料,其指令格式如下:
這是益眾科技公司操作後的結果:
如果測試的結果異常,請檢查 I/O 位址是否設定錯誤,以及是否有其他界面卡使用了相同的 I/O 位址,檢查的方法在第七節有詳細的說明,資源衝突有時會造成由PCI 8255卡輸出資料時正常,但由PCI 8255卡輸入資料卻會發生錯誤的情形產生。請確定將所有的埠都測試過一次。
2. PCI / ISA測試程式:放入光碟片後會自動出現下面的視窗(或點選test.exe),請依照以下順序操作即可。
A. 請在下拉選單中選擇PCI 8255所設定的位址,益眾科技公司的測試環境是將PCI 8255卡設定使用 0x240 及 0x280。
B. 在左邊的控制位元設定模式,本程式預設值是 0x80,如果您不想更改,請直接點選 “設定” 鈕。
C. 在 I/O 設定 點選您想設定的狀態,如PortA輸出、PortB輸入、PortC輸入。
D. 在 “Port 數值” 的編輯框填入您想輸出的數值(十進位或十六進位,十六進位請以 0x 做為前置字串,如範例的0x80),範例裡我們在 “PortA 數值”填入 0xA0。
E. 點選 “交換狀態” 即可。
六、 編寫程式
1. Turbo C 範例
#include “stdio.h” #include “dos.h” main() { // 使用 outportb , outport 輸出資料到 IO Port // 使用 inportb , inport 輸入資料到變數裡
int Address1 = 0x240; //第一顆8255 在 IO 240H int Address2 = 0x280; //第二顆8255 在 IO 280H int ReadPort; //讀出資料的暫存器
outportb(Address1 + 3 , 0x80); //初始第一顆 8255 (IO 243H) outportb(Address2 + 3 , 0x80); //初始第二顆 8255 (IO 283H)
outporb(Address1 , 0xAA); //輸出 PortA 為 0xAA
ReadPort = inportb(Address1+1 ) //輸入 PortB 到 ReadPort
outportb(Address2 , inportb(Address1 +1)); //將 PortB 的資料丟到第二 //顆 8255 的 PortA
} |
2. Basic 範例
‘Basic 使用 OUT 輸出資料到 I/O 埠 ‘Basic 使用 INP 從 I/O 輸入資料到變數裡
Dim address1 = &H240 ‘第一顆8255 在 IO 240H Dim address2 = &H280 ‘第二顆8255 在 IO 280H Dim readport ‘讀出資料的暫存器
OUT address1 + 3 , &H80 ‘初始第一顆 8255 (IO 243H) OUT address2 + 3, &H80 ‘初始第二顆 8255 (IO 283H)
OUT address1,&HAA ‘輸出 PortA 為 0xAA
Readport = INP (address1+1) ‘輸入 PortB 到 ReadPort
OUT address2,INP(address1+1) ‘將 PortB 的資料丟到第二 ‘顆8255 的 PortA
|
3. Borland C++ Builder 範例
A. 用Winzip 解壓縮 Port.zip,裡面有 Port.obj 及 Port.hpp兩個檔案。
B. 將 Port.Obj及Port.hpp 複製到您的專案的資料夾。
C. 在您的專案裡加入 #include “Port.hpp”,程式會自動新增下列三個函數。
Word inportb(Word Addr)
void outportb(Word Addr , int Value)
void Register(void)
D. 參考 Turbo C 的範例將這些函數加入到您的物件(如按鈕)裡即可。
E. 如果您還有問題請參考光碟片所附的範例程式。
七、 測試與維修
1. 資源相衝(I/O 位址)檢測方法
進行這種檢測方法前,請先拔除PCI 8255卡,檢測的方法是利用【我的電腦à控制台à系統à裝置管理員à電腦(電腦內容)àI/O】,檢測步驟如下:
A. 點選【控制台】,出現【控制台】內容。
B. 點選 【系統】後,出現【系統內容】表單。
C. 點選【裝置管理員】的分頁,並在【電腦】雙按滑鼠左鍵,出現【電腦內容】表單。
D. 點選【檢視資源】的分頁,並點選【I/O(O)】的選項,點選後的表單如步驟E。
E.
檢查看看是您想使用的位址是否被其他裝置使用到了。
如上邊的畫面中(反白部份)200 – 207 已經被搖捍連接埠使用了,所以我們不能將PCI 8255 卡設定為 200,不過可以設定240、280、2C0、300、340、380給PCI 8255卡使用。
2.常見問題Q&A
Q1. 測試時CPP1沒有問題,可是CPP2的值沒辦法控制??
A1. 您可交換兩顆 8255 試看看,也許是其中一顆壞了。
Q2. 依照您的測試方法測試過了,資源都沒有相衝突,可是卻無法控制PCI 8255卡。
A2. 有幾個檢查的重點
l 指撥開關 IDEN# 請撥至 ON 的位置。
l 再確定指撥開關所設的位址及測試時所輸入的位址是否相同,有些人會把十進制的位址及十六進制搞錯。
l 控制PCI 8255前,是否先寫入控制位元到PCI 8255卡,假使指撥開關的CPP1設定在200H,測試前應該先輸出 80H(0x80)到 203H(0x203),並且測試燈號都會全部熄滅,接著才可以輸出或輸入資料到PCI 8255卡。
l 如果以上的步驟您都試過了,那麼大概是IC故障,您可自行購買 74244、74245更換,如果更換了也無法解決,只好請您寄回益眾科技公司司,由益眾科技公司為您服務。
Q3. 在測試時輸出資料到PCI 8255卡都正常,可是由PCI 8255讀入的數值跟I/O設定的數值都不一樣,好像沒有被讀進去。
A3. 除了資源相衝突會造成這種情形外(有其他界面卡或裝置使用相同的I/O埠),也許您忘了共地(將PCI 8255卡的接地與外接電路的接地要連接起來,才有電流迴路),當然如果以上兩點您都已經注意了,也許是PCI 8255卡故障了,請送回益眾科技公司檢修。
Q4. 請問該如何利用Borland C++ Builder 控制 PCI 8255 卡??
A4. Borland C++ Builder不像TurboC及Basic有支援直接控制I/O的語法(outportb、inportb),因此我們如果要編寫程式時可能要利用 API 去控制,如果您不了解這些語法,可以上Borland C++ Builder的相關網站尋找控制項或元件。
Q5. 己經使用了元件並且在Windows98使用沒問題,不過在Windows2000、WindowsXP仍然無法控制PCI 8255卡,為什麼??
A5. Windows2000不允許使用者直接控制I/O(為了系統的穩定性,採取嚴格的資源掌控,限制使用者的權限),使用裝置前要向Windows2000的核心申請以獲得掌控,因此如果您想利用Windows2000的控制軟體,請參考Windows2000 SDK內的說明(MicroSoft原版Visusal Studio Professional Edition內附)。
八、 應用指南
1. AD/DA電路:
我們可以使用ADC0809、DAC0832兩顆IC結合PCI 8255達成數位、類比轉換的功能,以下提供ADC部份簡易的說明,但仍建議您參考IC製造商所提供的DataSheet(本說明書取自National ADC 0809 DataSheet的資料)。
l 設定位址:這顆IC可支援8個頻道,由A、B、C三根接腳解碼後選擇一個特定的頻道(如下表),並且將數位化的結果輸出至DB7~DB0。
l 寫入指令:當這根接腳設定為低態時,會把位址存入並開始類比轉換為數位的動作。
l 偵測中斷:當INTERRUPT由0被設定為1時,代表數位化的工作完成,可以準備取得數位化的資料。
l 讀取資料:當這根接腳設定為低態後,資料線DB7~DB0上的資料就是類比轉為數位的結果。
ADC0809的時序圖如下:
如需National系列IC的DataSheet,請至www.national.com搜尋,網站所提供的DataSheet有相當詳細的設計說明。