STC8H——IO

本系列旨在记录自己学习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;
	}
}

更多配置后续更新(其实不难,自己试试也不错)

### 使用 VSCode 和 PlatformIO 进行 STC8H1K28 单片机开发 #### 创建新项目 启动 VSCode 并打开 PlatformIO IDE。通过 `Ctrl+Shift+P` 打开命令面板并输入 "PlatformIO: New Project" 来创建一个新的工程[^1]。 选择目标板型号为 STC8H1K28,并指定项目的保存位置,之后等待平台自动下载所需的工具链和其他依赖项直至初始化过程结束。 #### 文件夹结构说明 构建完成后会自动生成标准的文件夹布局: - **src/** 存放源代码 `.c` 文件; - **include/** 放置头文件 `.h`; - **lib/** 可用于放置外部库或模块; 这种组织方式有助于保持良好的编码习惯以及便于维护和管理大型项目。 #### 配置硬件特定设置 对于 STC8H1K28 的编程而言,通常需要包含其专用寄存器定义头文件 `<reg51.h>` ,这可以确保编译器能够识别该系列微控制器特有的指令集架构特性[^2]。 ```cpp #include <reg51.h> // 包含适用于STC8H1K28的具体头文件 ``` #### 实际应用案例分享——简易电子温度计的设计与实现 一个具体的实例展示了如何基于 DS18B20 温度传感器配合 TM1650 数码显示器来制作一款简单实用的小型测温仪。此方案不仅实现了预期的功能而且完全兼容无误,在实际测试过程中表现稳定可靠[^3]。 为了帮助开发者更高效地开展工作,建议访问官方文档网站查阅更多详细的指南和技术资料,同时也鼓励探索 GitHub 上由社区贡献的各种开源资源链接以获得更多灵感和支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值