The Software There are two main portions of code that we are concerned with:
Transmitter Code
Transmits USART Serial Data
Receiver Code
Receives and Translates USART Data
Since this circuit operates as if the transmitter and receiver were connected
directly with a wire, the software has nothing out of the ordinary. The
transmitter is constantly counting 0 to 8 over and over, and the receiver is
parsing this input and lighting up the corresponding LEDs, over and over.
Infrared Link Transmitter Code
------------« Begin Code »------------
void main(void){
unsigned char rs232_s = '1';
OpenUSART( USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,
25 );
while(1){
putcUSART(rs232_s);
Delay10KTCYx(10);
rs232_s += 1;
if(rs232_s == '8')
rs232_s='0';
}
}
------------« End Code »------------
There really are no surprises here. The transmitter is setup with a routine
and simple while loop that counts then transmits, then counts and then transmits
over and over until infinity.
Infrared Link Receiver Code
------------« Begin Code »------------
void main(void)
{
unsigned char input;
TRISC = 0xFF;
TRISD = 0x00;
PORTD = 0x00;
OpenUSART( USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,
25 );
while(1){
Delay1KTCYx(1);
input = getcUSART();
switch(input){
case '1' : PORTD = 0x01;
break;
case '2' : PORTD = 0x03;
break;
case '3' : PORTD = 0x07;
break;
case '4' : PORTD = 0x0F;
break;
case '5' : PORTD = 0x1F;
break;
case '6' : PORTD = 0x3F;
break;
case '7' : PORTD = 0x7F;
break;
case '8' : PORTD = 0xFF;
break;
case '0' : PORTD = 0x00;
break;
}
}
CloseUSART();
}
------------« End Code »------------
The receiver does the same thing as the transmitter just with the opposite
function: receiving. It continually checks to see if data is ready in the USART
receiver buffer. When data is accepted, it is then evaluated and the LEDs
updated to output the change.
Program Download:
Main C File
wireless_serial_tx.c
wireless_serial_rx.c
wireless_serial_tx.hex
wireless_serial_rx.hex
|