UART only returns the same character
Your tx_data function is defined as taking a single character (unsigned char) as an argument but you are passing a string  (const char *). A good compiler should give you a warning about this.  Try :

tx_data ('m');