1、GPIO寄存器
端口数据寄存器(Px)
- 写0: 输出低电平到端口缓冲区
- 写1: 输出高电平到端口缓冲区
- 读: 直接读端口管脚上的电平
端口模式配置寄存器(PxM0,PxM1)
PnM1 | PnM0 | I/O工作状态 |
---|---|---|
0 | 0 | 准双向口(弱上拉),灌电流20ma,拉电流270-150uA |
0 | 1 | 推挽输出(强上拉输出,最大20mA,需要加限流电阻) |
1 | 0 | 高阻输入(电流既不能流入也不能流出) |
1 | 1 | 开漏输出,既可以读取外部状态也可以对外输出。作为输入需要上拉电阻 |
- 当有I/O口被选择为ADC输入通道时,必须设置PxM0/PxM1寄存器将I/O口模式设置成输入模式。
- MCU进入掉电模式/时钟停振模式后,仍需使能ADC通道,则需要设置PxIE寄存器关闭数字输入,才能保证不会有额外的耗电
- 虽然每个I/O口在弱上拉(准双向口)/强推挽输出/开漏模式时都能承受20mA的灌电流(还是要加限流电阻),整个芯片的工作电流推荐不要超过70mA
端口上拉电阻控制寄存器(PxPU)
- 0: 禁止端口内部的4.1K上拉电阻
- 1: 使能端口内部的4.1K上拉电阻
端口施密特触发器控制寄存器(PxNCS)
- 0: 使能端口的施密特触发功能(商店复位后默认使用施密特触发)
- 1: 禁止端口的施密特触发功能
端口电平转换速度控制寄存器(PxSR)
- 0: 电平转换速度快,相应的上下冲会比较大
- 1: 电平装换速度慢,相应的上下冲比较小
端口驱动电流控制寄存器(PxDR)
- 0: 增强驱动能力
- 1: 一般驱动能力
端口数字信号输入是能控制寄存器(PxIE)
- 0: 禁止数字信号输入。若I/0被当做比较器输入口、ADC输入口、触摸按键输入口或者为外部晶振接入脚等模拟口时,进入时钟停振模式前,必须设置,否则会额外耗电
- 1: 是能数字信号输入。若I/O被当做数字口时,必须设置为1,否则MCU无法读取外部端口的电平。
#include <STC8h.h>
#include <intrins.h>
sbit led0 = P1^0;
void main ()
{
P1M0 = 0xff; // P1 推挽模式
P1M1 = 0x00;
P1PU |= 0x00; // P1 上拉电阻关闭
P10 = 0; // p1.0 输出高电平
led0 = 1; // p1.0 输出低电平
_nop_(); //等待两个时钟
_nop_(); //
CY = P00; //读取端口状态
while(1){}
}