51的c语言问题

2019-03-24 19:51发布

今天上课,老师说:char temp;p1=0xff;temp=p1; 这样的语句是错误的,当时我没听清。好像是说某种情况不能这么读取,好像是因为由于P1最开始接的是都是高电平,然后给他输入低电平后,赋值后还是。。。。。。我隐约就记得这些了,到底是什么时候不能这么用啊? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
lalahu
2019-03-25 03:10
我们知道,8051具有“读锁存器”与“读引脚”两种能力。
单片机在执行从端口的单个位输入数据的指令(例如MOV C,P1.0)时,它需要读取引脚上的数据。此时,端口锁存器必须置为‘1’,否则,输出场效应管导通,回拉低引脚上的高输出电平。系统复位时,会把所有锁存器置‘1’,然后可以直接使用端口引脚作为输入而无需再明确设置端口锁存器。但是,如果端口锁存器被清零(如CLR P1.0),就不能再把该端口直接作为输入口使用,除非先把对应的锁存器置为‘1’(如 SETB P1.0)。

而在引脚负载很大的情况(如驱动晶体管)下,在执行“读——改——写”一类的指令(如CPL  P1.0)时,需要从锁存器中读取数据,以免错误地判断引脚电平。

一周热门 更多>