Thanks. I've usually used these LCDs in 4-bit mode, with 6 lines (just grounding the R/W, which just means you have to give it enough delay that you know each instruction is finished, since you can't poll it). I have working sample code in different forms at
http://wilsonminesco.com/6502primer/LCDcode.asm, although I see I don't have PIC16 code there which I thought I did have. I do really like I²C, and SPI too.
As for assembly language, I make heavy use of macros to effectively raise the level of the language, including with Forth-like program-flow-control structures, which really make things a lot more clear and eliminate most of the labels. PIC16's have a lot of mickeymousities; but terrible processor aside, Microchip had a lot of attractions that other suppliers didn't have in the mid-1990's, and these got me started putting PICs in products. This was before microcontrollers were ubiquitous, and back when most microcontrollers were very expensive to get started developing on. Microchip offered a free assembler, workbench programmability, lots of onboard processor support like the power-up timer and watchdog timer in addition to the usual complement of other timers and I/O, lots of versions in stock at lots of distributors, etc.. In almost all cases, the macros assemble
exactly the same thing I would do by hand; but they hide many of those PIC16 mickeymousities and in other ways just reduce the length of the source code. This raises programmer productivity, reduces bugs (because you can see what you're doing better), improves code maintainability, etc., with, in most cases, no penalty in run speed or in memory taken. I have examples of similar macros' usage in 6502 code in the last 40% of my page on simple methods for multitasking at
http://wilsonminesco.com/multitask/ . See especially WATCH_ACIA, XFER_TM_2_ACCb, and KEY_TASK. You'll find they hardly look like assembly language. The last time I put an LCD with the Hitachi 44780 controller in a product was six years ago, and again it was with a PIC16, multitasking.