sfr P0 = 0x80; sfr P1 = 0x90; sfr P2 = 0xA0; sfr P3 = 0xB0 指的是端口寄存器的地址,并不是端口初始值。
二,如果你的发光二极管是高电平驱动亮,则P0口输出10000000时,发光管会亮
但是这个1000000值不是你加载头文件得到的值,是在程序赋值得到的。
补充回答:
你可以写一个简单的程序,不对端口做任何操作,然后你测量端口电压;
如果端口接有LED,而且是高电平驱动的,可以观察LED是否亮,但最好还是测量电压
不是,sfr是c51特有的关键字,意思是声明定义特殊寄存器,比如 sfr P0 = 0x80; 这条语句里面的0x80是单片机内部RAM地址,这个地址就是单片机P0口的映射在内部RAM中的地址。用sfr把0x80定义成P0的好处是方便程序编写。如果你不用这条语句又想改变P0口状态,就用指针,*( (volatile unsigned char *)0x80 ) = data;
单片机上电复位IO口都是默认高电平 11111111 ,就是默认IO置为输入口。
二极管是否会亮看要你规定的点亮方式是高电平导通还是低电平导通了。
第一个问题:0x80,0x90,0xa0,0xb0,这是单片机的物理绝对地址,这个地址的功能就是让用户可以对端口进行读写,记住是地址,所说的上电默认是0x80里面存储的值,默认上电后0x80里面存的是0xff
第二个问题:二极管如果高电平亮的话,全亮,还是上面的问题,(*(0x80))=0xff;
的确是高电平,但不能点亮灯,因为各个口的驱动能力有限除非在端口上接上拉电阻,一般都采用灌电流的方法,既单片机的端口接发光管的负极,然后经过限流电阻接在电源上。把I/O口植低电平
不是这样理解的,sfrP0=0x80,这一个0x80是它的一个端口,单片机上电时,个I/O口的电平为高电平