A partial solution is to create larger transmit and receive buffers in software and utilize an interrupt handler to manage the details of receiving and transmitting characters. The interrupt handler is a user supplied routine that is executed, asynchronously to the user code, whenever the USART transmit buffer becomes empty or the USART receive buffer becomes full. This relieves the user program of the burden of monitoring the USART buffers and, by providing additional buffer space, helps decouple the user program from the communication process. It is only a partial solution because once the larger software receive buffer is full, any additional characters received will be lost. A complete solution, described in Section 11.5, utilizes additional USART flow control signals to block communication when no future space exists