#include #include // für Zeichen (Infotext) notwendig #include // für sprint #include void Timer_einstellen(void); void UART_einstellen(void); void werte_feld_fuellen(unsigned int temp_1); // GEKU mit Parameterübergabe versehen char i,anfangsmarke=0xAA; unsigned int temp_1,temp_1_UB,temp_1_OB; int tx_cnt // GEKU Byte Sende Zähler char txbuffer[3]; int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer Timer_einstellen(); UART_einstellen(); P1DIR |= BIT7; //LED grün // P2DIR |= BIT0; //LED rot // wert_senden(); // GEKU //neu GKU Verarbeitun im Background tx_cnt=0; while(1) { // ... GKU hier Vorverarbeiung (z.B. Bildung von temp_1) einfügen temp_1 = 0x1667; werte_feld_fuellen(temp1); // ... GKU hier Nachverarbeitung (z.B. Auswertung Empfangspuffer) durchführen // GEKU am Ende Schleifenverzögerung einbauen z.B. 1s __delay_cycles(1000); } } void werte_feld_fuellen(unsigned int temp_1) // GEKU mit Paramterübergabe versehen { //temp_1_UB = temp_1 & 0xFF; //temp_1_OB = (temp_1 & 0xFF00)>>8; txbuffer[0] = anfangsmarke; txbuffer[1] = temp_1 & 0xFF; // unteres Byte txbuffer[2] = (temp_1 & 0xFF00)>>8; // oberes Byte } void wert_senden(void) // GEKU nur ein byte pro Interrupt versenden { if ((U0TCTL&1) && (tx_cnt<3)) // GEKU UART Senderegister frei && noch keine 3 Bytes versendet { TXBUF0=tx_buffer[tx_cnt]; tx_cnt++; } } void UART_einstellen(void) { P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD ME1 |= UTXE0;// + URXE0; // Enable USART0 TXD/RXD UCTL0 |= CHAR; // 8-bit character UTCTL0 |= SSEL0; // UCLK = ACLK UBR00 = 0x03; // 32k/9600 - 3.41 UBR10 = 0x00; // UMCTL0 = 0x4a; // Modulation UCTL0 &= ~SWRST; // Initialize USART state machine IE1 |= UTXIE0; // Enable USART0 RX/TX interrupt URXIE0 + } void Timer_einstellen(void) { unsigned int Zeit; unsigned int ZeitOB=0x1A,ZeitUB = 0xFF; 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 // Zeitfaktor=2; // bei SD-Karte eingetragen, abhängig vom Vorteiler +ID_1 --> Vorteiler durch 2--> Zeitfaktor=2; _EINT(); // allg. Interrupt-Freigabe } void wert_senden(void) // GEKU Byte für Byte versenden { if ((U0TCTL&1) && (tx_cnt<3)) // GEKU Byte senden wenn Sendepuffer im UART leer und die versendete Anzahl an Bytes kleine als 3 ist { TXBUF0=tx_buffer[tx_cnt]; tx_cnt++; } } // Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { P1OUT ^= BIT7; //LED grün //temp_1 = 0x1667; // Messwert 1 Beisoiel GEKU in den Background verschoben //werte_feld_fuellen(); GEKU in den Background verschoben wert_senden(); // GEKU mit jedem Timerinterrupt eine Byte versenden // ... GKU andere Aktivitäten zur Timerzeit durchführen } // UART0 TX ISR GEKU wird nicht benötigt, da TX Interrupt dauerhaft gesperrt //#pragma vector=UART0TX_VECTOR //__interrupt void usart1_tx (void) //{ //}