///////////////////////////////////////// // Interrupt routine #pragma vector=USCIAB0RX_VECTOR //UCA0 - UART0 - RX __interrupt void USCIA0RX_ISR (void) { } __interrupt void USCI0RX_ISR(void) { } #pragma vector=USCIAB1RX_VECTOR //UCA1 - UART1 - RX __interrupt void USCI1RX_ISR(void) { } //UCB1 - I2C - RX __interrupt void USCIB1RX_ISR(void) { } //////////////////////////////////////// //Initialisierung der I2C Schnittstelle am Anfang unsigned char chI2C_Init(void) { P5SEL |= 0x06; //I2C active UCB1CTL1 |= UCSWRST; // Enable SW reset UCB1CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode UCB1CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW reset UCB1BR0 = 73; // fSCL = SMCLK /73 = ~100kHz UCB1BR1 = 0; UCB1I2CSA = 0x048; // Slave Address is 048h UCB1CTL1 &= ~UCSWRST; // Clear SW reset, resume operation IE2 |= UCB1RXIE; // Enable RX interrupt UC1IE |= UCB1RXIE; return 1; } ///////////////////////////////////////// // Einstellen von Fühler Register void StartConfI2C(int TmpAdresse) { UCB1I2CSA = TmpAdresse; // UCB1I2CSA = 0x01; UCB1CTL1 = UCSSEL_2 + UCTR + UCTXSTT ; //Adresse nach Start auto while (!(UC1IFG & UCB1TXIFG)); UCB1TXBUF = 0x01 ; //Register while (!(UC1IFG & UCB1TXIFG)); UCB1TXBUF = 0xE1 ; UCB1CTL1 |= UCTXSTP ; wait(2); UCB1CTL1 = UCSSEL_2 + UCTR + UCTXSTT ; wait(1); while (!(UC1IFG & UCB1TXIFG)); UCB1TXBUF = 0x00 ; wait(1); UCB1CTL1 |= UCTXSTP ; } ///////////////////////////////////////// //Auslesen des Temperaturwertes int StartReadI2C(int TmpAdresse) { UC1IE |= UCB1RXIE; UCB1I2CSA = TmpAdresse; UCB1CTL1 = UCSSEL_2 + UCTXSTT ; test = UCB1RXBUF; UC1IFG = UCB1TXIFG + UCA1TXIFG; UCB1CTL1 = UCSSEL_2 + UCTXSTP ; return(test); }