Ok I had a quick look at the datasheet for the PIC16F877 and the ADC is 10 bit
I have not checked but I assume this line does the right thing and bring the high and low ADC results together
val= (ADRESH << 8) | ADRESL;
I am not sure why on earth you want this in a float rather than just carry it in a 16 bit integer. You are on a micro-controller stop playing with floats when you don't need they are incredibly slow on a micro avoid them like the plague.
So lets look at things logically
Val is 10 bits and so it goes between 0 and 1023
Next you need to multiply it by 325 so the largest number is 325x1023 = 332475
That result will fit into a long being 32 bits so I suggest you change val to a long.
You can then do the division but you just throw the decimals away anyhow keeping only 3 characters at end I can see so lets rewrite the whole lot. I am sure the division is supposed to be 1024 for 10 bits not 1023 but I will leave that to you.
I also can't for the life of me work out why you want to move the strings thru 2 buffers and your attempt at CR and LF will not work :=)
Try something like
unsigned long Val;
.... <snip> .....
Val = (ADRESH << 8) | ADRESL; // read dadta from channel 0
Val *= 325; // Multiplys Val x 325 result still in val (short hand for val = val *325)
Val /= 1023; // Divid Val by 1023 leave result in val (This will truncate the result)
// I guarantee you at this point Val is an integer value between 0-325 which are you 3 digits you want
// Now you need to convert it to ascii so you can use ltoa or itoa the compiler should support one
ltoa(Val, &uart_rd, 10); // Convert Val into uart_rd buffer in radix base 10 in other words decimal
strcat(&uart_rd, "\r\n"); // add CR + LF to the number string
UART1_Write_Text(&uart_rd1); // Now send the string out serial port 1
.... <snip> .......