Wenn du bei 4 MHz 1500 einstelle musst, um 1,5ms zu bekommen, dann musst du bei 12 MHz:

1500/4*12 einstellen.

Vorrausgesetzt das Pulseout absolut Taktabhängig ist, was ich vermute, da kein Timer verwendet wird.

Was dein Programm angeht, so müßte es funktionieren. Kommt aber auch darauf an, wie du die Taster beschaltet hast. Gehen die von den Input-Pins an +? Dann solltest du besser einen Pulldown-Widerstand einfügen. Du kannst die Taster natürlich auch an - gehen lassen und die internen Pullups verwenden. Dann müßten die if-abfragen allerdings lauten "if up=0 then".
Was den Definitionsbereich angeht ist dies nur über dim in gewissen Grenzen möglich (Byte, Integer, Word, etc.) du solltest daher noch ein dein Programm einbauen, das z.B. I nur dann erhöht wird, wenn der Wert von I nicht schon zu hoch ist und nur dann vermindert wird, wenn der Wert keinen kleineren Impuls als 1ms erzeugt.
Damit beugst du einem an seine Grenzen anschlagenden Servo vor.

Gruß MeckPommER