我们的项目里面,P1口的1-7管脚做键盘,0脚做风速传感器的输入。P2口的0-4做键盘,5-7做其他用。
(因为P2.5-P2.7他用,为了不影响我们的按键的判断,所以这些脚的中断我们不打开,只开P2.0-P2.4,所以就是P2IE的bit置位是:0001 1111 =P1IE)
I/O口的每一bit都可以单独设置,为了不影响其他管脚的工作,我们设定我们按键所需管脚的时候,都是使用位操作来设定相应的位,无关位保存原样,如:P2IES|=BIT0+BIT1+BIT2+BIT3+BIT4;只选择了P2.0-P2.4为下降沿触发,P2.5-P2.7保持原设置,否则容易相互干扰出错。
在头文件中我们可以找到P1口的中断向量集是:PORT1_VECTOR
所以中断函数可以写成:
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR (void)
{
}
//以下是port2的中断服务程序
#pragma vector=PORT2_VECTOR
__interrupt void PORT2_ISR (void)
{
{
}
[page]
备注1:
按键也为机械接触开关,正常情况下,按一次按键,在按下瞬间,可能会有很多毛刺出现,就会有很多低平出现,所以要延时确认,即使没有这种情况,也要做延时处理,这样做是去干扰!正常情况下一个干扰脉冲也不可能会长达10-20MS.所以去干扰去抖动还是很有必要的。而这点时间对一个按键按下并不影响效果!
相关资料:
(1)PxDIR:输入/输出方向寄存器。 8位相互独立,可以分别定义8个引脚的输入/输出方向。8位再PUC后都被复位。使用输入/输出功能时,应该先定义端口的方向。作为输入时只能读,作为输出时,可读可写。0:输入模式;1:输出模式。如:P1DIR|=BIT4;
(2)PXIN:输入寄存器,为只读寄存器。用户不能对它进行写入,只能通过读取其寄存器的内容来知道I/O口的输入信号。所以其引脚的方向要选为输入。如再键盘键盘扫描程序中经常要读取行线或者列线的端口寄存器值来判断案件情况。例如:unsigned char key;
P1DIR&=~BIT4;
……
key=P1IN&0X10;
……
(3)PXOUT:输出寄存器。该寄存器为I/O端口的输出缓冲寄存器,再读取时输出缓存的内容与引脚方向定义无关。改变方向寄存器的内容,输出缓存的内容不受影响。如:PIOUT|=0X01;
(4)PXIFG:中断标志寄存器。他的8个标志位标志相应引脚是否有中断请求有待处理。0:无中断请求, 1:有中断请求。其中断标志分别为PXIFG.0~PXIFG.7。应该注意的是:PXIFG.0~PXIFG.7共用一个中断向量,为多源中断。当任一事件引起的中断进行处理时,PXIFG.0~PXIFG.7不会自动复位,必须由软件来判断是对哪一个事件,并将相应的标志复位。另外,外部中断事件的时间必须保持不低于1.5倍的MCLK时间,以保证中断请求被接受,且使相应中断标志位置位。
(5)PXIES:中断触发沿选择寄存器。如果允许PX口的某个引脚中断,还需定义该引脚的中断触发方式。0:上升沿触发使相应标志置位,1:下降沿触发相应标志置位。如:MOV.B #07H, &P1IES ;p1低3位下降沿触发中断。
(6)PXIE:中断使能寄存器。PX口的每一个引脚都有一位用以控制该引脚是否允许中断。0:禁止中断,1:允许中断。MOV.B #0E0H, &P2IE ;P2高3位允许中断。
(7)PXSEL:功能选择寄存器。P1,P2两端口还具有其他片内外设功能,将这些功能与芯片外的联系通过复用P1,P2引脚的方式来实现。PXSEL用来选择引脚的I/O端口功能与外围模块功能。0:选择引脚为I/O端口,1:选择引脚为外围模块功能。如:P1SEL|=0X10; //P1.4为外围模块功能。
上一篇:MSP430的上拉电阻&I/O口的第二功能
下一篇:【IAR学习】学习笔记
推荐阅读最新更新时间:2024-03-16 14:38