2016-07-14 6 views
0

msp430g2553 런치 패드를 사용하여 프로그램을 만들고 있습니다. 이것에서 나는 P2.4에서 입력을 받아 들였고 P2.0, P2.1 및 P2.2에서 내 출력을 원합니다.msp430g2553 런치 패드 프로그래밍

이 프로그램에서는 입력에서 500ms의 펄스를 생성해야합니다. 내 출력은 세 핀에서 세 개의 낮은 펄스가됩니다. 오실로스코프 프로브를 2.4에 연결할 때마다 펄스를 볼 수 있습니다. 그러나 내가 만든 프로그램은 효과가 없었습니다. 오실로스코프에 연결할 때 아무것도 보이지 않습니다.

내 입력 펄스가 높으면 3 개의 낮은 펄스 출력을 얻을 수 있습니다.

여기 내 코드입니다. 코드를 확인하고 코드에 무엇이 잘못 되었습니까? 오류가 없으므로

코드 :

#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
P2IFG &= ~BIT1; 

인터럽트는 P2.4에서왔다. 이 줄은 핀 4에 대한 인터럽트를 지우지 않으므로 인터럽트 핸들러는 계속 호출됩니다.

/*P2DIR |= BIT2;*/ 
//P2DIR &= ~(BIT0+BIT1); 

실제로 출력을 원하는 경우 해당 구성을 주석 처리하지 않는 것이 좋습니다.

+0

만약 내가 그 핀을 주석 처리하지 않았다면, 나는 하나의 핀, 즉 P2.2에서 하나의 펄스로 출력을 얻고 있지만 모든 핀의 출력을 원합니다. –