89C51单片机的P0~P3端口进行输入时为什么要设置为1?

如题所述

89C51单片机的P0~P3口不是标准意义的双向口 ,他只是准双向口
你可以对照着P0口的结构图看这段话,向端口写1,就是向锁存器写1,
也就是让其口输出FF,为什么,是这样的,给锁存器写1,那么锁存器
的反向端就输出0,那么和它相接的MOS管也就在截止状态,也就是呈高
阻态,这样P0口上数据就会从读引脚的三态缓冲器上正确的输入,如果
不写1,那么锁存器上次锁存的可能为0,那么反向端有可能出现1,这样
和反向端相接的MOS管就倒通,也就是直接拉到地,那么不管你P0口上输
入什么信号都会拉成低电平,输入就错了
双向口与准双向口的区别主要是:准双向口I/O口操作时做数据输入时需
要对其置1,否则若前一位为低电平,后一位输入的电平为高则MOS管拉不起来
导致出错。而双向口则不需要做此动作,因为双向口有悬浮态。
准双向口只能有效的读取0,而对1则是采用读取非零的方式,就是读入的时候要先向接口上写1,然后再读。真正的双向口正如其名,就是真正的双向io不需要任何预操作可直接读入读出
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-17
若不先对端口置1 ,端口锁存器中原来状态有可能为0,加到输入驱动场效应管栅极的信号为1,该场效应管就导通,对地呈现低阻抗,这是即使引脚上输入的是1的信号,也会因端口的低阻抗而使信号变低,使得外加的1信号读入后不一定是1,若先执行置1操作,则可以驱动场效应管截止,引脚信号直接加到三态缓冲器,实现正确的读入,
第2个回答  2013-06-17
这是芯片内部结构决定的,当需要该引脚读外部电平时先置1
第3个回答  2022-03-27
楼上从基本的原理上回答的比较完整。但有些人包括我之前都不是特别的理解。
个人的理解:
1、准双向一般只能用于数字输入输出,输入时为弱上拉状态,端口只有两种状态:高或低:很好理解!
2、准双向口读外部状态前,要先锁存为1,才能读到外部正确的状态:不太理解!

(1) 什么叫锁存为1?? 就是通俗的写1吧?
我的开关直接接端口和地,之所以端口设为准双向并写1(跟悬空脚的正确处理方法完全相同!!),判断开关状态(查询非中断)只用到“if某端口=0/1”就好,没搞其他代码,也没有"等待两个时钟_nop_()",。是因为这样既简单可靠又省电,而且还省掉了外接上/下拉电阻。 若设置为“高阻输入”去判断按键状态,还得额外增加合适阻值的上拉、下拉或分压电阻,STC内部已有好几种上拉电阻可用,不是自找麻烦么。
(2) 什么叫“读取外部正确的状态”??
只用于没外接上/下拉电阻的按键或开关状态之列的识别么?
如I2C外设的2脚连接及其读写,我感觉只设双向就好,无需也不用写1,实际我也没写1,也没有"等待两个时钟_nop_()",读写都没有发现问题,是因为I2C等外设的数据线上已经有上拉电阻了么?

那么;下面例程中的“双向口读写操作”中的读部分,不知道究竟该怎么准确应用?P00 = 1读取端口前先使能内部弱上拉电阻还等待两个时钟?
P00 = 1; //读取端口前先使能内部弱上拉电阻
_nop_(); //等待两个时钟
_nop_(); //
CY = P00; //读取端口状态
...本回答被网友采纳
第4个回答  2013-06-17
把图片复制下用画图工具看很清晰,里面有端口功能

89C51单片机的P0~P3端口进行输入时为什么要设置为1?
若不先对端口置1 ,端口锁存器中原来状态有可能为0,加到输入驱动场效应管栅极的信号为1,该场效应管就导通,对地呈现低阻抗,这是即使引脚上输入的是1的信号,也会因端口的低阻抗而使信号变低,使得外加的1信号读入后不一定是1,若先执行置1操作,则可以驱动场效应管截止,引脚信号直接加到三态...

89C51单片机的P0~P3端口进行输入时为什么要设置为1?
89C51单片机的P0~P3口不是标准意义的双向口 ,他只是准双向口 你可以对照着P0口的结构图看这段话,向端口写1,就是向锁存器写1,也就是让其口输出FF,为什么,是这样的,给锁存器写1,那么锁存器 的反向端就输出0,那么和它相接的MOS管也就在截止状态,也就是呈高 阻态,这样P0口上数据就...

单片机P0口作为输入,需要先置1吗?
P0作输入时不需要上拉电阻,但要先置1。因为P0口作一般I\/O口时上拉场效应管一直截止,所以如果不置1,下拉场效应管会导通,永远只能读到0。因此在输入前置1,使下拉场效应管截止,端口会处于高阻浮空状态,才可以正确读入数据。至于输出时,输出0是正常的,输出1时由于端口处于浮空状态不能正确输出1...

89c51单片机中P1,P2,P0,P3角输出是正是负?P0口做输入时是正极还是负极...
P0、P1 、P2、P3 可以是正可以使负,看你怎么置位了。置‘1’即为高电平,置‘0’即为低电平(51单片机I\/O口都为漏电极,置‘0’ 引脚上有正电压时,都会把电压导向地,使引脚形成低电势;置‘1’ 的原理同上)。但要注意,引脚不能使用高电压,高电流。否则芯片内部电路会被击穿。

89C51管脚说明
89C51管脚功能说明VCC: 供电电压,为微控制器提供电源。GND: 接地,用于电路的电气连接和信号参考点。P0口: 这是一个8位双向I\/O口,具有漏极开路特性,每脚能承受8TTL门电流。首次写入1时,被设置为高阻输入。P0口可用于外部程序数据存储器,作为数据地址的低八位。在Flash编程时,P0口作为原码输入...

单片机89c51中p0到p3口的作用是什么?
单片机89c51中,p0到p3口都是I\/O口。他们的具体作用如下:1、P0口用作地址(地址总线低8位)\/数据(8位数据总线)复用口时,是一个真正的双向口;用作通用IO口时,是一个准双向口,开漏输出,需要外置上拉电阻。2、P1口作I\/O口时与P2,P3一样不要外接上拉电阻,但是作输入使用时应注意先向其写"...

典型51单片机的P0,P1,P2,P3口都有哪些功能?
1、P0口:真正的双向口,输出锁存,输入缓冲,输入前要先置1(KEIL包含的头文件已经有动作了,如果用汇编,要人工置1),输出为漏极开路,输出一般都要上拉电阻。输入为高阻态,能驱动8个TTL负载。当有片外存储器时,作数据线使用。 2、P1口:最简单的口,输入也要先置1,无高阻态,...

89C51P0口用作通用I\/O口输入时,若通过TTL"OC"门输入数据,应注意什么...
单片机I\/O口电流太小驱动能力弱 接上拉电阻保证电流大 做输入时应先置高电平 然后读数

89C51单片机有哪5个中断源,怎样开放和禁止中断?怎样设置优先级?
89C51单片机根据中断优先级来处理。高优先级的中断可以打断低优先级中断的处理,但同优先级的中断则按照先入先出的原则处理。5. 各个中断源的优先级可以根据实际需求进行设置,通过在IP寄存器中对应位置设置1来实现。这样可以确保系统在多中断同时发生时,能够按照预设的优先级顺序进行响应和处理。

单片机能够读取什么类型的电信号
如果是89C51类单片机,读取输入信号前,先对输入端写1。输入信号一般采用低电平有效,当读入的是高电平,表示还没有信号;反之,读入的是低电平,表示有信号了。P0端口需要外接电阻到VCC;而P1~P3端口不需要外接电阻。

相似回答