Ich verwende einen M430G2553 in einem Launchpad.
Obwohl ich die zu inkrementierende variable als volatile deklariert habe
wird sie in der ISR nicht erhöht. Das Ergebnis und beobachten beim
debuggen weisen darauf hin.
1. Wieso wird die Variable nicht um eins erhöht?
2. define funktioniert nicht
Das geht:
Das geht nicht:
1 | #define LED1 BIT6;
|
2 | #define LED2 BIT0;
|
3 |
|
4 | P1DIR |= LED1|LED2 //Fehler: #29 expected an expression
|
Ähnlicher Fehler:
...
1 | zeit = zyklen/10*modus; //Fehler: #29 expected an expression
|
Edit: 3. Wie setze ich den Filter (MSP430) hier im Forum für das
richtige Unterforum?
mein Code:
1 | #include<msp430.h>
|
2 | #include<stdint.h>
|
3 |
|
4 | volatile int modus = 1;
|
5 | volatile unsigned int zyklen = 10000;
|
6 |
|
7 | void spause(uint16_t zeit) {
|
8 | volatile unsigned int i;
|
9 | for (i = 0; i <= zeit; i++) {
|
10 | }
|
11 | }
|
12 |
|
13 | uint16_t an(uint8_t modus) {
|
14 | uint32_t zeit;
|
15 | zeit = zyklen / 10 * modus;
|
16 | return zeit;
|
17 | }
|
18 |
|
19 | int main(void) {
|
20 | WDTCTL = WDTPW | WDTHOLD; // Stopwatchdogtimer
|
21 |
|
22 | //Konfiguration P1.3 als Taster, inkl. Interrupt
|
23 | P1DIR &= ~BIT3; // Taster an P1.3 ist Eingang
|
24 | P1REN |= BIT3; // Pull-Widerstand ein
|
25 | P1OUT |= BIT3; // Pull up
|
26 |
|
27 | P1IES &= ~BIT3; // Interrupt bei fallender Flanke
|
28 | P1IE |= BIT3; // Interrupt ein
|
29 |
|
30 | //Konfiguration LEDs
|
31 | P1DIR |= BIT0 | BIT6; //P1.0 und P1.6 als Ausgang
|
32 | // P1OUT &= ~(0x1|BIT6); //LED auschalten
|
33 |
|
34 | _bis_SR_register(GIE); // Interrupts global ein
|
35 |
|
36 | for (;;) {
|
37 | uint16_t aus;
|
38 | uint16_t ans;
|
39 |
|
40 | P1OUT |= BIT6; //LED anschalten
|
41 | ans = an(modus); //Berechnung: Wie lange bleibt LED an
|
42 | spause(ans); //Übergabe der Pausezyklen an spause
|
43 |
|
44 | P1OUT &= ~BIT6; //LED ausschalten
|
45 | aus = zyklen - an(modus); //Berechnung: Wie lange bleibt LED aus
|
46 | spause(aus); // Übergabe der Pausezyklen an spause
|
47 |
|
48 | }
|
49 | }
|
50 | #pragma vector=PORT1_VECTOR
|
51 | __interruptvoidPort_1(void) {
|
52 | P1OUT ^= BIT0; //P1.0 LED toggeln, Check ob ISR auslöst
|
53 | modus++; // modus erhöhen
|
54 | if (modus > 9) { //Modus ab 10 auf 1 zurücksetzen
|
55 | modus = 1;
|
56 | }
|
57 | P1IFG &= ~BIT3; // Interrupt-Flaglöschen
|
58 | }
|