2016-07-14 4 views
0

Ich mache mein Programm mit msp430g2553 Launchpad. In diesem habe ich Eingang von P2.4 genommen und ich möchte meine Ausgabe von P2.0, P2.1 und P2.2.MSP430G2553 Launchpad Programmierung

In diesem Programm muss ich den Impuls von 500ms vom Eingang erzeugen. und mein Ausgang wird drei niedrige Impulse von den drei Pins sein. Immer wenn ich meinen Oszilloskop-Tastkopf an 2.4 anschließe, kann ich den Puls sehen. Aber das Programm, das ich gemacht habe, hat nicht funktioniert. wenn ich an das Oszilloskop anschließe, zeigt es nichts an.

Wenn mein Eingangsimpuls hoch ist, bekomme ich die drei niedrigen Impulse.

Hier ist mein Code, bitte überprüfen Sie es und sagen Sie mir, was ist falsch im Code? da es keinen Fehler enthält.

Code:

#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(); 
     } 

Antwort

0
P2IFG &= ~BIT1; 

Die Unterbrechung kam von P2.4. Diese Zeile löscht den Interrupt für Pin 4 nicht, daher wird der Interrupt-Handler fortlaufend aufgerufen.

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

Wenn Sie tatsächlich jene Stifte wollen Ausgänge te, wäre es eine gute Idee sein, nicht ihre Konfiguration Kommentar aus.

+0

Wenn ich diese Pins nicht auskommentiert habe, werde ich als ein Puls von nur einem Pin ausgegeben, d. H. P2.2, aber ich möchte von allen Pins ausgeben. –