c51单片机怎样读引脚
书上说读P10口引脚是,要先向P1口写1,但我发现没有写1能读到,写了反而不行,比如我用JBP1.0,其中P1.0接一个开关,没有向先向P1口写1,按开关,能跳转,写了1...
书上说读P10口引脚是,要先向P1口写1,但我发现没有写1能读到,写了反而不行,比如我用JB P1.0,其中P1.0接一个开关,没有向先向P1口写1,按开关,能跳转,写了1反而不行,为什么? 另外,读引脚和读端口怎么区分呢? 非常谢谢!!
展开
1个回答
展开全部
首先
你要知道对于单片机的管脚在系统上电复位的情况下
各个管脚都是高电平的
所以不用你写P1.0也是1,这时候你可以先让P1.0=0再重新写1。
读引脚的意思就是直接读P0外部引脚的电位,而读端口(锁存器)读的是内部与数据总线链接的锁存器的电位。
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端口(锁存器)的真实状态了。
你要知道对于单片机的管脚在系统上电复位的情况下
各个管脚都是高电平的
所以不用你写P1.0也是1,这时候你可以先让P1.0=0再重新写1。
读引脚的意思就是直接读P0外部引脚的电位,而读端口(锁存器)读的是内部与数据总线链接的锁存器的电位。
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端口(锁存器)的真实状态了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询