本系列旨在记录自己学习STC8H系列芯片的学习过程
并希望可以为更多需要使用该系列芯片的朋友提供帮助
用户手册节选
工作模式
STC8H 系列单片机所有的 I/O 口均有 4 种工作模式:
准双向口/弱上拉(标准 8051 输出口模式)
推挽输出/强上拉、高阻输入(电流既不能流入也不能流出)
开漏输出
可使用软件对 I/O 口的工作模式进行配置。
注意事项
1、 P3.0 和 P3.1 口上电后的状态为弱上拉/准双向口模式
2、 除 P3.0 和 P3.1 外,其余所有 IO 口上电后的状态均为高阻输入状态,用户在使用 IO 口前必须先设置 IO 口模式
3、 芯片上电时如果不需要使用 USB 进行 ISP 下载,P3.0/P3.1/P3.2 这 3 个 I/O 口不能同时为低电平,否则会进入 USB 下载模式而无法运行用户代码
4、 芯片上电时,若 P3.0 和 P3.1 同时为低电平,P3.2 口会短时间由高阻输入状态切换到双
向口模式,用以读取 P3.2 口外部状态来判断是否需要进入 USB 下载模式
5、 当使用 P5.4 当作复位脚时,这个端口内部的 4K 上拉电阻会一直打开;但 P5.4 做普通I/O 口时,基于这个 I/O 口与复位脚共享管脚的特殊考量,端口内部的 4K 上拉电阻依然会打开大约 6.5 毫秒时间,再自动关闭(当用户的电路设计需要使用 P5.4 口驱动外部电路时,请务必考虑上电瞬间会有 6.5 毫秒时间的高电平的问题)
寄存器介绍
端口数据寄存器(Px)
与传统51系列引脚相同,直接写入或读取
端口模式配置寄存器(PxM0,PxM1)
用于控制端口输入、输出模式
M1 M0 工作模式
0 0 准双向口
0 1 推挽输出
1 0 高阻输入
1 1 开漏输出
端口上拉电阻控制寄存器(PxPU)
0:禁止端口内部的 4.1K 上拉电阻
1:使能端口内部的 4.1K 上拉电阻
端口施密特触发控制寄存器(PxNCS)
0:使能端口的施密特触发功能。(上电复位后默认使能施密特触发)
1:禁止端口的施密特触发功能。
端口电平转换速度控制寄存器(PxSR)
0:电平转换速度快,相应的上下冲会比较大
1:电平转换速度慢,相应的上下冲比较小
端口驱动电流控制寄存器(PxDR)
0:增强驱动能力
1:一般驱动能力
端口数字信号输入使能控制寄存器(PxIE)
0:禁止数字信号输入。若 I/O 被当作比较器输入口、ADC 输入口、触摸按键输入口或者为外部晶振接入脚等模拟口时,进入时钟停振模式前,必须设置为 0,否则会有额外的耗电。
1:使能数字信号输入。若 I/O 被当作数字口时,必须设置为 1,否 MCU 无法读取外部端口的电平。
代码示例(已尝试,后续陆续给出各项参数)
四种标准输入输出配置
#include <STC8H.H>
void main()
{
// 配置P1为准双向口(即传统8051,上拉能力较弱)
P1M0 = 0x00;
P1M1 = 0x00;
// 配置P2为推挽输出(高电平下不允许直接接地,有损毁上拉mos管风险)
P2M0 = 0xFF;
P2M1 = 0x00;
// 配置P3为高阻输入(用于检测电位高低,无电流输入输出)
P3M0 = 0x00;
P3M1 = 0xFF;
// 配置P4为开漏输出(无上拉电阻)
P4M0 = 0xFF;
P4M1 = 0xFF;
//剩下的高低电平输入输出与传统8051类似
while(1)
{
//以下为示例,通过P1读取,并用P2输出
if(P10 == 1)
p20 = 0;
else
P20 = 1;
//以下为示例,通过P3读取,P4输出
if(P30 == 1)
p40 = 0;
else
P40 = 1;
//以下为示例,通过P3读取,P1输出
if(P31 == 1)
p11 = 0;
else
P11 = 1;
}
}
更多配置后续更新(其实不难,自己试试也不错)