對利用打印口讀寫存儲器24cxx的質(zhì)疑
作者Email: cscxh@pub.sz.jsinfo.net
有不少電子愛好者都讀過這樣一篇文章:《一款實用的串行E2PROM讀寫軟件――24C》,有部分燒友也親自動手制作了該電路。該軟件可以利用計算機的打印口上的輸出端口378H端口和379H的輸入端口,對存儲器24cxx進行讀寫。378H端口是輸出端口,對應(yīng)計算機打印口的2腳到9腳。經(jīng)我試用,效果相當(dāng)不錯。但有一次我在對計算機打印口做了幾個小試驗后,我不禁驚出一身冷汗!現(xiàn)寫出來與大寫一起來探討:
試驗一:觀察開機過程中,計算機打印口的電平變化
具體做法:利用下述電路,接在計算機打印口上,觀察各個發(fā)光二極管的亮滅變化情況。
觀察結(jié)果:在機器自檢階段,接在打印口上的輸出端口378H的8個發(fā)光二極管閃個不停;在windows98啟動過程中,這幾個發(fā)光二極管也要閃幾下。發(fā)光二極管在閃動時是有的亮有的滅,肉眼無法分辨其規(guī)律。Windows98啟動完成后,各臺機器的發(fā)光二極管亮滅情況也不同。
觀察結(jié)論:機器硬件不同,操作系統(tǒng)不同,打印口上378H端口的各輸出線的電平高低無規(guī)律。
試驗二:編寫打印口讀數(shù)據(jù)程序
具體做法:利用windows98下的程序設(shè)計軟件Delphi,編寫一段代碼來讀取打印口上的數(shù)據(jù):啟動好Delphi后,在設(shè)計窗體中放一個按鈕button1,雙擊該按鈕,切換到代碼窗口,可以看到Delphi已為我們做好了框架:
procedure Tform1.Button1Click(Sender: Tobject);
begin
end;
我們在begin前一行加入變量聲明:var t:byte;
在begin與end中間輸入以下代碼:
asm mov dx , $378
in al , dx
mov t , al
end;
form1.Button1.Caption:=inttostr(t);
運行程序后,我們可以隨時讀取打印口上的378H端口的數(shù)據(jù)。
觀察結(jié)果:以其中一次為例,按下button1按鈕后,按鈕上顯示的數(shù)字即為從端口讀得的數(shù)據(jù),我們讀得為108,利用windows自帶的“計算器”程序,把這個十進制數(shù)字轉(zhuǎn)換成二進制數(shù)字,為“01101100”;同時觀察得接在打印口上的各發(fā)光二極管的亮滅情況是:“滅滅亮亮滅亮亮滅”。
觀察結(jié)論:這一次打印口上的2~9腳的電平高低情況是:“低低高高低高高低”。
試驗三:測試打印口輸入輸出電流能力。
具體做法:把指針式萬用表撥至25毫安檔,黑表筆接打印口的某個低電平端,紅表筆瞬間接觸某個高電平端。
觀察結(jié)果:如果高低電平端直接相連,其電流肯定大于10毫安。
現(xiàn)在我們回過來再看看在網(wǎng)上廣泛流傳的這款用打印口讀寫存儲器的電路:
該電路中可能為了給IC提供足夠的電流,把打印口的4、5、6、7腳并接在一起。
潛在的危險:假如在打印口讀寫軟件未啟動時甚至計算機機電源未開時,該電路就已經(jīng)連到了計算機的打印口上,那么開機后必然會有一段時間打印口上的4567各引腳的電平有的為高有的為低。高電平端竭力輸出電流,低電平竭力吸收電流,鬼知道打印口什么時候就要報銷!不過,如果打印口讀寫軟件已啟動,我測得打印口上4567這4個引腳均為高電平。
我做試驗的環(huán)境是:
明致M748MR主板,賽揚400CPU
Windows 98 SE
Delphi用的是5.0、6.0和7.0三個版本,編寫上述程序時均成功。
我暗自慶幸沒有用新買的計算機作試驗,也慶幸我的老主板沒有報銷。打印口的額定輸入和輸出電流到底可以達到多少?到底用上述電路會不會損壞計算機的打印口呢?希望高手們再作指點!
在很久很久以前的計算機主板上,打印口的378H端口用的是74LS374一類的IC,這種IC的筋骨還比較硬朗,即使壞了,更換一塊就是了。可是現(xiàn)在的主板上好象找不到這種IC了,要是哪天打印口報銷的話,麻煩就大了。如果燒友們還在使用上述電路的話,我建議在計算機打印口上4567各腳各接一個二極管,二極管的負(fù)極引線端均接在24cxx的Vcc電源端,這樣可以徹底防止電流倒灌!
評論