Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <p30F4013.h>
_FOSC (FRC_PLL16 & CSW_FSCM_OFF);
#define FOSC 7370000
#define PLL 16
#define FCY ((FOSC * PLL) / 4.0)
void uart_init (unsigned short uart_register);
char uart_get_byte (void);
void uart_send_byte (char byte);
void uart_send_string (char *string, int size);
void uart_read_string (char *string, int size, char delimeter);
int main(int argc, char** argv)
{
char recieved_bytes[54], sent_bytes[28];
char x1[13], x2[13], x3[13], x4[13];
float value1, result1, value2, result2, value3, value4 ;
int i;
uart_init (47);
while (1)
{
/* Read the number as a string from the serial port*/
uart_read_string (recieved_bytes, 54, '\r');
for (i=0;i<13;i++)
{
x1=recieved_bytes;
x2=recieved_bytes[i+13];
x3=recieved_bytes[i+26];
x4=recieved_bytes[i+39];
}
/* Cast the recieved bytes into a double percision number */
value1 = atof(x1) ;
value2 = atof(x2) ;
value3 = atof(x3) ;
value4 = atof(x4) ;
/* Perform Control Algorithm */
result1 = value1 * value2;
result2 = value3 * value4;
sprintf(sent_bytes,"%fa%f", result1,result2);
/* Sent the converted float */
uart_send_string (sent_bytes, 28);
}
return EXIT_SUCCESS;
}
void uart_init (unsigned short uart_register)
{
/* Set the baudrate register to correct value */
U1BRG = uart_register;
/* Enable UART, TX and RX */
U1MODEbits.UARTEN = 1;
U1STAbits.UTXEN = 1;
}
char uart_get_byte (void)
{
char Recieved;
while (U1STAbits.URXDA == 0);
Recieved = U1RXREG;
return Recieved;
}
void uart_send_byte (char byte)
{
while (U1STAbits.UTXBF == 1);
U1TXREG = byte;
}
void uart_send_string (char *string, int size)
{
int i;
for (i = 0; i < size; i++)
{
if (string == '\0')
break;
uart_send_byte (string);
}
}
void uart_read_string (char *string, int size, char delimeter)
{
int i;
for (i = 0; i < size; i++)
{
string = uart_get_byte ();
if (string == delimeter)
break;
}
if (i >= size)
string[size] = '\0';
else
string[i + 1] = '\0';
}