c8051f020有按8位组织的64位数字io引脚,低端口(P0,P1,P2,P3)既可以按位寻址,也可以按字节寻址。高端口(P4,P5,P6,P7)只能按字节寻址
例如 sbit LED1 =P0^0;//按位寻址正确
sfr LEDPORT=P0;//按字节寻址正确
sbit LED2=P4^0;//按位寻址不可以所以这种表达错误
sfr LEDPORT=P4;//按字节寻址正确
注意sbit是按位赋值的,sfr是按字节寻址的,所以
- P0~P3都可以用sbit ,sfr.
- P4~P7只能用sfr 不可以用sbit
这时候就出现一个问题,当我们想操作P4~P7其中某一位的时候,只能一次性改变一位的数据,这样可能导致,其他位数据改变,这时候我们用下面方法
假如我们想把P4口的第3位置1,而不改变其他位,我们可以用
P4 |= 00001000;
假如我们想把P4口的第3位置0,而不改变其他位我们可以用
P4 &=11110111;
下面我们可以知道c8051有的交叉开关(是对于P0-P3) 而我们此次实验用的是P5口则用不到分配交叉开关,那样我们就不用设置交叉开关寄存器XBR
下面我们看一下,端口得输出方式
默认我们不设置的话,为漏极开路。
我们可以看到推挽输出是我们需要得,那么把端口设置为推挽输出呢?下面我们看一下输出方式寄存器
从图中我们可以看出P74OUT的一位是控制代表P4-P7中的高或者低四位的输出方式,加入我们想
P5口设置为推挽输出那么我们可以这样
P74OUT=00001100; 或者P74OUT=0x0c;//设置P5口为推挽输出
此时我们设置好输出方式,那么怎么样让端口输出高电平或者低电平呢?
此时我们需要看一下端口数据寄存器
如果我们想P5口的第2位为高电平我们可以这样
P5=00000100;
· 或者P5=0x04;
端口初始化的总结
1.设置交叉开关寄存器XBR(如果用不到就不同设置,P4-P7用不到就不需要设置)
2.设置输出方式寄存器
接下来我们来看一下如何让c8051020上点亮led灯的连接图
经过分析我们看出P5口输出低电平led灯亮,那我们下面来点亮LED29,对应的是P5.7口
下面我们可以看一下代码
以及实验现象