#include // für MSP430F1611 #include unsigned char txbuffer_daten[8];; unsigned int k,f,l; void pause400(void); void UART1_empfangen_senden_einstellen(void); void Timer_einstellen(void); void daten_tx_festlegen(void); void warten100ms(void); void Blitz_gelb(void); int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P4DIR |= BIT0 + BIT1; // für LED P4.0 + P4.1 P4OUT |= BIT0 + BIT1; //LED AUS UART1_empfangen_senden_einstellen(); P2DIR |= BIT4 + BIT5; // M0 = 2.4, M1=2.5 P2OUT &= ~BIT4; // M0=T P2OUT &= ~BIT5; // M1=T Timer_einstellen(); _EINT(); // allg. Interrupt-Freigabe for(;;); } void UART1_empfangen_senden_einstellen(void) { P3SEL |= 0xC0; // P3.6 = USART1 TXD ; P3.7 = RXD1 ME2 |= URXE1 + UTXE1; // Enable USART1 TXD/RXD UCTL1 |= CHAR; // 8-bit character UTCTL1 |= SSEL0; // UCLK = ACLK UBR01 = 0x03; // 32k/9600 - 3.41 UBR11 = 0x00; // UMCTL1 = 0x4A; // Modulation UCTL1 &= ~SWRST; // Initialize USART state machine IE2 |= URXIE1 + UTXIE1; // Enable USART1 RX interrupt } void wert_senden(void) // über UART MSP4301611 an E32-868T { char i; i=0; while (i<8) { TXBUF1 = txbuffer_daten[i]; while (!(IFG2 & UTXIFG1)); // USART0 TX buffer ready? pause400(); i++; } } void pause400(void) { unsigned int i; for (i=400;i>0;i--); // warten } void warten100ms(void) { unsigned int i; for (i=12000;i>0;i--); // warten } void Blitz_gelb(void) // gelb { P4OUT &=~BIT1; // LED EIN warten100ms(); // kurzer Blitz P4OUT |= BIT1; // LED AUS } void daten_tx_festlegen(void) { txbuffer_daten[0] = 0x55; // Adresse entspricht Adresse im Empfänger txbuffer_daten[1] = 0x55; // Adresse entspricht Adresse im Empfänger 0x5555 txbuffer_daten[2] = 0x07; // kanal 07 txbuffer_daten[3] = 0x56; // Daten 1 txbuffer_daten[4] = 0x47; // Daten 2 txbuffer_daten[5] = 0x48; // Daten 3 txbuffer_daten[6] = 0x49; // Daten 4 txbuffer_daten[7] = 0x88; // Daten 5 } interrupt (UART1TX_VECTOR)UART1 (void) { } void Timer_einstellen(void) { unsigned int Zeit,ZeitOB,ZeitUB; ZeitOB=0xaf; // Oberes Byte für Timer einstellen BFFD-->1,5s 3FFF-->0,5s 7FFF-->1s FFFF-->2s ZeitUB=0xff; // Unteres Byte für Timer einstellen 00FF--> 7,8 5ms 0148-->0,010009s TACTL = TASSEL0 + TACLR + ID_1; // TASSEL0 = Takteingang für ACLK(32,7kHz), TACLR--löscht Timer Vorteiler = 2 TACTL |= MC0; // Timer zählt bis CCRO TACCTL0 = CCIE; // Interruptfreigabe Zeit =(ZeitOB << 8)|ZeitUB; // Zusammensetzen OB und UB TACCR0 =Zeit; // Taktzeit: 0,5s 16383 0x3FFF; 1s 0x7FFF = 32767 } interrupt (TIMERA0_VECTOR) Timer_A(void) { daten_tx_festlegen(); // zu sendende Daten wert_senden(); // txbuffer_daten über UART an E32-868 Blitz_gelb(); }