typedef enum {TX_IDLE, TX_DATA_BITS, TX_STOP_BITS, TX_START_BITS} tmr3ISRstate_t; ISR(TIMER3_OVF_vect) { static uint8_t transmitBufferIndex = 0; static tmr3ISRstate_t tmr3ISRstate = TX_IDLE; static uint8_t tx_checksum = false; static uint8_t mask; static char letter; switch (tmr3ISRstate) { case TX_IDLE: if (transmitStart == true) { // Your Code// } break; case TX_START_BITS: // Your Code// break; case TX_DATA_BITS: // Your Code// break; case TX_STOP_BITS: // Your Code// break; default: tmr3ISRstate = TX_IDLE; TCCR5A &= ~(1 << COM5B1); } // Your Code//; // 2400 Baud } typedef enum {RX_IDLE, RX_DATA_BYTES, RX_CHECKSUM} myUSART1ISR_t; //---------------------------------------------- // My EUSART2 ISR to handle incoming characters from IR decoder //---------------------------------------------- ISR(USART1_RX_vect) { static myUSART1ISR_t usart1ISRstate = RX_IDLE; static uint8_t receiveBufferIndex = 0; switch(usart1ISRstate) { case RX_IDLE: receiveBufferIndex = 0; receiveIRBuffer[receiveBufferIndex++] = UDR1; usart1ISRstate = RX_DATA_BYTES; break; case RX_DATA_BYTES: if ((receiveIRBuffer[receiveBufferIndex++] = UDR1) == '\0') usart1ISRstate = RX_CHECKSUM; break; case RX_CHECKSUM: // Your Code// break; default: usart1ISRstate = RX_IDLE; break; } }