STC系列单片机-定义IO口的工作状态
发布网友
发布时间:2022-05-04 11:53
我来回答
共5个回答
热心网友
时间:2022-06-21 14:56
PnM0=0,PnM1=0是设为了 准双向口(即芯片内部有弱上拉电阻,即可作为读又可写出(也叫传统51模式))
可以设置某一位的模式,例如:
P3M1=10100000B
P3M0=11 000000B
既是设置 P3.7为开漏(11),P3.6为强推挽输出(01),P3.5为高阻输入(10),P3.4/P3.3/P3.2/P3.1/P3.0为准双向口/弱上拉(00)
热心网友
时间:2022-06-21 14:57
如果给P1M1赋值0X03,给P1M0赋值0X05,那么P1口各个引脚对应的模式就是:
P1M1 P1M0 IO口模式
0 0 P1.7准双向口
0 0 P1.6准双向口
0 0 P1.5准双向口
0 0 P1.4准双向口
0 0 P1.3准双向口
0 1 P1.2推挽输出
1 0 P1.1高阻
1 1 P1.0开漏
举个例子吧
P1.0为推挽输出,P1.1输入,其余为准双向。则配置成:
P1M1=0000 0010B
P1M0=0000 0001B
这样,P1M1.0=0,P1M0.0=1,推挽输出
P1M1.1=1,P1M0.1=0,输入
热心网友
时间:2022-06-21 14:57
P3M0、P3M1的位7~0 对应 P3的位7~0(即P3.7~P3.0),你想设置哪个IO就配置P3M0、P3M1对应的位就可以,比如:
P3M1=0x01;
P3M0=0x01;
则 P3.7~P3.1是准双向口,P3.0是高阻
为了方便,可以弄个宏定义头文件,头文件内容如:
……
#define BP3(x) P3M0 &= ~(1<<x), P3M1 &= ~(1<<x) //准双向
#define PP3(x) P3M0 |= (1<<x), P3M1 &= ~(1<<x) //推挽
#define OP3(x) P3M0 &= ~(1<<x), P3M1 |= (1<<x) //开漏
#define RP3(x) P3M0 |= (1<<x), P3M1 |= (1<<x) //高阻
……
RP3(0) ; //P3.0高阻
PP3(1) ; //P3.1推挽
热心网友
时间:2022-06-21 14:58
可以的,比如P3.0定义为高阻,其余为标准
P3M0=0x00;
P3M1=0x01;
热心网友
时间:2022-06-21 14:58
当然可以啊,只要对应的位按照你的设置来写寄存器,那相应的端口就是你需要的状态了。