Like I already said you have to check the busy flag of the LCD instead of using external "555" based hardware
I understand you completely, BUT I could just ground the write pin. I want to use the 555 timer, so that it can determine when I can send the next character. I will set the 555 timer to a fixed frequency that is known to work with the LCD, then I will have the 555's output trigger the timer input so that the internal timer can increment, and eventually, I can halt the code until a timer overflow occurs. The wait code is basically 2 bytes!
I can't remember the exact name of the timer 0 overflow tag, but I will use T0F to indicate it.
Here is the code:
This code means that the processor (according to a user's standpoint) will do absolutely nothing until the timer is overflowed. When it is overflowed, code continues.
Another thing that needs to be considered is that I don't have too many bytes to play with from the microprocessor. I'm lucky I can use 10, 8 of them being Port 1, and the other 2 are P3.6 and P3.7. I can use P3.6, and P3.7, just because I am not dealing with external RAM.
Now if I encountered an application where the processing functions are much more important than what is displayed on an LCD (like if the processor was part of a PC modem for example), I should then be able to remove the LCD from the circuit, and the circuit should still run. My code shall allow that. If I were to depend on the "busy" flag, then the code will halt forever.
I'm sorry if I am leaning in my own direction on this, but I like code that is optimal, and that doesn't 100% on other things, especially if they are unimportant. Perhaps this is the idea Microsoft had when developing Windows.
By the way, It is called "Multitasking".
Thank god interrupts exist.