1 | #include <msp430.h> //einbinden der MSP430 Programmbibiothek
|
2 |
|
3 | #define RXD BIT1
|
4 | #define TXD BIT2
|
5 |
|
6 | unsigned int samples[3]; //Array für ADC Speicherung
|
7 | const char string[] = { "Halololo\r\n" };
|
8 | unsigned int i; //Counter
|
9 |
|
10 | int main(void)
|
11 | {
|
12 | /**************ADC10 Settings**********************/
|
13 | ADC10CTL0 = SREF_0 + ADC10SHT_2 + REF2_5V + REFON + MSC + ADC10ON;
|
14 | ADC10CTL1 = INCH_5 + ADC10DIV_0 + CONSEQ_3 + SHS_0; //Multi-channel repeated conversion starting from channel 3
|
15 | ADC10AE0 = BIT5 + BIT4 + BIT3; //Kanal A5 (BIT5), A4 (Bit4) und A3 (BIT3) aktivieren
|
16 | ADC10DTC1 = 3; // Alle drei Kanäle bei einer Einlesung übertragen
|
17 |
|
18 | /**************DO Settings**********************/
|
19 | //P1DIR |= 0x08;
|
20 | //P1DIR |= 0x10; // P1.3, P1.4, P1.5 als DO
|
21 | //P1DIR |= 0x20;
|
22 | P2DIR |= 0xFF; // All P2.x outputs
|
23 | P2OUT &= 0x00; // All P2.x reset
|
24 |
|
25 | /**************Clock Settings**********************/
|
26 | WDTCTL = WDTPW + WDTHOLD; // Watchdog deaktivieren
|
27 | DCOCTL = 0;
|
28 | BCSCTL1 = CALBC1_1MHZ; // Setze Taktfrequenz der System Clock auf 1MHz
|
29 | DCOCTL = CALDCO_1MHZ; // Digitally Controlled Oscilator auf 1MHz einstellen
|
30 |
|
31 | /***************Timer_A Settings******************/
|
32 | CCTL0 = CCIE; // Aufruf der Interruptfunktion ermöglichen
|
33 | CCR0 = 1000; // Gehe in den Interrupt nach 100 Durchläufen (bei 1MHz jede 0,1ms)
|
34 | TACTL = TASSEL_2 + MC_1; // TASSEL_2: Wähle ACLK (Auxiliary clock) als Quellclock
|
35 | // MC_1: Der Timer zählt bis zum Wert von CCR0
|
36 | _BIS_SR(LPM0_bits + GIE); // Interrupteintritt ermöglichen
|
37 |
|
38 | /*************Serielle Übertragung Setup*************/
|
39 | P1SEL |= RXD + TXD ; // P1.1 = RXD, P1.2=TXD
|
40 | P1SEL2 |= RXD + TXD ; // P1.1 = RXD, P1.2=TXD
|
41 | UCA0CTL1 |= UCSSEL_2; // SMCLK
|
42 | UCA0BR0 = 0x08; // 1MHz 115200
|
43 | UCA0BR1 = 0x00; // 1MHz 115200
|
44 | UCA0MCTL = UCBRS2 + UCBRS0; // Modulation UCBRSx = 5
|
45 | UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
|
46 | __bis_SR_register(CPUOFF + GIE); // Enter LPM0 w/ int until Byte RXed
|
47 | }
|
48 |
|
49 | // Timer A0 interrupt service routine
|
50 | #pragma vector=TIMER0_A0_VECTOR
|
51 | __interrupt void Timer_A (void)
|
52 | {
|
53 | ADC10CTL0 &= ~ENC;
|
54 | while (ADC10CTL1 & BUSY);
|
55 | ADC10SA = (unsigned int)samples;
|
56 | //automatische Speicherung der Daten in das Array "sample"
|
57 |
|
58 | ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start
|
59 |
|
60 | if (samples[0] > 0x384)
|
61 | {
|
62 | P1OUT |= 0x08; //LED an Pin 1.4 einschalten
|
63 |
|
64 | }
|
65 | else
|
66 | {
|
67 | P1OUT &= ~0x08;
|
68 | }
|
69 |
|
70 | if (samples[1] > 0x384)
|
71 | {
|
72 | P1OUT |= 0x10; //LED an Pin 1.4 einschalten
|
73 | }
|
74 | else
|
75 | {
|
76 | P1OUT &= ~0x10;
|
77 | }
|
78 |
|
79 | if (samples[2] > 0x384)
|
80 | {
|
81 | P1OUT |= 0x20; //LED an Pin 1.4 einschalten
|
82 | }
|
83 | else
|
84 | {
|
85 | P1OUT &= ~0x20;
|
86 | }
|
87 |
|
88 | i=0;
|
89 | UC0IE |= UCA0TXIE; // Enable USCI_A0 TX interrupt
|
90 |
|
91 | }
|
92 |
|
93 | #pragma vector=USCIAB0TX_VECTOR
|
94 | __interrupt void USCI0TX_ISR(void)
|
95 | {
|
96 | // TX next character
|
97 | UCA0TXBUF = string[i++]; // TX next character
|
98 | if (i == sizeof string - 1) // TX over?
|
99 | UC0IE &= ~UCA0TXIE; // Disable USCI_A0 TX interrupt
|
100 | }
|