如圖所示,通過8086來讀寫io口,實現流水燈以及開關。本電路是基於8086最小模式下的三總線結構添加的,三總線結構原理較為復雜本篇就不對其原理進行介紹了,大家可以自行查閱相關引腳的功能從而實現。
本文僅介紹io端口的實現,和代碼邏輯部分。
概述:本文使用45h和40h兩個端口,40h端口使用開關模擬白天或黑夜,45端口則控制LED的亮滅。
1.輸出端口
輸出口由譯碼電路、74ls373鎖存器、以及8個LED燈構成。下面一一介紹。
(1).譯碼電路
譯碼電路使用的是基本門電路實現的,大家也可以使用可編程並行接口芯片8255來實現,這里不做介紹。
如圖所示當使用指令out 45h,al時,RD引腳為低電壓,(注意這是8086CPU的引腳,上面有一個橫線表示低電平有效。文中的橫線默認不標出。讀者自行對比圖片。相同的標簽是連接到一起的本文的RD連接的是WR)M/IO為低電壓。地址45H也就是0010 0101B,我們將相應位置的地址線接上一個非門,之后將地址接入到一個8輸入的或門上,當地址是45h時,進行或運算的結果是0,其它地址則一定是1,
再將其與讀寫信號RD以及M/IO相連接。其輸出引腳命名為OUT1,將其作為片選信號接入鎖存器的LE引腳。這樣,這個模塊實現的功能是當8086對45h端口進行寫操作時,OUT1為高電平,其它情況為低電平。
(2).鎖存器
8086cpu共有16根數據線,當發送的地址是偶地址時,數據線的低8位有效,當發送奇地址時數據線的高8位有效。
OUT1接入LE,當LE為高電壓時鎖存器的數據可以被改寫,LE為低電壓時數據鎖存。
(3)LED燈
LED采用的是共陰極的接法,當發送的數據是01h時,led0處的電壓為12V,
LED的標壓是2.2V,額定電流是10mA。
我們需要用一個電阻分走12-2.2=9.8V的電壓。而額定電流是10mA,於是限流電阻應該是9.8X10x10e-2=0.98歐姆。
2.輸入端口
輸入端口的電路與輸出端口類似就不一一介紹了。這里使用的是74HC245雙向數據緩存器,AB/BA引腳控制數據的方向,高電平代表數據從A到B。低電平則相反。CE低電平時芯片有效。與上文的鎖存器相反。所以直接用與門。
地址上40h的二進制是0100 0000B所以只需要將AB6接非門即可。由於是讀操作。WR需要接一個非門。我們只需要用到一個Bit的數據,A1~A7接地即可。A0接開關。開關另一端接VCC。