在討論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,也不致因輸出電流過大而浪費電。
笙泉的82G516輸出在不特別設定時,也有近似的功能(請參考資料手冊第135頁),資整理如下
Symbol |
Parameter |
Test Conditions |
Min |
Typ |
Max |
Unit |
VOH1 |
高電位輸出電流 |
VDD=5.5V and IOH=-210 uA |
2.4 |
- |
- |
V |
VOL1 |
Output low current, P0/P1/P2/P3/P4 |
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 |
VDD=5.5V and IOH=-25.0mA |
2.4 |
- |
- |
V |
VOL2 |
Output low current, P0/P1/P2/P3/P4 |
VDD=5.5V and IOL=+17.6mA |
- |
- |
0.4 |
V |
VOL3 |
Output low current, P0/P1/P2/P3/P4 |
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 |