PxSEL寄存器用来设置端口为通用IO还是外设IO,0为通用IO、1为外设IO,默认为通用IO。
PxDIR寄存器用来设置端口为输入还是输出,0为输入、1为输出,默认为输入。
在输入模式下,PxINP寄存器用来设置端口为上拉/下拉或三态,0为上拉 /下拉、1为三态,默认为上拉/下拉。P2INP bit5-7表示端口组0-2上拉或下拉,0为上拉、1为下拉,默认为上拉。
在输入模式下,可以用于产生中断,EA位用来表示总中断,0表示禁止、1表示中断。
IENx寄存器中PxIE位用来设置端口组中断,0表示禁止、1表示中断。
PxIEN寄存器用来设置端口中断,0表示禁止、1表示中断。
PICTL寄存器中PxICON位用来设置端口中断触发,0表示上升沿、1表示下降沿。
PxIFG寄存器用来表示端口中断状态,1表示产生中断。
PxIF位用来表示端口组中断状态,1表示产生中断。
例:1.配置P0_1为输出
P0SEL &= 0xFD; //设置P0_1为普通IO口
P0DIR |= 0x02; //设置P0_1为输出
2.配置P0_5为上拉输入
P0SEL &= 0xDF; //设置P0_1为普通IO口
P0DIR &= 0xDF; //设置P0_1为输入
P0INP &= 0xDF; //设置P0_1为上拉/下拉
P2INP &= 0xDF; //设置P0为上拉
3.配置P2_0为中断
P2SEL &= 0xFE; //设置P2_0为普通IO口
P2DIR &= 0xFE; //设置P2_0为输入
EA = 1; //打开总中断
IEN2 |= 0x02; //打开P2中断
P2IEN |= 0x01; //打开P2_0中断
PICTL = 1; //下降沿触发
P2IFG &= 0xFE; //清除P2_0中断状态
P2IF = 0; //清除P2中断状态
4.P2_0中断函数
#pragma vector = P2INT_VECTOR //P2中断向量
__interrupt void io_req()
{
if((P2IFG & 0x01) == 0x01) //P2_0发生中断
{
; //P2_0中断处理代码
}
P2IFG &= 0xFE; //清除P2_0中断状态
P2IF = 0; //清除P2中断状态
}