MSP430系列端口相关的寄存器有:PxDIR ,PxSEL ,PxOUT ,PxIN ,PxREN ,
PXIES ,PXIE ,PXIFG。下面分别进行介绍:
① PXSEL:端口特殊功能选择,例如P1SEL|=BIT3,即为选中P1.3的特殊功能,如果使用普通的输入输出功能,可以不设置,或者设置成P1SEL&=~BIT3。
②PXDIR:端口输入/输出寄存器。输出设置:P1DIR|=BIT3;输入设置:P1DIR&=~BIT3。其余的类似。
③PXOUT:端口输出寄存器。若想输出高电平,P1OUT|=BIT3;若想输出低电平,P1OUT&=~BIT3。
④PXIN:输入状态寄存器。可以读取相应端口的输入状态。
⑤PXREN:上拉电阻使能寄存器。如果想要使能相应端口的上拉电阻,只需要设置:P1REN|=BIT3。
⑥PXIES:端口触发寄存器。P1IES|=BIT3,下降沿触发;P1IES&=~BIT3,上升沿触发。
⑦PXIE:端口中断使能寄存器。P1IE|=BIT3,使能P1.3的中断。
⑧PXIFG:端口中断状态寄存器。用P1IFG&BIT3可以判断是哪一个端口触发了中断,同时需要在中断服务程序里软件清零。
端口连接按键,通过配置寄存器,根据按键的状态,进入中断服务程序选择执行相应的服务程序。实例如下:
//按键端口中断P1.3
//2017/4/8
#include<msp430g2553.h>
void PORT_Interrupt_Init(void);
void main( void )
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR|=BIT0;
PORT_Interrupt_Init();
while(1)
{
}
}
void PORT_Interrupt_Init() //按键对应的端口初始化
{
P1DIR&=~BIT3; //输入方向
P1REN|=BIT3; //使能上拉电阻
P1IFG=0X00; //清除中断标志
P1IES|=BIT3; //下降沿触发
P1IE|=BIT3; //开启端口中断
_EINT(); //开总中断
}
#pragma vector=PORT1_VECTOR //端口中断服务程序
__interrupt void Key_ISR(void)
{
if(P1IFG&BIT3) //通过中断标志判断哪个端口触发
P1OUT^=BIT0;
P1IFG=0x00; //软件清除中断标志
}
由此可得,在比较复杂的应用场合,可以添加多个按键,在中断服务程序中根据PXIFG的状态来判断具体是哪个端口引脚触发的中断,总体来说,使用方便,配置灵活。
灰小子:
感谢分享