1 | #include "msp430x54x.h"
|
2 | #include "taster.h"
|
3 |
|
4 | volatile unsigned char tasterPressed;
|
5 | volatile unsigned char tasterDebounce;
|
6 | int taster_index,index =0;
|
7 |
|
8 |
|
9 | void main(void)
|
10 | {
|
11 | WDTCTL = WDTPW + WDTHOLD;
|
12 | P1DIR |= 0x01;
|
13 | P1DIR |= 0x02;
|
14 |
|
15 |
|
16 |
|
17 | //Init taster
|
18 | tasterDebounce = 1;
|
19 | TastersInit( Taster_ALLE );
|
20 | TastersInterruptDisable( Taster_ALLE );
|
21 | tasterPressed = 0;
|
22 | TastersInterruptEnable(Taster_S1 + Taster_S2 + Taster_UP + Taster_DOWN +
|
23 | Taster_LEFT);
|
24 |
|
25 | __bis_SR_register(LPM3_bits + GIE);
|
26 |
|
27 | P1OUT &= ~0x01;
|
28 | P1OUT &= ~0x02;
|
29 |
|
30 | while(1)
|
31 | {
|
32 |
|
33 | //************* LED1,2 AUS **********************************
|
34 | if (tasterPressed & Taster_S2) index =0;
|
35 |
|
36 | //************* Led1 Blinkt **********************************
|
37 | if (tasterPressed & Taster_S1) index =1;
|
38 |
|
39 | //************** LED2 Blinkt ***********************************
|
40 | if (tasterPressed & Taster_UP ) index =2;
|
41 |
|
42 | //************ LED1,2 Bliken Gleichzeitig ********************
|
43 | if (tasterPressed & Taster_DOWN) index =3;
|
44 |
|
45 | //************** LED1,2 Bliken hintereinander *****************
|
46 | if (tasterPressed & Taster_LEFT ) index =4;
|
47 |
|
48 |
|
49 | switch(index)
|
50 | {
|
51 | case 0 : //leds Aus
|
52 | taster_index =0;
|
53 | P1OUT &= ~0x01;
|
54 | P1OUT &= ~0x02;
|
55 | tasterPressed = 0; break;
|
56 |
|
57 | case 1: //led1 blinkt
|
58 | taster_index =1;
|
59 | P1OUT ^= 0x01;
|
60 | P1OUT &= ~0x02; break;
|
61 | case 2: //led2 blinkt
|
62 | taster_index =2;
|
63 | P1OUT ^= 0x02;
|
64 | P1OUT &= ~0x01; break;
|
65 | case 3: // beide blinken gleichzeitig
|
66 | if (taster_index == 1 | taster_index == 2 |taster_index == 4 |taster_index == 0 )
|
67 | {
|
68 | P1OUT &= ~0x01;
|
69 | P1OUT &= ~0x02;
|
70 | taster_index =3;
|
71 | }
|
72 | P1OUT ^= 0x01;
|
73 | P1OUT ^= 0x02; break ;
|
74 | case 4: //leds blinken hintereinander
|
75 | if (taster_index == 1 | taster_index == 2 |taster_index == 3 |taster_index == 0)
|
76 | {
|
77 | P1OUT |= 0x01;
|
78 | P1OUT &= ~0x02;
|
79 | taster_index =4;
|
80 | }
|
81 | P1OUT ^= 0x01;
|
82 | P1OUT ^= 0x02; break;
|
83 |
|
84 | }
|
85 |
|
86 |
|
87 |
|
88 | __delay_cycles(600000);
|
89 | }
|
90 |
|
91 |
|
92 |
|
93 | }
|
94 |
|
95 |
|
96 | void startWDT()
|
97 | {
|
98 | //WDT as 250ms interval counter
|
99 | SFRIFG1 &= ~WDTIFG;
|
100 | WDTCTL = WDTPW + WDTSSEL_1 + WDTTMSEL + WDTCNTCL + WDTIS_5;
|
101 | SFRIE1 |= WDTIE;
|
102 | }
|
103 |
|
104 |
|
105 | #pragma vector=WDT_VECTOR
|
106 | __interrupt void WDT_ISR(void)
|
107 | {
|
108 | if (tasterDebounce == 2)
|
109 | {
|
110 | tasterDebounce = 1;
|
111 | SFRIFG1 &= ~WDTIFG;
|
112 | SFRIE1 &= ~WDTIE;
|
113 | WDTCTL = WDTPW + WDTHOLD;
|
114 | }
|
115 | }
|
116 |
|
117 |
|
118 | #pragma vector=PORT2_VECTOR
|
119 | __interrupt void Port2_ISR(void)
|
120 | {
|
121 | if (tasterDebounce == 1)
|
122 | {
|
123 | tasterPressed = P2IFG;
|
124 | tasterDebounce = 2;
|
125 | startWDT();
|
126 | __bic_SR_register_on_exit(LPM3_bits);
|
127 | }
|
128 | else if (0 == tasterDebounce)
|
129 | {
|
130 | tasterPressed = P2IFG;
|
131 | __bic_SR_register_on_exit(LPM4_bits);
|
132 | }
|
133 |
|
134 | P2IFG = 0;
|
135 | }
|