51单片机(STC8)-- GPIO输入输出


STC8H 系列单片机所有的 I/0 口均有 4 种工作模式,可使用软件对 I/O 口的工作模式进行配置:

  • 准双向/弱上拉(标准 8051 输出口模式)
  • 推挽输出/强上拉
  • 高阻输入(电流既不能流入也不能流出)
  • 开漏输出。

I/O口相关寄存器

端口数据寄存器

在这里插入图片描述
读写端口状态
写 0: 输出低电平到端口缓冲区
写 1: 输出高电平到端口缓冲区
读:直接读端口管脚上的电平

端口模式配置寄存器(PxM0,PxM1)

I/O口工作模式配置相关寄存器为PxM0和PxM1,即需要配置两个寄存器才能设置某个I/O的工作模式
在这里插入图片描述
I/O口的4种工作模式配置如下
在这里插入图片描述

端口上拉电阻控制寄存器(PxPU)

在这里插入图片描述
端口内部4.1K上拉电阻控制位(注: P3.0和P3.1口上的上拉电阻可能会略小一些)
0:禁止端口内部的 4.1K 上拉电阻
1:使能端口内部的 4.1K 上拉电阻

I/O寄存器除上述常用的寄存器外,还有端口施密特触发控制寄存器、端口电平转换速度控制寄存器、端口驱动电流控制寄存器和端口数字信号输入使能控制寄存器等可简单了解
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

关于I/O的注意事项

在这里插入图片描述

配置I/O口

每个I/O 的配置都需要使用两个寄存器进行设置
以 P0口为例,配置P0口需要使用 P0M0和 P0M1 两个寄存器进行配置,如下图所示
在这里插入图片描述
注意
虽然每 I/O 口在弱上拉(准双向口)/强推挽输出/开漏模式时都能承受 20mA 的灌电流(还是要加限流电阻,如1K、5600、4720等),在强推挽输出时能输出 20mA 的拉电流(也要加限流电阻),但整个芯片的工作电流推荐不要超过70mA,即从 Vcc流入的电流建议不要超过70mA,从Gnd流出电流建议不要超过70mA,整体流入/流出电流建议都不要超过 70mA

I/O设置demo

I/O端口模式
#include "stc8h.h"
#include "intrins. h "

void main()
{
		P_SW2 |= 0x80;			//使能访问XFR
		
		P0M0 = 0x00;				//设置P0.0~P0.7 为双向口模式
		P0M1 = 0x00
		P1M0 = 0xff;				//设置P1.0~P1.7 为推输出模式
		P1M1 = 0x00
		P2M0 = 0x00;				//设置P2.0~P2.7为高阻输入模式
		P2M1 = 0xff;
		P3M0 = 0xff;				//设置P3.0~P37 为开模式
		P3M1 = 0xff;
		
		while(1);
}
LED控制(I/O输出)
#include<stc8hxx.h>
#include<intrins.h>

sbit LED1 = P4^6;
sbit LED2 = P4^7;

void Delay_ms(u16 times)		//@24.000MHz
{
	unsigned char i, j;

	while(times--)
	{
		_nop_();
		i = 32;
		j = 40;
		do
		{
			while (--j);
		} while (--i);
	}
}

void main()
{
	P4M0 |= 0xC0;
	P4M1 &= 0x00;
	
	LED1 = 1;
	LED2 = 1;
	
	while(1){
		LED1 = 0;
		LED2 = 1;
		Delay_ms(200);
		LED1 = 1;
		LED2 = 0;
		Delay_ms(200);
	}
}
按键检测(I/O输入)
#include<stc8hxx.h>
#include<intrins.h>

sbit LED1 = P4^6;
sbit LED2 = P4^7;

sbit KEY1 = P3^5;

void Delay_ms(u16 times)		//@24.000MHz
{
	unsigned char i, j;

	while(times--)
	{
		_nop_();
		i = 32;
		j = 40;
		do
		{
			while (--j);
		} while (--i);
	}
}

void LED_Init()
{
	P4M0 |= 0xC0;
	P4M1 &= 0x00;
	
	LED1 = 1;
	LED2 = 1;
}

void KEY_init()
{
	P3M0 &= ~(0x01<<5);
	P3M1 &= ~(0x01<<5);
	
	P3PU = 0x01<<5;
}

void main()
{
	LED_Init();
	KEY_init();

	while(1){
		if(KEY1 == 0){
				Delay_ms(20);
				if(KEY1 == 0){
					LED1 = ~LED1;
					LED2 = ~LED2;
				}
				while(!KEY1);
		}
	}
}
  • 14
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: STC8单片机的GPIO库函数是一套用于控制GPIO(通用输入输出)引脚的函数集合。GPIO引脚可以进行输入和输出操作,并且可以通过使用GPIO库函数来配置引脚的工作模式和状态。 STC8单片机的GPIO库函数包括了以下几个主要函数: 1. GPIO_ModeConfig:用于配置引脚的工作模式,包括输入模式和输出模式。通过指定引脚号和工作模式参数,可以将引脚配置为普通或者开漏输出,以及浮空输入或带上下拉电阻的输入。 2. GPIO_SetBit:用于将某个引脚置高,即输出高电平。通过指定引脚号,可以使特定的引脚输出高电平。 3. GPIO_ClearBit:用于将某个引脚置低,即输出低电平。通过指定引脚号,可以使特定的引脚输出低电平。 4. GPIO_GetBit:用于获取某个引脚的当前电平状态。通过指定引脚号,可以获取该引脚的输入电平。 5. GPIO_InvertBit:用于反转某个引脚的电平状态。通过指定引脚号,可以将特定引脚的输出状态反转。 6. GPIO_ConfigIntBit:用于配置某个引脚的中断功能。通过指定引脚号和中断类型参数,可以在特定的引脚上使能上升沿、下降沿、或者双边沿触发中断。 使用STC8单片机的GPIO库函数,可以方便地控制引脚的工作模式、输出状态和输入电平。通过这些函数,我们可以实现对外设的控制和与外部设备的交互。 ### 回答2: STC8单片机GPIO库函数包括了一系列用于控制GPIO(General Purpose Input/Output)的函数。GPIO是单片机的通用输入输出,可以通过控制GPIO的电平状态实现与外部设备的数据交互。 STC8单片机GPIO库函数常用的有以下几个函数: 1. `void GPIO_Init(PUINT8 port, UINT8 pin, UINT8 mode)`:初始化GPIO。通过该函数可以设置指定的GPIO为输入或输出模式,其中port为具体的GPIO所属的端,pin为具体的GPIO号,mode为GPIO的模式。 2. `void GPIO_SetPin(PUINT8 port, UINT8 pin, UINT8 level)`:设置指定的GPIO电平状态。通过该函数可以将指定的GPIO设置为高电平或低电平,其中level参数为0表示低电平,非0表示高电平。 3. `void GPIO_TogglePin(PUINT8 port, UINT8 pin)`:翻转指定的GPIO电平状态。通过该函数可以将指定的GPIO电平状态翻转,即由高电平变为低电平,或由低电平变为高电平。 4. `UINT8 GPIO_ReadPin(PUINT8 port, UINT8 pin)`:读取指定的GPIO电平状态。通过该函数可以读取指定的GPIO的电平状态,返回值为0表示低电平,非0表示高电平。 通过使用以上几个GPIO库函数,可以对STC8单片机的GPIO进行初始化设置、电平状态设置、电平状态翻转以及读取电平状态等操作,实现对外设的控制和数据交互。同时,通过合理利用GPIO库函数,可以提高单片机的工作效率和性能。 ### 回答3: STC8单片机GPIO库函数是一组用于控制STC8系列单片机的通用输入输出的库函数。这些函数可以方便地实现对引脚的配置和操作,帮助开发者快速实现各种功能的电路设计。 具体来说,STC8单片机GPIO库函数包括以下几个主要函数: 1. `GPIO_ConfigPort` 函数:用于配置GPIO的模式和驱动能力,可以设置引脚为输入、输出模式,并调整驱动能力。 2. `GPIO_ReadInputData` 函数:用于读取输入引脚的电平值,可以获取引脚当前的逻辑电平,方便开发者实现输入信号的处理。 3. `GPIO_Write` 函数:用于向输出引脚写入电平值,可以设置引脚的输出电平,帮助开发者实现对外部设备的控制。 4. `GPIO_SetBits` 函数:用于将指定引脚的电平设置为高电平,可以快速将输出引脚置为高电平,实现特定的控制逻辑。 5. `GPIO_ResetBits` 函数:用于将指定引脚的电平设置为低电平,可以快速将输出引脚置为低电平,实现特定的控制逻辑。 通过使用这些GPIO库函数,开发者可以轻松地配置和操作STC8单片机的GPIO,实现不同的功能需求。同时,这些库函数还提供了一些方便的高级功能,如中断控制和引脚状态的快速读写操作,更加便于开发者进行项目开发和调试。总之,STC8单片机GPIO库函数为开发者提供了一种便捷高效的方式来控制和操作单片机的GPIO

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GenCoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值