Everything is relative. Instead to send a byte for data and another for instruction, the LCD controller could receive a 12 bits word containing instruction AND data at the same time. It could be also in serial mode. But, to save some bus width problems and turn it compatible with most of the microprocessors, including the ones that don't have any serial communication capability, they made the way it is, and it is easy, isn't? Everything looks difficult at the first view, but remember that "difficulty" can be translated to "lack of knowledge". I am pretty sure that 4 bits comm to LCD is not difficult anymore for you, right? About the BUSY flag... 1) are you sure you are setting RS "low" level when trying to read the busy bit? 2) busy flag is read (bit 7) at the first nibble read in 4 bits mode. 3) you can not check busy flag at the first initialization instructions... it needs pure time delays, so if your READ BUSY FLAG routine is checking the busy flag even for the very first initialization instructions, it will not work and will hang up waiting the busy bit that will never come. for further reading take a look at some initialization routines at: http://www.ustr.net/lcd001.shtml Wagner. John Considine wrote: > > I will admit the 4bit does make it look more difficult but I pulled the code > from an Application Note from Microchip originally. I have since change the > code to reflect the suggestions made by everyone. Ironically, everyone's > suggestions have been very similar leading me to believe that I am on the > correct path. However, I still have the problem where the LCD display will > not print the letters unless I comment out the goto BUSY_FLAG? as shown > below. It must be something simple, but I can't catch it.