找回密码
 注册
搜索
查看: 2055|回复: 11

[MCU资料] 有谁能说清51读IO口时什么时候是读引脚,什么时候是读寄存器

[复制链接]
发表于 2007-6-14 19:20:32 | 显示全部楼层 |阅读模式
人气不旺,找个话题[em01][br]<p align=right><font color=red>+5 RD币</font></p>[br]<p align=right><font color=red>+5 RD币</font></p>
发表于 2007-6-14 22:22:46 | 显示全部楼层
慢慢会多的[em02]
点评回复

使用道具 举报

发表于 2007-6-15 22:16:59 | 显示全部楼层
其实在读端口时,也是在读端口的状态寄存器,只不过对于51单片机来讲,要读到正确的端口状态,先要将端口寄存器对应的外部引脚的Bit位写入1,然后再去读,这样读回来的值才是正确的外部端口的值。
点评回复

使用道具 举报

发表于 2007-6-16 14:27:03 | 显示全部楼层
书上是这么说的,但是我在用的时候感觉直接读(没有先置1)也没错,不清楚怎么回事。
点评回复

使用道具 举报

发表于 2007-6-17 13:40:50 | 显示全部楼层
这个可能跟早期芯片的硬件特性有关,现在的51芯片有很多公司做,端口特性也做了一些改良,所以可能不用那样做,也能读到正确的值,但这样做不保险,万一遇到没有改良的芯片,程序的逻辑就有能会出错,弄出一些BUG就麻烦了。 我就遇到过一个台湾公司的芯片,P0有很强的高电平驱动能力,并且不是OC门输出,我门为了获得3.3V的端口电平输出,接了上拉电阻到3.3V,以为 可以了,结果发现并不是那么回事,给我们造成了很大的麻烦,最后读了它的Datasheet,才弄清楚了问题的原因。
点评回复

使用道具 举报

发表于 2007-6-22 16:25:03 | 显示全部楼层
这就是书上所说的“准双向口”  要先写1才能读
点评回复

使用道具 举报

发表于 2007-6-22 16:39:11 | 显示全部楼层
至于到底是读“IO口”还是读端口锁存器的问题   应该是这样的 对于“读-修改-写”指令读到的端口的值是锁存器里面的值 而不是端口上的电平  若是普通读取端口的指令则是直接读端口电平 这个51会分析读取指令是普通读取指令还是“读-修改-写”指令 !  这个找一本51的书都会有介绍的
点评回复

使用道具 举报

发表于 2007-8-21 17:40:32 | 显示全部楼层
都是牛蛙啊!
点评回复

使用道具 举报

发表于 2007-8-23 15:19:20 | 显示全部楼层
现在有一点不明白,51单片机在执行程序时是以很快的速度重复执行的,那端口上的数据岂不是也在很快的循环变化?
点评回复

使用道具 举报

发表于 2008-8-2 09:31:33 | 显示全部楼层
做单片机的要清楚一点,就是每一款单片机都不一样;
在用之前一定要针对性的看它的文档;
尤其是特殊功能寄存器!
点评回复

使用道具 举报

发表于 2009-6-3 03:03:04 | 显示全部楼层
好啊 [em01]
点评回复

使用道具 举报

发表于 2009-6-3 17:42:06 | 显示全部楼层
有的单片机IO口的寄存器有两个寄存器,写IO口时只用一个,读IO口时有两个,有一个是latch,在读-修改-写的情况下要读latch里面的值。
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-8 08:31 , Processed in 0.046136 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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