IO口基本操作,sonix单片机每个IO口都有两个钳位保护二极管
一、IO口方向设置寄存器PnM,n代表0-5组IO口
|
BIT7 |
BIT6 |
BIT5 |
BIT4 |
BIT3 |
BIT2 |
BIT1 |
BIT0 |
PnM |
Pn7M |
Pn6M |
Pn5M |
Pn4M |
Pn3M |
Pn2M |
Pn1M |
Pn0M |
读/写 |
R/w |
R/w |
R/w |
R/w |
R/w |
R/w |
R/w |
R/w |
复位 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0=输入模式;1=输出模式。
设置方法(C语言);
P1口设置为输入; P1M=0x00;
P1.1口设置为输出 FP11M=1;(位操作)
二、IO上拉电阻寄存器,n代表0-5组IO口
|
BIT7 |
BIT6 |
BIT5 |
BIT4 |
BIT3 |
BIT2 |
BIT1 |
BIT0 |
PnUR |
Pn7UR |
Pn6UR |
Pn5UR |
Pn4UR |
Pn3UR |
Pn2UR |
Pn1UR |
Pn0UR |
读/写 |
W |
W |
W |
W |
W |
W |
W |
W |
复位 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0=不使能内部上拉;1=使能内部上拉。
设置方法(C语言);
P1口全部使能内部上拉 P1UR=0xff;
P1.0使能内部上拉 P1UR=0x01;
不知道为什么,这个寄存器位操作会出现编译错误
三、开漏模式使能寄存器,Sonix单片机只有P1.0口有开漏功能
|
BIT7 |
BIT6 |
BIT5 |
BIT4 |
BIT3 |
BIT2 |
BIT1 |
BIT0 |
P1OC |
------- |
------- |
------- |
------- |
------- |
------- |
------- |
P10OC |
读/写 |
------- |
------- |
------- |
------- |
------- |
------- |
------- |
W |
复位 |
------- |
------- |
------- |
------- |
------- |
------- |
------- |
0 |
0=禁止开漏模式;1使能开漏模式
设置方法(C语言);
使能开漏模式 P1OC=0x01;
不使能开漏模式 P1OC=0x00;
这个寄存器位操作会出现编译错误
四、IO数据寄存器
|
BIT7 |
BIT6 |
BIT5 |
BIT4 |
BIT3 |
BIT2 |
BIT1 |
BIT0 |
Pn |
Pn7 |
Pn6 |
Pn5 |
Pn4 |
Pn3 |
Pn2 |
Pn1 |
Pn0 |
读/写 |
R/w |
R/w |
R/w |
R/w |
R/w |
R/w |
R/w |
W |
复位 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
设置方法(C语言);
读P1口数据 data=P1;
P1口输出数据 P1=data;
P11口输出高电平 FP11=1;
读取P11口电平 data=FP11;
IO口完整操作实例;
1、P1口输出高电平,以2612为例
#include
main()
{
P1M=1;
P1=1;
while(1);
}
2、P0.0输出低电平(位操作)
FP00M=1;
FP00=0;
3、上拉输入读取P1口数据,一般按键接地时用
P1M=0;
P1UR=0xff;
data=P1;
4、读取P1.1口的电平
FP11M=0;
data=FP11;
5、开漏模式配置办法类似