找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 958|回复: 9
收起左侧

记录一下51单片机io口的双向理解,望纠正

[复制链接]
ID:874002 发表于 2024-4-8 16:50 | 显示全部楼层 |阅读模式
在51单片机中,当你配置一个端口(比如P1.1)为输出模式并设置其输出为高电平时,你实际上是在写入该端口的输出寄存器。当你读取同一个端口时,你读取的是该端口的输入寄存器,它反映了端口引脚的实际电平状态。
这里的关键点是理解51单片机端口寄存器的双向性。每个端口都有两个寄存器与之关联:一个用于输出(通常称为输出寄存器),另一个用于输入(通常称为输入寄存器)。当你向端口写入数据时,你实际上是在修改输出寄存器的值,这决定了端口引脚应该输出的电平。而当你从端口读取数据时,你读取的是输入寄存器的值,它反映了端口引脚当前的实际电平状态,这可能受到外部电路的影响。
因此,当你执行P1.1 = 1;时,你是在设置输出寄存器的P1.1位为高电平。随后,当你执行a = P1.1;时,你是在读取输入寄存器的P1.1位,获取的是端口引脚的实际电平状态。这两个操作涉及的是不同的寄存器,但都是通过相同的端口地址来访问的。
需要注意的是,当端口配置为输出模式时,输出寄存器的值会驱动端口引脚的电平,但输入寄存器的值会反映引脚的实际电平,这可能会受到外部电路的影响。因此,即使你设置了输出寄存器为高电平,读取输入寄存器时仍可能得到低电平,特别是当外部硬件响应速度过慢或存在其他干扰时。
总结来说,配置为输出并写入的是输出寄存器,而读取的是输入寄存器。虽然它们都是通过相同的端口地址来访问的,但它们代表了不同的功能:一个用于控制输出电平,另一个用于读取实际电平状态。
回复

使用道具 举报

ID:883242 发表于 2024-4-8 20:26 | 显示全部楼层
最关键的“线与”功能你忘了,51输出高电平,读取可以是高电平或者低电平,51输出低电平,读取永远是低电平。
回复

使用道具 举报

ID:517951 发表于 2024-4-8 20:43 | 显示全部楼层
51单片机设置为准双向口, io口输出为高, 就可以直接读取io口电平高低了.
回复

使用道具 举报

ID:79094 发表于 2024-4-8 21:17 | 显示全部楼层
说的 很正确
回复

使用道具 举报

ID:1109793 发表于 2024-4-8 22:04 | 显示全部楼层
Hephaestus 发表于 2024-4-8 20:26
最关键的“线与”功能你忘了,51输出高电平,读取可以是高电平或者低电平,51输出低电平,读取永远是低电平 ...

也不一定哦,比如输出0的时候,强制施加一个高,虽然可能烧掉IO,但是读出来的是啥呢
回复

使用道具 举报

ID:883242 发表于 2024-4-8 22:25 | 显示全部楼层
xiaobendan001 发表于 2024-4-8 22:04
也不一定哦,比如输出0的时候,强制施加一个高,虽然可能烧掉IO,但是读出来的是啥呢

既然你也知道烧掉,我也没啥可以再说的了。
回复

使用道具 举报

ID:961114 发表于 2024-4-9 08:57 | 显示全部楼层
4.13 I/0口的外部输入何时低(0.8V以下)何时高电平(2.2V以上) 当I/0口的外部输入电平在0.8V以下时,则单片机认为该I0口的外部输入为低电平;当IO口的外部输入电平在2.2V以上时,则单片机认为该IO口的外部输入为高电平。 实际制造时按I/0口的外部输入电平在1.2V以下时为低电平,在1.8V以上时为高电平。但由于存在制造误差,1.2V以下单片机不一定认为IO口的外部输入为低电平,1.8V以上单片机也不一定就认为IO口的外部输入为高电平。但我们保证0.8V以下可以为低电平,2.2V以上可以为高电平,外部输入电平在0.8V~2.2V之间不保证单片机能固定地识别IO口的外部输入为低电平还是为高电平。
回复

使用道具 举报

ID:996773 发表于 2024-4-9 09:06 | 显示全部楼层
xiaobendan001 发表于 2024-4-8 22:04
也不一定哦,比如输出0的时候,强制施加一个高,虽然可能烧掉IO,但是读出来的是啥呢

还是把单片机io口内部结构了解一下,如果看不懂就得回炉学习模电晶体管基础电路,如果还怕烧

io口,那我也没啥可以再说的了
回复

使用道具 举报

ID:1109793 发表于 2024-4-9 09:17 | 显示全部楼层
Hephaestus 发表于 2024-4-8 22:25
既然你也知道烧掉,我也没啥可以再说的了。

只是可能,控制好强度,是可以用至少几分钟没问题的
回复

使用道具 举报

ID:1109793 发表于 2024-4-9 09:18 | 显示全部楼层
hi等你 发表于 2024-4-9 09:06
还是把单片机io口内部结构了解一下,如果看不懂就得回炉学习模电晶体管基础电路,如果还怕烧

io口,那 ...

你说的就很好了,写是写的寄存器,实际上不一定是真实的,但是读,一般是真实的。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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