#include char ch = 65; int main(void) { WDTCTL = WDTPW + WDTHOLD; // watchdog aus for (volatile int i = 0xFFFF; i > 0; i--); // settle oscillator P3SEL = 0xC0; // P3.6 und P3.7 als USART1 TXD/RXD ME2 |= UTXE1 + URXE1; // TX- und RX-modul erst mal anschalten UCTL1 |= CHAR; // 8 data bits, 1 stop bit, no parity (8N1) UTCTL1 |= SSEL0; // ACLK als UCLK festlegen //UBR01 = 0x03; // 9600 baud aus 32.768 kHz erzeugen //UBR11 = 0x00; // siehe application note tabelle 2, seite 10 //UMCTL1 = 0x29; //0x4A; // korrektur der division UBR01=0x1B; UBR11=0x00; UMCTL1=0x94; /* uart1 32768Hz 12 00bps (1200.29bps) */ UCTL1 &= ~SWRST; // USART freigeben printf("starting\n"); IE2 |= URXIE1;// + UTXIE1; // TX- und RX-interrupts anschalten IFG2 &= ~UTXIFG1; // initales interrupt-flag loeschen _BIS_SR(/*LPM3_bits + */GIE); // ab in den LPM3 mit interrupts ... for(;;); } #pragma vector=UART1TX_VECTOR __interrupt void usart1_tx (void) { /*printf("got interrupt\n"); if(ch > 65+26) // alphabet ausgeben ch = 65; else { TXBUF1 = ch++; }*/ } #pragma vector=UART1RX_VECTOR __interrupt void usart1_rx (void) { printf("got interrupt\n"); TXBUF1 = RXBUF1; }