联系方式

    深圳市英瑞尔芯科技有限公司

    电话:

    186 6591 0262

    E-mail:

    sally@szinter.com.cn

    地址:

    深圳市福田区振华路现代之窗A座7B

51单片机的端口可以同时输入和输出吗?

发布时间:2023-02-19 15:34:00

来源:http://www.szinter.com.cn/news916728.html

从题主的问题概述来看,问题应该是:51单片机的引脚在读取之前为什么要先输出高电平?

GPIO_KEY=0x0f; //这个不是为了配置输出模式,而是为了下面的读取输入做准备。

这是个值得探讨的问题,当时我学51单片机的时候,也曾有过这个疑问,不过我是百度解决的哈!

首先,51单片机的端口可以同时输入和输出吗?

答案是,可以的。我猜题主已经学习了其他比较高级一点的单片机,如 ** R、MSP430、STM32等,这些单片机的GPIO在使用之前都是需要配置输入输出功能的。51单片机的GPIO使用起来比较简单,不需要使能时钟,不需要配置输入输出,可以直接使用。51单片机的有4个端口,这4个端口都是双向的I/O端口,其中P0口是开漏输出,即内部没有上拉电阻,而P1、P2、P3口内部都有上拉电阻,所以很多原理图的P0口都会加上拉电阻。

51单片机读取输入时,为什么要先写高电平呢?

就像题主的程序那样,

GPIO_KEY=0x0f; //低四位输出高电平,准备读取 if(GPIO_KEY!=0x0f) //读取低四位状态 { ........ }

以P1口为例,下面这个图是51单片机P1口的内部结构,

51单片机P1口内部结构

如下图,在读取之前,先输出1,Q' = 0,T截止,此时输入的是什么,单片机读取到的就是什么。

如果读取之前,不先写1会怎么样呢?

如果之前由于其他原因,输出过0,读取之前没有输出1,那么Q' = 1,T导通,引脚输出一直为0,无论外部输入为0或者1,单片机读取到的一直为0,如下图所示。所以为了保险起见,不管之前是否输出过0,在读取之前都先输出1,然后读取,这样就能保证读取到正确的输入状态了。

怎么样?题主理解了吗?欢迎私信交流哈!

以下是广告时间,可以忽略哈!

我的其他回答:

你有什么有单片机或开源硬件做的有意思的作品吗?想寒假自学下单片机,求教要实现图一二的功能,图三的那些零件够用吗,不够的话还缺什么?

我的专栏:电子电路开发学习

精选文章:

Jlink使用技巧系列教程索引Jlink使用技巧之J-Scope虚拟示波器功能Jlink使用技巧之读取STM32内部的程序Jlink使用技巧之虚拟串口功能Jlink使用技巧之单独下载HEX文件到单片机使用Keil下载单独的Hex文件到单片机内两个HC-05蓝牙模块互相绑定构成无线串口模块Keil开发环境如何生成BIN文件Keil开发环境下添加AStyle插件对C代码进行格式化处理

我的微信公众号:mcu149

我的公众号

欢迎大家关注我的个人博客

相关标签: