I typed my a code to use USART 9Bits addressable communication to toggle 2 LEDs between 2 Mega16. Here is my code:
Transmitter:
/*Defining Statments*/ #define F_CPU 8000000UL #define generalCallAddress 0x01 #define ACK 0x02 //#define NACK 0x03 #define myAddress 0x04 #define slaveAddress 0x05 #define delay 2000 /*Include Statements*/ #include "USARTModule.h" #include #include /*Global Variables Statements*/ char dataRecieved; char dataTransmitted = 0x07; char addressTransmitted = slaveAddress; char dataExpected = 0x05; /*Global Function Declare*/ /*Main*/ int main(void) { sei(); USARTinitil(8000000UL, 19200, 'n', 'a', 'e', 2, 9); while(1) { if(dataExpected == addressTransmitted) { USARTTransmitAddress(addressTransmitted); } else if(dataExpected == dataTransmitted) { USARTTransmitData(dataTransmitted); } else if(dataExpected == NACK) { USARTTransmitAddress(addressTransmitted); } else if(dataExpected == ACK) { USARTTransmitData(dataTransmitted); } } } ISR(USART_RXC_vect) { dataRecieved = USARTReceive(); switch(dataRecieved) { case ACK: if(dataTransmitted == 0x06) { dataTransmitted = 0x07; dataExpected = dataTransmitted; _delay_ms(delay); }else { dataTransmitted = 0x06; dataExpected = dataTransmitted; _delay_ms(delay); } case NACK: dataExpected = NACK; _delay_ms(delay); case myAddress: dataExpected = ACK; _delay_ms(delay); } }
Receiver:
/*Defining Statments*/ #define F_CPU 8000000UL #define generalCallAddress 0x01 #define ACK 0x02 #define NACK 0x03 #define myAddress 0x05 #define masterAddress 0x04 #define turnON 0x06 #define turnOFF 0x07 #define LED1 PB0 #define LED2 PB1 #define LED_DDR DDRB #define LED_PORT PORTB #define delay 2000 /*Include Statements*/ #include "USARTModule.h" #include #include /*Global Variables Statements*/ char dataRecieved; char dataExpected; /*Global Function Declare*/ /*Main*/ int main(void) { sei(); setBit(LED_DDR, LED1); setBit(LED_DDR, LED2); USARTinitil(8000000UL, 19200, 'n', 'a', 'e', 2, 9); MPCMModeSet(); while(1) { if(dataExpected == ACK) { USARTTransmitData(ACK); } else { USARTTransmitData(NACK); } } } ISR(USART_RXC_vect) { dataRecieved = USARTReceive(); switch(dataRecieved) { case myAddress: MPCMModeClear(); dataExpected = ACK; _delay_ms(delay); case turnON: MPCMModeClear(); setBit(LED_PORT, LED1); setBit(LED_PORT, LED2); _delay_ms(delay); case turnOFF: MPCMModeClear(); clearBit(LED_PORT, LED1); clearBit(LED_PORT, LED2); _delay_ms(delay); case NACK: MPCMModeSet(); dataExpected = NACK; _delay_ms(delay); } }
Why does I only get 4 loops for toggling my LEDS and then it stops?!
Why is my logic deniable?!