在討論IO使用之前,先澄清一個基本觀念,就是有關IO的電氣特性,以目前最常使用的所生產之89S51或80S52晶片來說,其有關IO的電氣特性說明,節錄如下:

以上資料節錄自原廠89S52資料手冊第29頁,比較需注意的地方說明如下

1.P1~P3輸出為0時,流入之電流為I = 1.6 mA時, 此時輸出電壓不會超過0.45V。

2.P0,ALE,PSEN輸出為0時,流入之電流為I = 3.2 mA時, 此時輸出電壓不會超過0.45V。

3.P1~P3,ALE,PSEN輸出為1時,輸出之電流為I = 60 uA時, 此時輸出電壓最低可能降到2.4V。

4.P0當一般IO使用時,輸出為1時並不送出電流(開汲極型態),只有當位址資料線匯流排使用時,輸出之電流為I = 800 uA時, 此時輸出電壓最低可能降到2.4V。

因為輸出為1的時候輸出電流很小,這也就是為什麼做實驗時,利用IO埠直接推LED時,常採用反向的接法,輸出為0,LED導通發亮,輸出為1,會因電流等於0而不亮。

這樣子的設計,可讓使用者在外接按鍵時,可直接串接一個電阻到地線,不用再另接一個提升電阻(參考下圖,INT0接腳)。

8051預設接腳輸出為1,當按鍵不按時,讀入值為1,按下按鍵時,此微弱電流被導引至地線,讀入值為0,也不致因輸出電流過大而浪費電。

按鍵控制LED

笙泉的82G516輸出在不特別設定時,也有近似的功能(請參考資料手冊第135頁),資整理如下

Symbol

Parameter

Test Conditions

Min

Typ

Max

Unit

VOH1

高電位輸出電流
Output high current, P0/P1/P2/P3/P4
(近似雙向模式Quasi-bidirectional)

VDD=5.5V and IOH=-210 uA

2.4

-

-

V

VOL1

Output low current, P0/P1/P2/P3/P4
(Quasi-bidirectional)

VDD=5.5V and IOL=+17.6 mA

-

-

0.4

V

此晶片提供較大之驅動電流,但高電位時輸出電流仍然很小,主要是考量與8051電氣特性有一定相容性。

此外,82G516亦提供其他輸出模式可供選擇,以提供不同需求所需之電流,其中推拉輸出模式,高電位時輸出電流可達25mA;在輸入模式時為輸入高阻抗,亦無輸出電流。

Symbol

Parameter

Test Conditions

Min

Typ

Max

Unit

VOH2

Output high current, P0/P1/P2/P3/P4
(推拉輸出模式Push-pull output)

VDD=5.5V and IOH=-25.0mA

2.4

-

-

V

VOL2

Output low current, P0/P1/P2/P3/P4
(Push-pull output)

VDD=5.5V and IOL=+17.6mA

-

-

0.4

V

VOL3

Output low current, P0/P1/P2/P3/P4
(開汲極輸出Open-drain output)

VDD=5.5V and IOL=+17.6mA

-

-

0.4

V

82G516輸出4種設定模式組合如下(請參考資料手冊第36頁):

PxM0.y

PxM1.y

Port Mode

0

0

近似雙向模Quasi-bidirectional

0

1

推拉輸出模式Push-Pull Output

1

0

輸入Input-Only (High Impedance Input)

1

1

開汲極輸出Open-Drain Output

其中 x=0~4 (埠編號r), and y=0~7 (埠接腳). 暫存器 PxM0 and PxM1表列如下.

P0M0 (Address=93H, Port 0 Mode Register 0, Reset Value=0000,0000B)

7

6

5

4

3

2

1

0

P0M0.7

P0M0.6

P0M0.5

P0M0.4

P0M0.3

P0M0.2

P0M0.1

P0M0.0

P0M1 (Address=94H, Port 0 Mode Register 1, Reset Value=0000,0000B)

7

6

5

4

3

2

1

0

P0M1.7

P0M1.6

P0M1.5

P0M1.4

P0M1.3

P0M1.2

P0M1.1

P0M1.0

P1M0 (Address=91H, Port 1 Mode Register 0, Reset Value=0000,0000B)

7

6

5

4

3

2

1

0

P1M0.7

P1M0.6

P1M0.5

P1M0.4

P1M0.3

P1M0.2

P1M0.1

P1M0.0

P1M1 (Address=92H, Port 1 Mode Register 1, Reset Value=0000,0000B)

7

6

5

4

3

2

1

0

P1M1.7

P1M1.6

P1M1.5

P1M1.4

P1M1.3

P1M1.2

P1M1.1

P1M1.0

P2M0 (Address=95H, Port 2 Mode Register 0, Reset Value=0000,0000B)

7

6

5

4

3

2

1

0

P2M0.7

P2M0.6

P2M0.5

P2M0.4

P2M0.3

P2M0.2

P2M0.1

P2M0.0


P2M1 (Address=96H, Port 2 Mode Register 1, Reset Value=0000,0000B)

7

6

5

4

3

2

1

0

P2M1.7

P2M1.6

P2M1.5

P2M1.4

P2M1.3

P2M1.2

P2M1.1

P2M1.0

P3M0 (Address=B1H, Port 3 Mode Register 0, Reset Value=0000,0000B)

7

6

5

4

3

2

1

0

P3M0.7

P3M0.6

P3M0.5

P3M0.4

P3M0.3

P3M0.2

P3M0.1

P3M0.0

P3M1 (Address=B2H, Port 3 Mode Register 1, Reset Value=0000,0000B)

7

6

5

4

3

2

1

0

P3M1.7

P3M1.6

P3M1.5

P3M1.4

P3M1.3

P3M1.2

P3M1.1

P3M1.0

P4M0 (Address=B3H, Port 4 Mode Register 0, Reset Value=0000,0000B)

7

6

5

4

3

2

1

0

P4M0.7

P4M0.6

P4M0.5

P4M0.4

P4M0.3

P4M0.2

P4M0.1

P4M0.0

P4M1 (Address=B4H, Port 4 Mode Register 1, Reset Value=0000,0000B)

7

6

5

4

3

2

1

0

P4M1.7

P4M1.6

P4M1.5

P4M1.4

P4M1.3

P4M1.2

P4M1.1

P4M1.0