UART issue with receiving a char
The main issue is probably in the fact that you do not wait for a new character to be received before reading the UCA0RXBUF register. Unless you're using interrupt-based approach, you should busy loop like this:

while(!(UC0IFG &amp; UCA0RXIFG)); /* wait for UCA0RXIFG to become set */
received = UCA0RXBUF;  /* read the received character */


You do not show the transmitting-side code here, but the idea there is the same - write to TXBUF register, and then wait until the byte is transmitted. Or use interrupts to get truly asynchronous operation over the UART (the "A" means asynchronous).

More broadly, I think you just have the wrong approach here. Why not use one of the synchronous buses? The MCU supports SPI and I2C. Normally when interoperating between two MCUs one of these protocols is used, putting one for the MCUs master mode and the other one in slave mode. Synchronous data exchange is generally more reliable and you don't have to worry about things like MCU speed calibration.