我设置P1.3按键中断,在调试的时候,发觉P1IN默认是0x0020,这个不是我的问题。
我的问题是,当按下按键,松开后判断(P1IN & BIT3)这语句为什么是真。我的理解是松开后P1IN=0x0020,与BIT3按位与应该为0。
我是在LaunchPad板子上采用CCS_V5.1调试的。
程序是想实现按键时间长一点来置换P1.0口,按键时间短就不动作。
如果屏蔽蓝 {MOD}
P1IFG = 0; 这句之后,程序完全不按语法规则跑,我很无语。
但是我按下之后,程序虽然一直在红 {MOD}循环里面,但是P1.0照样能置换。
#include<msp430g2553.h>
typedef unsigned int uint;
#define keyin (P1IN & BIT3)
uint num=0,i;
void delay() //延时函数
{
uint j;
for(j=0;j<5000;j++);
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P1IES |= BIT3; // P1.3 high-to-low transition
P1IE |= BIT3;
P1DIR &= ~BIT3;
P1OUT |= ~BIT3;
P1IFG &= ~BIT3;
P1DIR |= BIT0;
P1OUT |= BIT0;
P1REN |= BIT3;
_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/ interrupt
}
#pragma vector=PORT1_VECTOR //p1按键中断
__interrupt void P1_ISR(void)
{
if(P1IFG & BIT3)
{
if(keyin == BIT3) //如果是第一个按键被按下
{
if(keyin == BIT3)
{
while(P1IN & BIT3) //等待按键放开
{
num++;
delay();
}
if(num>20000)
{
num=0;
P1OUT ^= 0X01;
P1IFG = 0;
}
}
}
}
P1IFG = 0;
num=0;
return;
}
此帖出自
小平头技术问答
请问你有没有更好的算法?
谢谢你的回答!
一周热门 更多>