在8051中,I/O操作使用4個埠和40個管腳完成。下圖顯示了40個管腳的詳細信息。I/O操作埠保留32個管腳,每個埠有8個管腳。其他8個管腳被指定爲Vcc、GND、XTAL1、XTAL2、RST、EA(巴)、ALE/PROG(巴)和PSEN(巴)。
它是一個40針PDIP(塑料雙列直插封裝)
注意在DIP封裝中,您可以通過IC中間的切口識別第一個管腳和最後一個管腳。第一個銷位於該切割標記的左側,最後一個銷(即,在本例中,40th銷)位於切割標記的右側。
I/O Ports and their Functions
四個埠P0、P1、P2和P3各使用8個管腳,使它們成爲8位埠。復位後,所有埠都配置爲輸入,準備用作輸入埠。當第一個0寫入埠時,它將成爲輸出。若要將其重新配置爲輸入,必須將1發送到埠。
Port 0 (Pin No 32 – Pin No 39)
它有8個引腳(32到39)。它可以用於輸入或輸出。與P1、P2和P3埠不同,我們通常將P0連接到10K歐姆上拉電阻器,將其用作開路漏極的輸入或輸出埠。
它也被指定爲AD0-AD7,允許它同時用作地址和數據。在8031(即無ROM晶片)的情況下,當我們需要訪問外部ROM時,地址和數據總線都將使用P0。ALE(Pin no 31)表示P0是否有地址或數據。當ALE=0時,它提供數據D0-D7,但當ALE=1時,它有地址A0-A7。如果沒有外部存儲器連接可用,則必須將P0外部連接到10K歐姆上拉電阻器。
MOV A,#0FFH ;(comments: A=FFH(Hexadecimal i.e. A=1111 1111) MOV P0,A ;(Port0 have 1's on every pin so that it works as Input)
Port 1 (Pin 1 through 8)
它是一個8位埠(引腳1到8),可以用作輸入或輸出。它不需要上拉電阻,因爲它們已經在內部連接。復位後,埠1被配置爲輸入埠。以下代碼可用於將55H和AAH的交替值發送到埠1。
;Toggle all bits of continuously MOV A,#55 BACK: MOV P2,A ACALL DELAY CPL A ;complement(invert) reg. A SJMP BACK
如果埠1被配置爲用作輸出埠,則要再次將其用作輸入埠,請按以下代碼將1寫入其所有位,對其進行編程。
;Toggle all bits of continuously MOV A ,#0FFH ;A = FF hex MOV P1,A ;Make P1 an input port MOV A,P1 ;get data from P1 MOV R7,A ;save it in Reg R7 ACALL DELAY ;wait MOV A,P1 ;get another data from P1 MOV R6,A ;save it in R6 ACALL DELAY ;wait MOV A,P1 ;get another data from P1 MOV R5,A ;save it in R5
Port 2 (Pins 21 through 28)
埠2總共占用8個管腳(管腳21到28),可用於輸入和輸出操作。就像P1(埠1)一樣,P2也不需要外部上拉電阻器,因爲它們已經在內部連接。它必須與P0一起使用,爲外部存儲器提供16位地址。所以它也被指定爲(A0-A7),如引腳圖所示。當8051連接到外部存儲器時,它爲16位地址的高8位提供路徑,並且不能用作I/O。復位時,埠2被配置爲輸入埠。以下代碼可用於將55H和AAH的交替值發送到埠2。
;Toggle all bits of continuously MOV A,#55 BACK: MOV P2,A ACALL DELAY CPL A ; complement(invert) reg. A SJMP BACK
如果埠2被配置爲用作輸出埠,則要再次將其用作輸入埠,請按以下代碼將1寫入其所有位,對其進行編程。
;Get a byte from P2 and send it to P1 MOV A,#0FFH ;A = FF hex MOV P2,A ;make P2 an input port BACK: MOV A,P2 ;get data from P2 MOV P1,A ;send it to Port 1 SJMP BACK ;keep doing that
Port 3 (Pins 10 through 17)
它也是8位的,可以用作輸入/輸出。這個埠提供一些非常重要的信號。P3.0和P3.1分別是RxD(接收器)和TxD(發送器),共同用於串行通信。P3.2和P3.3引腳用於外部中斷。P3.4和P3.5分別用於定時器T0和T1。P3.6和P3.7是寫入(WR)和讀取(RD)管腳。這些是激活的低引腳,意味著當給它們0時,它們將處於激活狀態,這些引腳用於在基於8031的系統中向外部ROM提供讀寫操作。
P3 Bit | Function | Pin |
---|---|---|
P3.0 | RxD | 10 |
P3.1 < | TxD | 11 |
P3.2 < | Complement of INT0 | 12 |
P3.3 < | INT1 | 13 |
P3.4 < | T0 | 14 |
P3.5 < | T1 | 15 |
P3.6 < | WR | 16 |
P3.7 < | Complement of RD | 17 |
Dual Role of Port 0 and Port 2
埠0的雙重角色也被指定爲AD0–AD7,因爲它可以用於數據和地址處理。在將8051連接到外部存儲器時,埠0可以提供地址和數據。然後,8051微控制器將輸入作爲地址或數據進行多路復用,以保存管腳。
埠2的雙重作用−除了作爲I/O工作外,埠P2還用於爲外部存儲器和埠0提供16位地址總線。埠P2也被指定爲(A8–A15),而埠0通過A0–A7提供較低的8位。換句話說,我們可以說,當8051連接到最大可達64KB的外部存儲器(ROM)時,這可以通過16位地址總線實現,因爲我們知道216=64KB。埠2用於16位地址的上8位,不能用於I/O,這是外部ROM的任何程序代碼的尋址方式。
Hardware Connection of Pins
Vcc−引腳40爲晶片供電,電壓爲+5 V。
接地−引腳20爲參考提供接地。
XTAL1、XTAL2(引腳18和引腳19)−8051具有片內振盪器,但需要外部時鐘來運行。石英晶體連接在晶片的XTAL1和XTAL2引腳之間。該晶體還需要兩個30pF的電容器來產生所需頻率的信號。每個電容器的一側接地。8051集成電路有不同的速度,這一切都取決於這個石英晶體,例如,一個20兆赫的微控制器需要一個頻率不超過20兆赫的晶體。
RST(引腳9)−它是一個輸入引腳和激活的高引腳。在該引腳上施加高脈衝(即1)時,微控制器將重置並終止所有活動。這個過程被稱爲開機復位。啓動上電復位將導致寄存器中的所有值丟失。它會將一個程序計數器設置爲所有0。爲了確保有效的復位輸入,高脈衝必須高達至少兩個機器周期,然後才允許低脈衝,這取決於電容值和充電速率。(Machine Cycle是執行單個指令所需的最小頻率量)。
EA或外部訪問(引腳31)−它是一個輸入引腳。這個引腳是一個激活的低引腳;當應用低脈衝時,它被激活。如果微控制器(8051/52)具有片內ROM,則EA(bar)引腳連接到Vcc。但是,在沒有片上ROM的8031微控制器中,代碼存儲在外部ROM中,然後由微控制器獲取。在這種情況下,我們必須將(引腳31)EA連接到Gnd,以指示程序代碼存儲在外部。
PSEN或程序存儲啓用(引腳29)−這也是一個激活的低引腳,即在施加低脈衝後激活。它是一個輸出管腳,與8031(即無ROM)系統中的EA管腳一起使用,允許在外部ROM中存儲程序代碼。
ALE或(地址鎖存啓用)−這是一個輸出引腳,處於高激活狀態。它特別用於8031集成電路與外部存儲器的連接。它可以在決定P0管腳是用作地址總線還是數據總線時使用。當ALE=1時,P0管腳作爲數據總線,當ALE=0時,P0管腳作爲地址總線。
I/O Ports and Bit Addressability
在爲8051編寫代碼時,它是8051最廣泛使用的特性。有時我們只需要訪問埠的1或2位而不是整個8位。8051提供訪問埠的單個位的能力。
以單位方式訪問埠時,我們使用語法「SETB X.Y」,其中X是埠號(0到3),Y是數據位D0-D7的位號(0到7),其中D0是LSB,D7是MSB。例如,「SETB P1.5」設置埠1的高位5。
下面的代碼演示了如何連續切換位P1.2。