图2.16是P1口其中一位的结构原理图。P1口由8个这样的电路组成,其中8个D触发器构成了可储存8位二进制的P1口锁存器(即特殊功能寄存器P1),字节地址为90H;场效应管T与上拉电阻R组成输出驱动器,以增大P1口驱动负载的能力;三态门1和2在输出和输入时作为缓冲器使用。
P1口作为通用口使用,具有输出、读引脚、读锁存器三种工作方式。
图2.16 P1口的位结构图
1.输出方式
单片机执行P1口指令,如MOV P1,#data时,P1口工作于输出方式。此时数据经内部总线送入锁存器存储。如果某位的数据为1,则该位锁存器输出端Q=1→=0→T截止,从而引脚P1.X上输出高电平;反之,如果数据为0,则Q=0→=1→T导通,引脚P1.X上输出低电平。
2.读引脚方式(www.xing528.com)
单片机执行读P1口指令,如MOV A,P1时,P1口工作于读引脚方式。此时引脚P1.X上数据经三态门1进入内部总线,并送到累加器A。
在单片机执行读引脚操作时,如果锁存器原来寄存的数据Q=0,那么由于=1将使T导通,引脚P1.X会被钳位在低电平,此时即使P1.X外部电路的电平为1,从引脚读入的结果也会为0,为避免这种情况发生,使用读引脚指令前,必须先用输出指令置Q=1,目的是要T截止。可见,P1口作为输入口时是有条件的(要先写1),而输出是无条件的,因此称P1口为准双向口。
3.读锁存器方式
CPU在执行“读—修改—写”类输入指令(如:ANL P1,A)时,P1口工作于读锁存器方式。内部产生的“读锁存器”操作信号使锁存器Q端数据进入内部数据总线,在与累加器A进行逻辑运算之后,结果又送回P1的口锁存器并出现在引脚。此时采用读Q端而不是P1.X引脚,这是由于读口锁存器可以避免因外部电路原因使原引脚的状态发生变化造成的误读(例如,用一根口线驱动一个晶体管的基极,在晶体管的射极接地的情况下,当向口线写“1”时,晶体管导通,并把引脚的电平拉低到0.7V。这时若从引脚读数据,会把状态为1的数据误读为“0”。若从锁存器读,则不会读错)。
作输入口时,数据可以读自口锁存器,也可以读自引脚。这要根据输入操作采用的是“读锁存器”指令还是“读引脚”指令来决定。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。