Implementing serial communications protocols in software by directly manipulating hardware signals, also known as “bit-banging”, requires a different set of considerations than simply inserting an USART or UART in the system.

The first section, Assumptions, is a summary of the basic assumptions about the reader used throughout this paper. Definitions contains a description of terms used in the context of this paper. Hardware versus Software Communication presents the similarities and differences between these two different approaches to serial communications. Software Timing discusses the importance of accurate timing, especially with asynchronous protocols. Example Application is a detailed example system demonstrating both synchronous and asynchronous protocol implementation. The final section, Reference Material Sources, is a list of resources for additional information.