我正在使用msp430g2553启动板制作程序。在这里我从P2.4获取输入,我想要我的输出来自P2.0,P2.1和P2.2。
在这个程序中,我必须从输入产生500ms的脉冲。我的输出将来自三个引脚的三个低脉冲。这意味着每当我将示波器探头连接到2.4时,我都可以看到脉冲。但我所做的计划并没有奏效。当我连接到示波器时,它什么都没有显示。
当我的输入脉冲为高电平时,我将得到三个低脉冲输出。
这是我的代码,请检查并告诉我代码中有什么问题?因为它不包含任何错误。
代码:
#include <msp430g2553.h>
#define CPU_F ((double)16000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
char C_1, C_2;
void System_Clock_Init( void )
{
char i;
_NOP();
WDTCTL = WDTPW + WDTHOLD; // Close Watching dog
delay_ms(50);
if( ( CALBC1_16MHZ == 0xff ) || ( CALDCO_16MHZ == 0xff ) )
((void (*)())RESET_VECTOR)();
BCSCTL1 = CALBC1_16MHZ;
DCOCTL = CALDCO_16MHZ; //MCLK=DCOCLK=16MHz
BCSCTL2 = 0x06;//SMCLK=DCOCLK/8=2MHz
BCSCTL3 = 0x00;
IE1 &= ~OFIE;
do
{
IFG1 &= ~OFIFG;
for( i = 0; i < 100; i++ )
{
_NOP();
}
}
while (IFG1 & OFIFG);
_NOP();
}
void IO_INIT(void)
{
NOP();
P2SEL &= ~BIT4;
P2SEL2 &= ~BIT4;
P2REN &= ~BIT4;
/*P2DIR |= BIT2;*/
P2IES |= BIT4;
P2IE |= BIT4;
P2IFG &= ~BIT4;
P2SEL &= ~(BIT0+BIT1);
P2SEL2 &= ~(BIT0+BIT1);
P2REN &= ~(BIT0+BIT1);
//P2DIR &= ~(BIT0+BIT1);
P2OUT &= ~(BIT0+BIT1);
P2SEL &= ~BIT2;
P2SEL2 &= ~BIT2;
P2REN &= ~BIT2;
//P3DIR &= ~BIT1;
P2OUT &= ~BIT2;
}
void main(void)
{
System_Clock_Init();
_NOP();
//WDTCTL = WDT_ARST_1000;
_NOP();
IO_INIT();
_NOP();
_EINT();//open all interrupt
_NOP();
LPM3;
_NOP();
while(1);
}
#pragma vector = PORT2_VECTOR
__interrupt void PORT_C_Interrupt(void)
{
_NOP();
delay_us(20);
if( C_1 == 0xff)
{
if(!( P2IN & BIT4 )) C_2 = 0xff;
}
else
{
if(!( P2IN & BIT4 )) C_1 = 0xff;
}
if(( C_1 == 0xff) && ( C_2 == 0xff))
{
//output A B D
P2OUT |= BIT0;
delay_ms(2);
P2OUT |= BIT1;
P2OUT &= ~BIT0;
delay_ms(2);
P2OUT |= BIT2;
P2OUT &= ~BIT1;
delay_ms(2);
P2OUT &= ~BIT2;
delay_ms(2);
P2OUT ^= BIT1;
P2IFG &= ~BIT1;
C_1 =0x00;
C_2 =0x00;
}
_NOP();
}
答案 0 :(得分:0)
P2IFG &= ~BIT1;
中断来自P2.4。该行不会清除引脚4的中断,因此将连续调用中断处理程序。
/*P2DIR |= BIT2;*/
//P2DIR &= ~(BIT0+BIT1);
如果您确实希望这些引脚输出,那么最好不要注释掉它们的配置。