Hallo folgender Code funktioniert nicht (vgl. Beitrag "Rote LED an Port 1.0 will nicht")
1 | |
2 | #include "msp430f5529.h" // Einbinden der Definitionen |
3 | #define LED_X 0x01 // LED (rot) an P1.0
|
4 | |
5 | |
6 | |
7 | int main( void ) |
8 | {
|
9 | WDTCTL = WDTPW + WDTHOLD; // WatchDogTimer abschalten |
10 | |
11 | // -- INIT_Port1
|
12 | P1SEL &= ~(LED_X); // Beide sind BIN-IO |
13 | P1DIR |= LED_X; // LED = BIN-OUT |
14 | P1OUT &=~ (LED_X); // LED_X = AUS (weil H-aktiv) |
15 | |
16 | |
17 | |
18 | //-- TimerB0
|
19 | |
20 | TB0CTL = TBCLR; |
21 | TB0CTL = TBSSEL_2 + ID_0 + MC_1; |
22 | TB0CCR0 = 1048; // entspricht 1000 Hz, Freq [18] |
23 | TB0CCR2 = 2096; // entspricht 2*10^-3 s, also CCR0/2 (Pulsbreite halb so groß wie Freq) |
24 | TB0CCTL2 = OUTMOD_7; |
25 | // TB0CCTL0 = CLLD_1; // Änderung der Frequenz wird erst übernommen, wenn
|
26 | // CCR0 erreicht ist
|
27 | // TB0CCTL2 = CLLD_1;
|
28 | _BIS_SR(GIE); |
29 | while(1) {_NOP();} |
30 | }
|
31 | |
32 | |
33 | #pragma vector = TIMER0_B0_VECTOR
|
34 | __interrupt void TB0_ISR () |
35 | {
|
36 | P1OUT ^= (LED_X); |
37 | }
|
38 | |
39 | |
40 | #pragma vector = TIMER0_B1_VECTOR
|
41 | __interrupt void TIMERB0_1_ISR () |
42 | {
|
43 | switch (TB0IV) |
44 | {
|
45 | case TB0IV_TBCCR2: // TB0CCR2, da LED nur so lange wie PBreite [i] andauert leuchten soll |
46 | {
|
47 | P1OUT ^= (LED_X); |
48 | break; |
49 | }
|
50 | }
|
51 | }
|
Die LED geht problemlos außerhalb der ISR an. Grüße