
3.2 STC8A8K64S4A12的数字输入/输出端口
3.2.1 STC8A8K64S4A12单片机的数字输入/输出口概述
STC8A8K64S4A12最多有8个I/O口,59个I/O口线,端口都包含一个锁存器和一个输出驱动器。这种结构在数据输出时,具有锁存功能,即在重新输出新的数据之前,口线上的数据一直保持不变。但对输入信号是不锁存的,所以外设输入的数据必须保持到取数指令执行为止。为了便于叙述,以后将8个端口及其锁存器都表示为特殊功能寄存器P0~P7。
1.端口内部上拉电阻的使能控制
STC8A8K64S4A12单片机I/O口的引脚可以设置是否使用内部上拉电阻功能。通过设置端口上拉电阻控制寄存器P nUP( n=0,1,…,7,下同)进行设置。设置方法如下:
若设置PnUP. x(x=0,1,…,7)为0:禁止端口Pn. x内部的3.7 kΩ上拉电阻。
若设置PnUP. x(x=0,1,…,7)为1:使能端口Pn. x内部的3.7 kΩ上拉电阻。
2. I/O端口的复用功能
大多数I/O口线具有复用功能。用户可以通过程序设置相关寄存器,选择相应的功能,相关内容后续章节有详细介绍。下面简单介绍端口的复用功能。
(1)P0口
P0口的口线可复用为地址总线(AD0~AD7)、ADC转换输入(ADC8~ADC14)、串口3、串口4、定时器T3和T4,其复用功能见表3-1。
表3-1 P0口的复用功能

(2)P1口
P1口的口线可复用为ADC转换输入(ADC0~ADC7)、增强型PWM输出第二切换引脚(PWM0_2~PWM7_2)、SPI通信线、I2C通信线、串口1的第三切换引脚、串口2、定时器T2、捕获/比较/脉宽调制(CCP0~CCP3)、主时钟输出、外接晶振引脚,其复用功能见表3-2。
表3-2 P1口的复用功能

(3)P2口
P2口的口线可复用为地址总线(A8~A15)、增强型PWM输出(PWM0~PWM7)、捕获/比较/脉宽调制的第二切换引脚(CCP0_2~CCP3_2)、SPI通信线的第二切换引脚、I2C通信线的第二切换引脚,其复用功能见表3-3。
表3-3 P2口的复用功能

(4)P3口
P 3口的口线可复用为串口1、外部中断输入(INT0~INT4)、捕获/比较/脉宽调制的第四切换引脚(CCP0_4~CCP3_4)、定时器T0和T1、SPI/I2C通信线的第四切换引脚、外部总线的读/写控制第二切换引脚、比较器引脚等,其复用功能见表3-4。
表3-4 P3口的复用功能

(5)P4口
P4口的口线(单片机只引出P4.0~P4.4)可复用为外部总线的读/写控制第三切换引脚、地址锁存信号、串口1第四切换引脚、串口2的第二切换引脚、比较器输出等,其复用功能见表3-5。
表3-5 P4口的复用功能

(6)P5口
P5口的口线(单片机只引出P5.0~P5.5)可复用为复位引脚、串口3和串口4的第二切换引脚等,其复用功能见表3-6。
表3-6 P5口的复用功能

(7)P6口
P6口的口线可复用为增强型PWM输出第三切换引脚(PWM0_3~PWM7_3),其复用功能见表3-7。
表3-7 P6口的复用功能

(8)P7口
P7口的口线可复用为捕获/比较/脉宽调制、SPI通信线以及I2C通信线第三切换引脚,见表3-8。
表3-8 P7口的复用功能

各个I/O口的复用功能是通过设置下面的特殊功能寄存器实现的。
1)总线速度控制寄存器BUS_SPEED(地址为A1H,复位值为00xx xx00B)。
2)外设端口切换寄存器1 P_SW1(地址为A2H,复位值为nn00 000xB)。
3)外设端口切换寄存器2 P_SW2(地址为BAH,复位值为0x00 0000B)。
4)时钟选择寄存器CKSEL(地址为FE00H,复位值为0000 0000B)。
5)PWM控制寄存器PWMnCR( n=0,1…7)(地址为FF04H、FF14H、FF24H、FF34H、FF44H、FF54H、FF64H、FF74H,复位值均为00x0 0000B)。
上述寄存器的各位定义如下:

外部总线的读/写控制可以在3个地方切换,由RW_S[1:0]的两个控制位选择,其选择方法见表3-9。
表3-9 外部总线的读/写控制脚的切换

串口1可以在4个地方切换,由S1_S[1:0]的两个控制位选择,具体见表3-10。
表3-10 串口1的引脚切换

捕获/比较/脉宽调制(CCP)通道可以在4个地方切换,由CCP_S[1:0]的两个控制位选择,具体见表3-11。
表3-11 捕获/比较/脉宽调制通道的引脚切换

SPI可以在4个地方切换,由SPI_S[1:0]的两个控制位选择,具体见表3-12。
表3-12 SPI的引脚切换

I2C可以在4个地方切换,由I2C_S[1:0]的两个控制位选择,具体见表3-13。
表3-13 I2C的引脚切换

比较器输出可以在两个地方切换,由CMPO_S控制位选择,其中,0:比较器输出在P 3.4;1:比较器输出在P 4.1。
串口2可以在两个地方切换,由S2_S控制位选择,其中,0:串口2在[P1.0(RxD2),P1.1(TxD2)];1:串口2在[P4.0(RxD2),P4.2(TxD2)]。
串口3可以在两个地方切换,由S3_S控制位选择,其中,0:串口3在[P0.0(RxD3),P0.1(TxD3)];1:串口3在[P5.0(RxD3),P5.1(TxD3)]。
串口4可以在两个地方切换,由S4_S控制位选择,其中,0:串口4在[P0.2(RxD4),P0.3(TxD4)];1:串口4在[P5.2(RxD4),P5.3(TxD4)]。
PWM0~PWM7可以在3个地方切换,分别由C0_S[1:0]、C1_S[1:0]、C2_S[1:0]、C3_S[1:0]、C4_S[1:0]、C5_S[1:0]、C6_S[1:0]、C7_S[1:0]控制位控制,具体见表3-14。
表3-14 PWMn( n=0,1…7)的引脚切换

主时钟对外输出位置的选择由MCLKO_S控制位控制,其中,0:P5.4对外输出时钟;P1.6对外输出时钟。
3.2.2 STC8A8K64S4A12输入/输出口的工作模式
STC8A8K64S4A12单片机的所有I/O口均可由软件配置成4种工作模式之一:准双向口/弱上拉(标准8051输出口模式)、推挽输出/强上拉、高阻输入(电流既不能流入也不能流出)、开漏输出。每个口的工作模式由两个控制寄存器中的相应位控制(P nM1和P nM0, n=0、1、2、3、4、5、6、7)。配置方法如图3-4所示。

图3-4 I/O口的工作模式配置方法
例如,P0M1和P0M0用于设定P0口的工作模式,其中P0M1.7和P0M0.7用于设置P0.7的工作模式,P0M1.6和P0M0.6用于设置P0.6的工作模式,以此类推。设置关系见表3-15。STC8A8K64S4A12单片机上电复位后P5口为开漏输出模式,其他I/O口均为准双向口模式(标准8051的I/O口)。
表3-15 I/O口工作模式设置

例如,若设置P1.7为开漏,P1.6为推挽输出,P1.5为高阻输入,P1.4、P1.3、P1.2、P1.1和P1.0为准双向口,则可以使用下面的代码进行设置:

虽然STC8A8K64S4A12单片机的每个I/O口在准双向口/推挽输出/开漏模式时都能承受20mA的灌电流(还是要加限流电阻,如1 kΩ、560Ω、472Ω等),在推挽输出时能输出20mA的拉电流(也要加限流电阻),但整个芯片的工作电流推荐不要超过90mA。即从Vcc流入的电流不超过90mA,从GND流出的电流不超过90mA,整体流入/流出电流都不要超过90mA。
3.2.3 STC8A8K64S4A12输入/输出口的结构
下面介绍STC8A8K64S4A12单片机I/O口不同工作模式的结构。
1.准双向口(弱上拉)
准双向口工作模式下,I/O口某个位的结构如图3-5所示。

图3-5 准双向口工作模式的I/O位结构
该工作模式下,I/O口可用作输出和输入功能而不需重新配置端口状态。这是因为当端口输出为1时驱动能力很弱,允许外部装置将其拉低。当引脚输出为低电平时,它的驱动能力很强,可吸收相当大的电流。准双向口有3个上拉场效应晶体管适应不同的需要。
在3个上拉场效应晶体管中,有1个上拉场效应晶体管称为“弱上拉”,当端口寄存器为1且引脚本身也为1时打开。此上拉场效应晶体管提供基本驱动电流使准双向口输出为1。如果一个引脚输出为1而由外部装置下拉到低时,“弱上拉”关闭而“极弱上拉”维持开状态,为了把这个引脚强拉为低,外部装置必须有足够的灌电流能力使引脚上的电压降到门槛电压以下。对于5V单片机,“弱上拉”场效应晶体管的电流约为250μA;对于3.3 V单片机,“弱上拉”场效应晶体管的电流约为150μA。
第2个上拉场效应晶体管称为“极弱上拉”,当端口锁存为1时打开。当引脚悬空时,这个极弱的上拉源产生很弱的上拉电流将引脚上拉为高电平。对于5V单片机,“极弱上拉”场效应晶体管的电流约为18μA;对于3.3 V单片机,“极弱上拉”场效应晶体管的电流约为5μA。
第3个上拉场效应晶体管称为“强上拉”。当端口锁存器由0到1跳变时,这个上拉场效应晶体管用来加快准双向口由逻辑0到逻辑1转换。当发生这种情况时,强上拉打开约两个时钟以使引脚能够迅速地上拉到高电平。
准双向口(弱上拉)带有一个施密特触发输入以及一个干扰抑制电路。准双向口读外部状态前,要先锁存为‘1’,才可读到外部正确的状态。
2.推挽输出
推挽输出工作模式的I/O位结构如图3-6所示。推挽输出工作模式的下拉结构与准双向口的下拉结构相同,但当锁存器为“1”时可提供持续的强上拉。推挽工作模式一般用于需要更大驱动电流的情况。
工作于推挽输入/输出模式时,一个I/O位也带有一个施密特触发输入以及一个干扰抑制电路。此时,若输出高电平,拉电流最大可达 20 mA;若输出低电平,灌电流也可达20mA。

图3-6 推挽输出工作模式的I/O位结构
3.高阻输入
高阻输入工作模式的I/O位结构如图3-7所示。

图3-7 仅为输入(高阻)工作模式的I/O位结构
输入口带有一个施密特触发输入以及一个干扰抑制电路。注意,高阻输入工作模式下,I/O口不提供20 mA灌电流的能力。
4.开漏输出工作模式的结构
开漏输出工作模式的I/O位结构如图3-8所示。开漏模式既可读外部状态也可对外输出(高电平或低电平)。如果要正确读外部状态或需要对外输出高电平,则需外加上拉电阻。

图3-8 开漏输出工作模式的I/O位结构
当端口锁存器为0时,开漏输出关闭所有上拉场效应晶体管。当作为一个逻辑输出高电平时,这种配置方式必须有外部上拉,一般通过电阻外接到VCC。如果外部有上拉电阻,则开漏的I/O口还可读外部状态,即此时被配置为开漏模式的I/O口还可作为输入I/O口。这种方式的下拉与准双向口相同。
开漏端口带有一个施密特触发输入以及一个干扰抑制电路。这种工作模式下,输出低电平时,灌电流也可达20mA。