找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3445|回复: 4
收起左侧

关于51单片机P1-P3口准双向IO口的问题

[复制链接]
ID:482935 发表于 2020-5-9 08:50 | 显示全部楼层 |阅读模式
网上看了很多解释准双向IO口的解答,
对于输出方面没啥问题了我,单片机程序内部置0就输出0,内部置1就输出1。
但是对于输入,需要先单片机程序内部对IO口置1,然后才能读输入状态。(单片机上电复位后,所有IO口都自动为高电平状态,能读输入状态)
至于纯输入的引脚,比如P1.1的确很方便了。但是如果是跟一个传感器同行,而且是并行的通信,又能写入,又能读。这样的话,读的时候还先要再置1吗? 比如IIC协议的一些电子元件/传感器/屏幕。
另外我看了,很多电子元件都是在周期的下降沿才能被读数据,比如单总线协议的DS18B20温度传感器这个,一跟单总线又写又读的,这样先拉高,再拉低的下降沿读取的设计是为了迎合单片机的“输入特性”吗?

还有当我单片机程序内部置1了之后,外部的电子元件如果给单片机一个‘1’的高电平,我的IO口读取为1;外部电子元件给0,我读取为0。但是如果不接电子元件的话,我单片机内部程序置1了(或者只是上电复位重启后),直接读IO口电平,那就是永远‘1’高电平状态对吧? 除非有外部的电子元件给单片机‘0’的低电平信号? 所以就是准双向IO口其实本质是检测低电平? 高电平其实是自己本身所置的“1”?
回复

使用道具 举报

ID:267719 发表于 2020-5-9 09:24 | 显示全部楼层
问题1:需要置1
回复

使用道具 举报

ID:94031 发表于 2020-5-9 09:38 | 显示全部楼层
这是P1口内部结构: p1.png
要读P1口,必须先置1让V2为高电平,这样引脚高电平读引脚就是高电平,引脚低电平读引脚就是低电平,如果V2不置高为低,那么不管输入是什么读出来都是低电平。
回复

使用道具 举报

ID:267719 发表于 2020-5-9 09:49 | 显示全部楼层
问题1:需要置1,这时IO口弱上拉(P0口必须外部上拉),这时才能读到IO口。如果之前IO口置0了,那IO口对地短路,外部给什么信号都被连接到地了,读到的IO口始终为0.
问题2:下降沿的问题,主要不是迎合单片机的“输入特性”,而是符合协议特性。都按标准走。比如IIC,SPI等。这些都有标准的。
问题3:如果IO口未接(P0口除外),那置1后,由于弱上拉存在,故读到的IO口当然永远是1. P0口(外部IO悬空)读到的就是随机了。
以上这些问题都可以从51单片机的IO口等效电路可以分析到。
建议看下:
http://www.doc88.com/p-4109250816554.html

https://baijiahao.baidu.com/s?id ... r=spider&for=pc
回复

使用道具 举报

ID:213173 发表于 2020-5-9 09:50 | 显示全部楼层
准双向IO口的高电平是虚高,可以轻易被外部低电平信号拉低;低电平是实低,不会被外部高电平信号拉高。所以在读外部输入电平时IO口要先置1。一旦IO口寄存器被置1,不论外部因素导致该端口状态如何,IO口寄存器状态不变,只是端口状态随外部信号改变。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表