|
如题,小弟在玩开发板时发现了一个问题,我的芯片是msp430f169.
在使用IO中断,P1口作为独立按键使用时发现无法实现中断触发。按键的图如下:
我写了如下的程序:
#include <msp430x16x.h>
#include <datatype.h>
#define EA_L P5OUT &=~BIT0
#define EA_H P5OUT |=BIT0
#define EB_L P5OUT &=~BIT1
#define EB_H P5OUT |=BIT1
#define EB_GND_Key do{P5OUT |=BIT2;P5OUT |=BIT3;} while(0)
#define EB_VCC_Key do{P5OUT &=~BIT2;P5OUT &=~BIT3;} while(0)
#define EA_AC_Key do{P5OUT |=BIT4;P5OUT |=BIT5;} while(0)
#define EA_DC_Key do{P5OUT &=~BIT4;P5OUT &=~BIT5;} while(0)
int A=0;
void Init_CLK(void)
{
unsigned int iq0;
BCSCTL1&=~0X00; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
BCSCTL2 =SELM_2+SELS; //选择MCLK、SMCLK为XT2
}
//Timer_A初始化--------------------
void Init_TimerA()
{
TACTL = TASSEL_1+MC_1+TACLR; //timerA CLK="ACLK",增计数模式
CCR0 =327;
CCTL0 = CCIE;
}
void Init_Key_IO()
{
//控制模拟开关
P5DIR=0xff;
P5SEL=0;
//按键设置
P1DIR &=~(BIT0+BIT1+BIT2+BIT3); //按键控制,IO中断方式
P1SEL=0;
// P1REN |=BIT0+BIT1+BIT2+BIT3;
P1IE=0;
P1IES=0;
P1IES |=BIT0+BIT1+BIT2+BIT3;
P1IFG=0;
P1IE |=BIT0+BIT1+BIT2+BIT3;
}
void AC_Chose()
{
EA_L;
EB_H;
EA_AC_Key;
}
void DC_Chose()
{
EA_L;
EB_L;
EA_DC_Key;
}
void Delay()
{
uchar i;
for(i=100;i>0;i--);
}
void OFF_Set()
{
EA_H;
EB_H;
}
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
Init_CLK();
Init_TimerA();
Init_Key_IO();
_EINT();
P1DIR=BIT7;
for(;;)
{
switch(A)
{
case 0: DC_Chose(); break;
case 1: AC_Chose(); break;
case 2: OFF_Set(); break;
case 3: break;
}
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
if(P1OUT&BIT7)
{
P1OUT &=~(BIT7);
EB_GND_Key;
}
else
{
P1OUT |=BIT7;
EB_VCC_Key;
}
}
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
if(P1IFG&BIT0)
{
P1IFG &=~(BIT0);
Delay();
if(!(P1IN&BIT0))
A=0; //默认为交变电场。
}
if(P1IFG&BIT1)
{
P1IFG &=~(BIT1);
Delay();
if(!(P1IN&BIT1))
A=1; //选择为静电场。
}
if(P1IFG&BIT2)
{
P1IFG &=~(BIT2);
Delay();
if(!(P1IN&BIT2))
A=2; //选择关闭模拟开关
}
if(P1IFG&BIT3)
{
P1IFG &=~(BIT3);
Delay();
if(!(P1IN&BIT3))
A=3;
}
}
在网上查了下,貌似有的430有P1REN上拉下拉电阻使能寄存器,但是msp430f169没有。硬件已经是这样了,试了试使用
中断触发,但是无法触发中断,不知道PIN&BIT0默认是什么电平?是否会自动置位?
有人建议我用查询,我觉得查询也不行,也是无法读取有按键按下的标志位。
其实加上上拉电阻可以使用中断和扫描的。我想知道如果没有上拉电阻能否就我的板子实现独立按键?
谢谢大家啦!希望大家能提出自己的见解 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
该献的血还是要献的。你不献他不献。难道让我去献? --- 出自坛友:lovejp1981
|