Thought I would send one last post. I found a mosfet h-bridge in the form of Vishay's Si9986. But I had the same problem of the motor running slowly and refusing to change speed. I then decided that I must have an oscilloscope, so I built one from one of the miniature digital kits. (What would we do without the Chinese!). I was then able to see that the PIC was producing a pulsed pwm waveform, but it was not changing when the motor was attached. If I removed the motor I was able to increase the duty cycle as expected. I could then re-connect the motor and it would run at a new higher speed, but again it would not change speed, either up or down.
My program used interrupts to detect change on the input pins, and I think what was happening is that the pulse applied to the highly inductive motor produced interference which tripped the interrupt. The program then searched for an input which was no longer there, so according to my program it continued at constant speed, only to be immediately interrupted by the next pulse, and so on. I had used capacitors to decouple brush noise, although, Ron, I didn't try the 'kick-back' capacitor. That might have cured the problem. Instead I decided to re-program the pic and not use interrupts, but look directly at the inputs. The natural delay in the programming steps avoided the kick-back pulse and the program could detect the actual inputs. It worked, all problems solved. The motor now accelerates, decelerates, forward and reverse - great. All I need now is a sound generator to simulate a diesel engine.