STC8增强型单片机开发——GPIO

一、理解电灯案例的代码

#include "STC8H.H"

int main() {
    P5M0 = 0x00;
    P5M1 = 0x00;
	
    P53 = 1;
    while(1) {}
}
  • #include "STC8H.H" 引入头文件
  • P5M0 = 0x00;P5M1 = 0x00;配置引脚模式
  • P53=1;配置IO引脚的电平

二、头文件STC8H.H

针对 STC8H 系列芯片的头文件,如果Keil软件没有配置STC8环境,此处是无法导入的。

STC8H.H文件的存储目录,在Keil安装目录下的 C51\INC\STC文件夹下。内部有其他STC芯片的头文件,如果你用的是其他芯片,则include对应的头文件。

三、引脚工作模式

  1. STC8H文档下载。通过STC-ISP软件进行资料下载。

  1. 打开STC8H用户手册。跳转到`I/O`口

其中我们可以通过手册获得一些信息:

  • 1个端口对应8个引脚
  • 每个端口都由一个寄存器控制
  • 系列不同,端口数量不同
  • 每个引脚可配置4种不同的工作模式

四、IO口的工作模式

工作模式

PnM1

PnM0

说明

准双向口

0

0

弱上拉,即可输入也可输出
灌电流可达20mA,拉电流为270~150uA

推挽输出

0

1

强上拉输出。可达20mA,要加限流电阻

高阻输入

1

0

电流既不能流入也不能流出,但可用于测电平

开漏输出

1

1

内部上拉电阻断开。开漏模式既可读外部状态也可对外输出(高电平或低电平)。如要正确读外部状态或需要对外输出高电平,需外加上拉电阻,否则读不到外部状态,也对外输不出高电平。

代码中:

P5M0 = 0x00;
P5M1 = 0x00;

指的是P5端口所有的引脚为准双向口输出,如果想设置为其他模式,可以根据实际需求进行配置。

当前我们电灯是要控制P5端口的3号引脚,也就是P53这个引脚。理论上只需要设置这个引脚的工作模式即可。

P5M1 &= ~0x08,	P5M0 &= ~0x08; //准双向口
P5M1 &= ~0x08,	P5M0 |=  0x08; //推挽输出
P5M1 |=  0x08,	P5M0 &= ~0x08; //高阻输入
P5M1 |=  0x08,	P5M0 |=  0x08; //开漏输出
  • P5表示的是5号端口
  • 0x08表示的是3号引脚,对应二进制 0000 1000

引脚编号和值的对应关系:

编号

0

0x01

1

0x02

2

0x04

3

0x08

4

0x10

5

0x20

6

0x40

7

0x80

如果想配置任意端口的任意引脚的工作模式,可以通过上面的方式类比出来。

五、软延时操作

软延时指的是通过代码来进行延时睡眠操作。我们可以借助工具来提供软延时的代码。

打开STC-ISP工具,进行如下操作:

如图所示我们关注几个点:

  • 系统频率
  • 睡眠时长
  • 指令集

指令集主要针对的是芯片型号,选择不同型号,旁边会提示是否包含你所开发的芯片,我们在此使用STC-Y6,因为我吗使用的是STC8H的系列。

睡眠时长:是你希望提供的睡眠时间长度,根据实际情况而定。

系统频率:需要注意的是需要和烧录频率一致,否则会出现时间不匹配问题。

根据以上操作我们可以实现,LED每隔一秒钟闪烁的逻辑。

#include "STC8H.H"

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	i = 57;
	j = 27;
	k = 112;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

int main() {
	P5M1 &= ~0x08,	P5M0 &= ~0x08; //准双向口
	//P5M1 &= ~0x08,	P5M0 |=  0x08; //推挽输出
	//P5M1 |=  0x08,	P5M0 &= ~0x08; //高阻输入
	//P5M1 |=  0x08,	P5M0 |=  0x08; //开漏输出
	
	while(1) {
		P53 = 1;//开
		Delay1000ms();
		P53 = 0;//关
		Delay1000ms();
	}
}

可以为P53引脚设置不同工作模式,来观察效果。

  • 17
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值