51单片机的GPIO配置

发布者:HarmonyInLife最新更新时间:2023-07-11 来源: elecfans关键字:51单片机  GPIO配置  寄存器 手机看文章 扫描二维码
随时随地手机看文章

导语

通过单片机控制外围器件(LED,蜂鸣器,数码管,按键),本质上是对于单片机IO口的操作,相对于STM32,51单片机IO口模式较少,但了解IO的内部对于学习了解51单片机也由很大的帮助。


GPIO

GPIO(General Purpose Input Output),通用输入输出。既能当输入口使用,又能当输出口使用。端口,就是元器件上的一个引脚。可以通过软件去控制。


在大多数的时候,我们将IO口可以看为一个电子开关,通过向IO寄存器中写入相应的值,其输出的电平就随着寄存器的变化而变化,这是IO口的输出,在大多数的单片机中,需要去配置单片机的IO模式,是输入还是输出。


即需要预先初始化,配置GPIO的参数,再去使用GPIO。在51单片机中不支持这样的操作,即不能配置GPIO的参数。

51GPIO

poYBAGMV-fiAPEJpAACEFP8uBdw888.png

除去P3口的特殊引脚,P1/P2/P3/P4上电复位后为准双向口/弱上拉(传统8051的/0口)模式。P3口可通过配置其他寄存器使用第二功能。


P0口上电复位后为开漏输出,无法输出高电平,但是如果在output上接上拉电阻,则可以进行电平转换,且驱动能力较强。当P0口作为地址/数据复用总线使用时,不用外加上拉电阻(极少极少使用)学习单片机,需要购买器件可以去唯样商城,学生什么的还有优惠。

准双向

pYYBAGMV-gGASCo6AACz452Cayw864.png

准双向口输出类型可用作输出和输入功能而不需重新配置端口输出状态,其上电复位默认电平为高。


当端口输入为1时,其驱动能力极若,其允许外部将其拉低。如按键。当输出为低时,驱动能力很强,可吸收相当大的电流。因此采用由高电平向低电平转换的按键设计。


其设计采用3个上拉晶体管适应不同的需求,在3个上拉晶体管中,有1个上拉晶体管称为“弱上拉”,当端口寄存器为1且引脚本身也为1时打开。此上拉提供基本驱动电流使准双向口输出为1。


如果一个引脚输出为1而由外部装置下拉到低时,弱上拉关闭而“极弱上拉”维持开状态,为了把这个引脚强拉为低,外部装置必须有足够的灌电流能力使引脚上的电压降到门槛电压以下。


第2个上拉晶体管,称为“极弱上拉”,当端口锁存为1时打开。当引脚悬空时,这个极弱的上拉源产生很弱的上拉电流将引脚上拉为高电平。


第3个上拉晶体管称为“强上拉”。当端口锁存器由0到1跳变时,这个上拉用来加快准双向口由逻辑0到逻辑1转换。当发生这种情况时,强上拉打开约2个时钟以使引脚能够迅速地上拉到高电平。


准双向IO口在读取外部状态时,需要先写1,才可正确的读取外部正确状态。


开漏输出

当p0输出1时,由于内部结构,只能输出高阻态,需外加10K-4.7K的上拉电阻才可正常输出。当端口锁存器为0时,开漏输出关闭所有上拉晶体管。


如果外部有上拉电阻,开漏的I0口还可读外部状态,即此时被配置为开漏模式的I/0口还可作为输入I/0口。这种方式的下拉与准双向口相同。


Ps:以下是(STC89C52RC)数据手册中提供的一些关于数码管电路的一些参考,学习单片机,需要购买器件可以去唯样商城,学生什么的还有优惠。

poYBAGMV-hCAMVdqAAFULyIET00947.png


pYYBAGMV-iKAb_4jAADS4cOhZTo135.png


关键字:51单片机  GPIO配置  寄存器 引用地址:51单片机的GPIO配置

上一篇:以C51单片机为核心的嵌入式系统实时控制设计
下一篇:51单片机与CPLD的结合可让系统更加高效化

推荐阅读最新更新时间:2024-11-13 11:56

基于AT89CC51单片机和TA8435芯片实现步进电机步距角细分系统的设计
引言 步进电机是控制执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统和精密机械等领域。步进电机将电脉冲信号转换成相应角位移或线性位移的驱动装置,其转动速度和脉冲频率能严格同步,具有较高的重复定位精度,且没有累积误差。步进电机的驱动是由驱动电路实现的,驱动电路和步进电机构成一个有机整体。 步进电动机具有结构简单、可靠性高和成本低的优点,但同时也存在振荡、失步以及精度不够的问题,从而制约了在高精确度自动控制系统中的应用,如雕刻机、打印机、硬盘驱动器、绘图仪、钻孑L机等。采用细分控制可以很好地提高精度,因此对基于单片机控制的步进电机步距角细分系统进行设计与研究有着实际的意义。 1 原理与方案 1.1 细分原理
[单片机]
基于AT89CC<font color='red'>51单片机</font>和TA8435芯片实现步进电机步距角细分系统的设计
MSP430系统时钟寄存器详解
1、时钟源说明 ACLK辅助时钟:ACLK是LFXT1CLK(低频时钟源)信号经过1、2、4、8分频得到的。ACLK可由软件选为各个外围模块的时钟信号,一般用于低速外设。 MCLK系统主时钟:MCLK可由软件选择来自LFXT1CLK(低频时钟源)、XT2CLK(高频时钟源)、DCOCLK(数字控制RC振荡器)三者之一,然后经过1、2、4、8分频得到。MCLK主要用于CPU和系统。 SMCLK子系统时钟:可由软件选择来自LFXT1CLK(低频时钟源)和DCOCLK(数字控制RC振荡器),或者、XT2CLK(高频时钟源)和DCOCLK(数字控制RC振荡器)具体由器件决定,,然后经过1、2、4、8分频得到。SMCLK主要用于
[单片机]
MSP430系统时钟<font color='red'>寄存器</font>详解
单片机寄存器组注意重复使用原数据可能被覆盖危险
大家都知道51单片机有的寄存器R0-R7共有四组。很多朋友对寄存器组的使用时经常出现问题。虽然这并不是多难的问题,但如果出现错误,也会造成很严重的后果。 首先介绍一下51的寄存器组: 通过设置PSW寄存器的第3位和第4位可以任意切换寄存器组。在进入中断前,切换寄存器组,可以方便的保护原寄存器组的数据不被中断里的语句破坏,很方便。 RS1 RS0 字节地址 0 0 0组寄存器 00H~07H 0 1 1组寄存器 08H~0FH 1 0 2组寄存器 10H~17H 1 1 3组寄存器 18H~1FH RS1=PSW.4 RS0=PSW.3
[单片机]
51单片机学习——点亮第一个发光二极管
内容不多,才开始入门,终于搞明白怎么点亮二极管了 终于弄明白怎么使用keil 和STC 这两个开发单片机必备的软件了 接下来就是学习中的代码整合 移位操作 #include reg52.h //点亮第一个发光二级管 sbit D1=P1^0;//P1是P1口,P1^0代表D1,D1为自己命名的变量 main() { D1=0;//把高变频变成低电频 } 总线操作 点亮1,3,5,7个灯 #include reg52.h main() { P1=0xaa;//点亮1、3、5、7二极管,BUTONG } 实际操作的仅有P1 0~7,总共八个二极管
[单片机]
51单片机好学嘛?学完51单片机学什么?
作为一个资深的老工程师,我还是要客观地回答一下这个问题。 关于的“0基础15天学会单片机”等一些相关话题,我还是不能苟同的。 如果是0基础,没有1-2个月,是不可能掌握单片机开发的,甚至要花更多的时间。 我和大家一样,也是从0基础开始学习的,那个时候没有人带,仅C语言这块的学习就花了2个月,单片机的内部资源又花了2个月,前前后后花了大概半年时间,才入门单片机的开发。 51单片机 好学不好学? 必须要看个人的实际情况和学习的恒心。 如果理科毕业的学生,电路基础、C语言比较好的同学,学习单片机相对是比较容易的。 当然,好学不好学是一个话题,能不能学会又是另外一个话题,如果你是0基础,如果你愿意多花点时间去学习,学会单片机是没有问题
[单片机]
从零开始51单片机教程 —— 单片机条件转移指令
条件转移指令是指在满足一定条件时进行相对转移 判A内容是否为0转移指令 JZ rel JNZ rel 第一指令的功能是:如果(A)=0,则转移,不然次序执行(执行本指令的下一条指令)。转移到什么地方去呢?如果按照传统的办法,就要算偏移量,很麻烦,好在现在我们能借助于机器汇编了。因此这第指令我们能这样理解:JZ 标号。即转移到标号处。下面举一例说明: MOV A,R0 JZ L1 MOV R1,#00H AJMP L2 L1: MOV R1,#0FFH L2: SJMP L2 END 在执行上面这段程序前如果R0中的值是0的话,就转移到L1执行,因此最终的执行结果是R1中的值为0FFH。而如果R0中的值不
[单片机]
从零开始<font color='red'>51单片机</font>教程 —— 单片机条件转移指令
AT89S51单片机实验及系统板
AT89S51单片机实验及实践系统板(以后简介系统板)集成多个硬件资源模块,每个模块各自可以成为独立的单元,也可以相互组合,因此,可以为不同阶层的单片机爱好者及单片机开发者提供不同的开发环境。要购买此实验板请联系qq125739409 注明 实验板 每个硬件模块介绍如下: 1.继电器控制模块 系统板上提供了2路继电器控制模块,分布在系统板的最左上端区域中,输入信号由Realy in 1和Realy in 2端口输入分别控制两路继电器,继电器控制的信号分别由最上端的两个插针输入和输出。分别称为“com1 open1 short1”,“com2 open2 short2”,由于这个两个继电器是单刀单掷控制,当继电
[单片机]
AT89S<font color='red'>51单片机</font>实验及系统板
关于51单片机编程的一些错误总结
(1)这两天一直在受一个问题的干扰,那就是做单片机串口通信的时候,有些数据总是传得不对:当显示0~f这些数字的时候,显示没有错误,而显示其它8位数据的时候都错了,发送11(16进制)时,到单片机上居然是49(十进制),这显然是不对的,一直怀疑是程序的问题,反复地检查和修改之前编的一个数码管动态显示子程序,没有错,那只能是串口初始化和串口子程序有问题了……这么想太错了……先入为主,两天以来,都没解决(其实也没什么心情解决了,又是临近周末,都在看老友记),今天打定一定要解决了,就开始研究,刚开始一直在沿着老路,反复修改程序。。。。后来无意间一瞥,看到晶振上标着“12.000”,瞬间明白所有问题所在,立刻改为11.0592Mhz的晶振,
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved