No, the code runs much more slowly without changing anything at all, save swapping the connections to the 40-pin 4550, of course. Everything points to the DEFINE OSC directive.

I've written a machine code interrupt routine, which flashes the LED according to an interrupt onTMR0 and, without doing formal timings, it appears to be the same on both devices. This makes sense to my hobbyist brain, as there IS a 20mhz crystal running the chip, and I've set the config bits manually in mplab, as well as setting them in code between the #CONFIG and #ENDCONFIG tags.


However, the pause command is well out, and I'm assuming the problem is with pbp3, as it uses its own DEFINE OSC setting to calculate timings for its commands when compiling them. I've just attached my serial LCD and copied and pasted some lines from a working project, and nothing happened. I played around with some values, and garbage came up on screen. This is symptomatic of the pbp3 problem I've assumed above. Swapped out the 4550 back to the 2550, and voila! LCD messages working perfectly!

I found some threads on here, which say to set the DEFINE OSC to 48, regardless of the actual oscillator, but that does not work either.

I mix and match assembler and pbp3 code. Why re-invent the wheel? The serout and serout2 commands make writing to an LCD a piece of cake, for instance, and I don't have the expertise to write the equivalent routines in assembler. Anyway, that would obviate the need for pbp3 in the first place!

As I said, I'm far from being an expert, but all the signs are that pbp3 and the 4550 are not getting along...

MELabs have not yet replied to me.

G