51内核单片机如何设置IO口工作模式(如推挽输出)

之前在用STC12C5A60S2芯片时候,因为要使一个led灯亮一点,所以就想到了使这个IO口设置为推挽输出,这样输出的电流就会比较大,一般可以达到20mA.

所以这里我们介绍如何设置IO口的工作模式,以设置P3口推挽输出为例子。

首先,我们开门见山先亮出代码,很简单就这四行代码,如果了解的同学一看便知,不理解的同学没关系,看了后面就知道为什么这样设置了。简单来说就是两步:第一步控制相应寄存器,第二步设置相应寄存器值。

sfr P3M0=0xB2;  
sfr P3M1=0xB1;  
 P3M0=0x80;    
 P3M1=0x00;

第一步:我们都知道单片机都是靠寄存器控制的,要实现相应的功能就要设置相应的寄存器。这里也一样,我们要设置P3口的IO口工作模式,我们肯定要先知道P3口相应寄存器。而我们单片机中有一个特殊寄存器sfr,我们可以用它来控制相应的寄存器对其进行监视、管理、控制等。所以这里我们先要设置P3口的模式配置寄存器P3M0和P3M1。如下所示:

sfr P3M0=0xB2;  //控制P3口寄存器,P3M0为P3口模式配置寄存器0
sfr P3M1=0xB1;  //P3M1为P3口模式配置寄存器1

要控制相应寄存器我们当然要找到其相应地址,我们可以从相应的单片机芯片手册里面找,这里建议大家遇到单片机不懂的问题可以多看看芯片手册,上面讲解是最官方的。我们可以从芯片手册找到两个寄存器的地址分别为0xB2和0xB1。
在这里插入图片描述

第二步:根据自己想要模式来设置相应寄存器值,也可以单独设置相应IO口。我们将代码和下图结合来看,可以看出我们设置P3M0=0x80;P3M1=0x00;P3口有八位嘛。所以对应如下:
P3M1=0x00 ➩0000 0000;
P3M0=0x80 ➩1000 0000;
两两对应P3.7为01,从图中可知设置为强推挽输出,P3.6-P3.0皆为00,从图中可知设置为准双向口。

 P3M0=0x80;    //设置相应寄存器值
 P3M1=0x00;

在这里插入图片描述
相应的其他IO口设置,这里就不举例了。大家可以参考来举一反三。

本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。
另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞,谢谢~

### 51单片机推挽输出与开漏输出工作原理 #### 推挽输出推挽输出模式下,单片机的I/O端可以主动提供高低电平信号。这种结构由一对互补的晶体管组成,能够直接驱动负载,在高电平时导通上拉晶体管使电压接近电源电压;而在低电平时则导通下拉晶体管让电压降至地线水平[^2]。 ```c // 设置GPIO推挽输出模式(伪代码) void set_push_pull_output(GPIO_TypeDef* GPIOx, uint16_t pin){ // 配置寄存器以启用推挽输出... } ``` #### 开漏输出 相比之下,开漏输出仅能实现低电平的有效输出,即只具备向下拉电流的能力而无向上供电的功能。如果要获得高电平状态,则需依赖外接的上拉电阻来完成。对于经典51系列单片机中的P0端来说,由于内部并未集成上拉元件,所以在实际应用中通常需要额外添加上拉电阻才能正常运作[^1]。 ```c // 设置GPIO为开漏输出模式(伪代码) void set_open_drain_output(GPIO_TypeDef* GPIOx, uint16_t pin){ // 配置寄存器以启用电流吸收型输出... } ``` #### 主要差异总结 - **电气特性**: 推挽可以直接给出完整的逻辑电平变化范围,而开漏则依靠外部组件形成完整回路; - **应用场景**: 当面对不同电压等级接互联需求时,开漏形式更为灵活适用;而对于单纯追求高效能直驱能力的情形,推挽则是更优选项; - **功耗考量**: 使用开漏设计可减少不必要的静态功率消耗,并有助于保护敏感设备免受过压损害。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

OMGMac

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

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

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

打赏作者

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

抵扣说明:

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

余额充值