在单片机中,当P0口作为输入口使用时,为什么要区分" 读引脚" 和"读锁存器"
不光是P0口,标准51单片机的所有IO口都有“读引脚”和“读锁存器”的问题。
其实这类问题也很好解释,自己去看看51单片机的IO脚框图就豁然开朗了。
80C51单片机有P0-P3四个P口,以P0为例说明:
要搞清这个问题,就要明白p0口的内部结构。P0口是由锁存器经两个驱动场效应管和外部引脚相连的。
读引脚的意思就是直接读P0外部引脚的电位,而读端口(锁存器)读的是内部与数据总线链接的锁存器的电位。
两者不同。一般来说,读取P0的数据,都是读引脚,目的是获取与P0相连的外部电路的状态。而读端口是在执行下述语句时由CPU自行完成的:
inc P0;给p0加1
执行这个语句时 ,采用“读-改-写”的过程,先读取p0的端口数据,再加1,然后送到p0锁存器里。注意这个端口数据跟p0的引脚状态不一样,比如你事先给p0写进69H,p0里数据就是69H,而引脚上的状态因为你没有执行MOV A,p0之类的指令,它是不会进到p0的锁存器里去的。由此可见,所谓的读端口,不是读取p0的状态,而是在执行inc之类的指令时由CPU自行完成的,
读引脚就是读取p0口状态了。读引脚时要注意:先要给p0写FFH,使它的场效应管T2和地断开。
因为p0口的场效应管T2一端接地,一端与外部引脚相连,由P0的锁存器控制,当给锁存器写1时,它和地断开,写0时和地相连,所以写零时读到的总是低电平。
试想你现在要读P0引脚,按理说P0与外部电路相连,外部电路的是什么状态,就应该读到什么,但如果p0口的场效应管T2一端接地的话,它会把p0口电位拉低,你读到的总是低电平0,所以要先给p0写FFH,把p0的场效应管T2和地断开,再读数时就是真实状态了。当外部电路断开,再读时读到的就是p0端口(锁存器)的真实状态了。
还不明白给hychyc_2008发消息,或给hychyc_2008@163.com发邮件。
不光是P0口,标准51单片机的所有IO口都有“读引脚”和“读锁存器”的问题。其实这类问题也很好解释,自己去看看51单片机的IO脚框图就豁然开朗了。
读引脚的意思就是直接读P0外部引脚的电位,而读端口(锁存器)读的是内部与数据总线链接的锁存器的电位。一般来说,读取P0的数据,都是读引脚,目的是获取与P0相连的外部电路的状态。而读端口是在执行下述语句时由CPU自行完成的。
外部扩展存储器时,当做数据总线(如图1中的D0~D7为数据总线接口)P0.0——P0.7是P0口的8位双向口线。第一功能为基本输入输出;第二功能是在系统扩展时,分时做为数据总路线和低8位地址总线。
扩展资料:
控制器由程序计数器、指令寄存器、指令译码器、时序发生器和操作控制器等组成,是发布命令的“决策机构”,即协调和指挥整个微机系统的操作。其主要功能有:
(1) 从内存中取出一条指令,并指出下一条指令在内存中的位置。
(2) 对指令进行译码和测试,并产生相应的操作控制信号,以便于执行规定的动作。
(3) 指挥并控制CPU、内存和输入输出设备之间数据流动的方向。
参考资料来源:百度百科-单片机
要搞清这个问题,就要明白p0口的内部结构。P0口是由锁存器经两个驱动场效应管和外部引脚相连的。
读引脚的意思就是直接读P0外部引脚的电位,而读端口(锁存器)读的是内部与数据总线链接的锁存器的电位。
两者不同。一般来说,读取P0的数据,都是读引脚,目的是获取与P0相连的外部电路的状态。而读端口是在执行下述语句时由CPU自行完成的:
inc P0;给p0加1
执行这个语句时 ,采用“读-改-写”的过程,先读取p0的端口数据,再加1,然后送到p0锁存器里。注意这个端口数据跟p0的引脚状态不一样,比如你事先给p0写进69H,p0里数据就是69H,而引脚上的状态因为你没有执行MOV A,p0之类的指令,它是不会进到p0的锁存器里去的。由此可见,所谓的读端口,不是读取p0的状态,而是在执行inc之类的指令时由CPU自行完成的,
读引脚就是读取p0口状态了。读引脚时要注意:先要给p0写FFH,使它的场效应管T2和地断开。
因为p0口的场效应管T2一端接地,一端与外部引脚相连,由P0的锁存器控制,当给锁存器写1时,它和地断开,写0时和地相连,所以写零时读到的总是低电平。
试想你现在要读P0引脚,按理说P0与外部电路相连,外部电路的是什么状态,就应该读到什么,但如果p0口的场效应管T2一端接地的话,它会把p0口电位拉低,你读到的总是低电平0,所以要先给p0写FFH,把p0的场效应管T2和地断开,再读数时就是真实状态了。当外部电路断开,再读时读到的就是p0端口(锁存器)的真实状态了。
还不明白给hychyc_2008发消息,或给hychyc_2008@163.com发邮件。
实际上不光是P0口,所有口都需要区分的。
这里问题的关键是:你想读到什么?是你事先通过指令写入口锁存器中的数,还是由外部电路决定的口线的高低电平。因为这两个数有可能是不一样的。
口的输出锁存器是通过控制一个晶体管是否对地导通连接到口的对外引脚上的,该晶体管的C极通过上拉电阻接Vcc(当然P0口的上拉电阻需要外部加上,其它口内部已经有大约40K的弱上拉)
于是会出现这样一种情况,例如你向某条口线写了1,锁存器的值是就是1,当然此时对应的晶体管截止,由于有上拉电阻,所以口线应该也是1(高电平),但如果你的口线是控制一个外部npn晶体管的通断,上拉电阻就相当于那个晶体管的基极电阻,于是它会导通。向口写0则口线会变低(<0.3V),它会截止,这都很正常。
问题是,当口锁存器输出1时,由于外部晶体管BE结导通,电压只有0.7V(也就是口线或者说口的引脚的电压只有0.7V),此时你读入锁存器时得到的是1,但读引脚时会得到0(至少要大于2.4V才算高电平)。例如你想改变该控制信号的状态,通常是先读入,取反,然后再写出,此时必须是读入锁存器才能实现正确的操作!如果是读引脚,本来输出的是1,读入的(引脚)却是0,取反后得1,状态是不会改变的!
在单片机中,当P0口作为输入口使用时,为什么要区分" 读引脚" 和"读锁...
不光是P0口,标准51单片机的所有IO口都有“读引脚”和“读锁存器”的问题。其实这类问题也很好解释,自己去看看51单片机的IO脚框图就豁然开朗了。读引脚的意思就是直接读P0外部引脚的电位,而读端口(锁存器)读的是内部与数据总线链接的锁存器的电位。一般来说,读取P0的数据,都是读引脚,目的是...
单片机中P0口作为输出为什么要上拉电阻?
上拉电阻就是从电源高电平引出的电阻接到输出。P0口作为IO口输出的时候时输出低电平为0输出高电平为高组态(并非5V,相当于悬空状态)。也就是说PO口不能真正的输出高电平,给所接的负载提供电流,因此必须接上拉电阻(一电阻连接到VCC),由电源通过这个上拉电阻给负载提供电流。由于P0口内部没有上拉电...
51单片机的数据总线为什么是P0口?
51 单片机的数据总线为P0 口,P0 口为双向数据通道,CPU 从P0 口送出和读回数据。为了节约芯片引脚,采用P0 口复用方式,除了作为数据总线外,在ALE 信号时序匹配下,通过外置的数据锁存器,在总线访问前半周期从P0口送出低8位地址,后半周期从P0 口送出8 位数据。系列单片机的控制总线包括读控制...
51单片机p0p1p2p3口,到底有啥区别啊,他们的基本功能有啥
51单片机中,P0、P1、P2、P3口的主要区别及基本功能:一、端口区别:1. P0口:拥有上拉电阻,可驱动LED等负载。作为地址总线使用时,可以分时复用。2. P1口:内部带有上拉电阻,主要用作输入\/输出端口。具有双向I\/O功能。3. P2口:作为地址总线的高位使用,与低位的P0口共同组成完整的地址总线。在...
单片机P0口是什么?
当P0=0时P0点为低电位,发光管亮起,流过D1的电流约为15mA。当P0=1时,P0点为悬空,但发光管和180欧电阻都是低阻抗元件,P点电位就为高电位,再说也无任何输出影响,因此这样电路是可以的。51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来...
单片机的P0 P1 P2 P3各口分别是什么作用?
一、P0口:真正的双向口,输出锁存,输入缓冲,输入前要先置1(KEIL包含的头文件已经有动作了,如果用汇编,要人工置1),输出为漏极开路,输出一般都要上拉电阻。输入为高阻态,能驱动8个TTL负载。当有片外存储器时,作数据线使用。二、P1口:最简单的口,输入也要先置1,无高阻态,只能是输出...
51单片机P0 口 ,只是传输数据,不带负载,要不要上拉电阻?
1 做地址\/数据总线时和做输入I\/O口时,p0口不用接上拉电阻。2 但当做输出I\/O口时,p0口必须要接上拉电阻才可以。P0口是集电极开路输出,也就是OC门,这种结构没有输出高电平的能力,就相当于一个一端接地的开关, 按下去就输出低电平0V,断开就没有电压,是悬空状态,至于用不用上拉电阻,取决于...
p0口是输出还是输入
一、意思不同 P0口作输出口用时,需加上拉电阻。P0口有复用功能。当对外部存储器进行读写操作时,P0口先是提供外部存储器的低8位地址,供外部存储器地址锁存器锁存,然后充当数据线,用于写出或读入数据。P1口、P2口只是普通IO口。二、功能不同 P0口第一个功能是数据接口,第二个功能是地址低八...
单片机P0口作为输入,需要先置1吗?
P0作输入时不需要上拉电阻,但要先置1。因为P0口作一般I\/O口时上拉场效应管一直截止,所以如果不置1,下拉场效应管会导通,永远只能读到0。因此在输入前置1,使下拉场效应管截止,端口会处于高阻浮空状态,才可以正确读入数据。至于输出时,输出0是正常的,输出1时由于端口处于浮空状态不能正确输出1...
单片机p0口工作原理
多路开关:在51单片机中,当内部的存储器够用(也就是不需要外扩展存储器时,这里讲的存储器包括数据存储器及程序存储器)时,P0口可以作为通用的输入输出端口(即I\/O)使用,对于8031(内部没有ROM)的单片机或者编写的程序超过了单片机内部的存储器容量,需要外扩存储器时,P0口就作为'地址\/数据’总线使用...
徭园莫刻: P0作输入时不需要上拉电阻,但要先置1. 因为P0口作一般I/O口时上拉场效应管一直截止,所以如果不置1,下拉场效应管会导通,永远只能读到0. 因此在输入前置1,使下拉场效应管截止,端口会处于高阻浮空状态,才可以正确读入数据. 至于输出时,输出0是正常的,输出1时由于端口处于浮空状态不能正确输出1,因此才需要接上拉电阻.
兴海县17045996489: 在单片机中,当P0口作为输入口使用时,为什么要区分" 读引脚" 和"读锁存器" - ?
徭园莫刻: 要搞清这个问题,就要明白p0口的内部结构.P0口是由锁存器经两个驱动场效应管和外部引脚相连的. 读引脚的意思就是直接读P0外部引脚的电位,而读端口(锁存器)读的是内部与数据总线链接的锁存器的电位. 两者不同.一般来说,读取...
兴海县17045996489: 51单片机P0口做输入口时需要先写一并且外接上拉电阻,是这样的吗? - ?
徭园莫刻: 51单片机P0口做输入口时需要先写1即可,外部不需要上拉电阻.其实,单片机上电复位时,P0已全部为置1状态,就可以直接读输入状态了.只有输出过低电平,再读输入状态时需先写1.否则,P0口从未输出过低电平,也不需要先写1就可以读.即便是先写1,对读输入状态没有影响.
兴海县17045996489: 单片机将p0置为输入口后该口的电平始终为高,为什么? - ?
徭园莫刻: 究其原因,将P0口置位输入后,电路其实就等价于一个上拉电阻,就是高电平如果你的P0口没有和其他信号相连,那么肯定是高电平.如果和高电平信号相连,和低电平信号相连就是低电平,悬空时自然为高电平
兴海县17045996489: MCS51单片机的并行I\O端口(P0 - P3),如果要作为输入口使用,应如何操作,为什么 - ?
徭园莫刻: 单片机的4 个口都 可作为口使用,并不是说只有口能作为口. 应该是、和除了口外还有第二功能 .而口只有口功能. 口可作为数据总线口,它可以对外部存储器低8 位读写.口也可以作为系统 扩展时的高8 位地址.口除了.
兴海县17045996489: 单片机的P0口作为输入时,时刻检测P0口的变化需要什么指令?求具体说明 - ?
徭园莫刻: MOV 指令就可以了,如; LOOP:MOV A,P0 CJNE A,R2,CHULI SJMP LOOP CHULI:MOV R2,A..............
兴海县17045996489: 51单片机的P0口能不能同时既作为输入口又作为输出口 - ?
徭园莫刻: 可以既作为输入,又作为输出. 不过无法同时作为输入和输出. 即在运行的整个周期中,可以在t0到t1时间内作为输入口,而在t1到t2时间内作为输出口. 但是二者时间不能有交叉. 也就是说,P0是输入还是输出,可以软件进行实时配置,但无论是哪种配置,在同一时间只有一种情况会生效.要么输入,要么输出.
兴海县17045996489: 51单片机各口功能是哪些?p0p1p2p3 - ?
徭园莫刻: 首先,51单片机p0p1p2p3口,都可以当准IO口使用,也就是既可以作输出口,也可以作输入口.区别在于: 1、P0口作输出口用时,需加上拉电阻. 2、P0口有复用功能.当对外部存储器进行读写操作时,P0口先是提供外部存储器的低8位地...