泰勒soc 发表于 2023-7-26 08:07:45

读手册时的疑惑——使能内部上拉电阻



注释说读端口前先使能内部上拉电阻,应该是配置P0PU寄存器吧?????????


乘风飞扬 发表于 2023-7-26 09:09:05

这里的弱上拉不是指内部4.1K的上拉电阻,而是指准双向模块的内部等效上拉结构:



熊仔 发表于 2023-7-26 13:23:52

本帖最后由 熊仔 于 2023-7-26 13:25 编辑

双向模式,弱上拉。
如果对IO输出为0。P00=0;
然后读取这个IO。即便外面的微弱的高电平,这时候都会被拉低。
value=P00;
结果是0

所以这个时候呢,要想读正确,必须使能弱上拉电阻。也就是对IO口写1操作。
P00=1;
value=P00;
这个时候读到的值才是IO口真正的电平。

这也是有些书本写的,51单片机IO读之前要写1操作。

清风迎明月 发表于 2023-9-5 16:24:35

本帖最后由 清风迎明月 于 2023-9-5 16:33 编辑

端口写0,见图1,会使Q4导通,不管管脚上是0还是1,都会把管脚电平拉低成0,读入数据出错。

端口写1,见图2,会使Q4截止,极弱上拉导通,给管脚提供VCC,管脚本身是高电平,弱上拉Q3参与导通,则读入1;管脚本身是低电平,弱上拉Q3截止,会拉低极弱管的输出,读进去就为0.

泰勒soc 发表于 2023-9-5 16:41:49

清风迎明月 发表于 2023-9-5 16:24
端口写0,见图1,会使Q4导通,不管管脚上是0还是1,都会把管脚电平拉低成0,读入数据出错。

端口写1,见图 ...

厉害厉害{:4_175:}

rengran 发表于 2023-11-30 19:47:39

这个注释容易引起误解,读取端口前先是端口输出为1,这样才能正确读取到端口,如果是输出为0,那么即使外部是高电平,你读到的也是低电平。
页: [1]
查看完整版本: 读手册时的疑惑——使能内部上拉电阻