I have an existing board with a surface mount Picaxe20M2, which I wanted to "re-purpose" to control some remote controlled tweezers. Because the I/O of the existing board is physically limited, I use the "serout" pin (A.0) as the servo data port. My initial attempt using "servo" and "servopos" was a bit twitchy and glitchy, so I decided to just use raw high and low commands with the appropriate timing. The 20M2 clock is set to 32 MHz, so each pauseus is only 1.25 uSec, giving much finer control of the servo (a Spektrum A3040 micro servo) position. There's other extraneous stuff like turning on an LED to show that the board is powered. With this technique, the tips of the tweezers can be set within about 0.0005 inch by changing the "open" and "close" variables.

This works very well and repeatably with this particular servo, which is driven from the same on-board +5 volt regulator as powers the 20M2. I have not tried this with other servos. I did notice that the servo seems, subjectively, much "happier" (smoother and quieter), than with the standard servo and servopos commands on a "normal" output pin.

And yes, the servo does freak out a bit during a download, but not at a damaging level. Your mileage may vary.

Code:
#Picaxe 20M2                           ;Picaxe type
#no_data                               ;do not load data
#no_end                                ;do not auto-end
disconnect                             ;do not allow new downloads
disablebod                             ;disable brownout detection to prevent servo glitch
setfreq M32                            ;clock frequency 32 MHz
pullup %0000010000000000               ;apply weak pull-up to C.2 for switch

symbol open=1430                       ;open servo pulsewidth:  1.7875 msec
symbol close=922                       ;close servo pulsewidth: 1.1525 msec

init:
high B.0                               ;turn on power LED
pwmout B.1,24,95                       ;dim at 5% duty cycle
do
   high A.0                            ;initialize servo (open)
      pauseus open
   low A.0  
      pause 160                        ;20 msec delay
loop until pinC.2=0  
   
main:
do
   if pinC.2=0 and b0=0 then           ;if button is pressed and tweezers are open
      pause 160                        ;20 msec switch debounce
         for w1=open to close step -1  ;servo signal from open to close 
            high A.0                   ;slowly rotate servo clockwise (close)
               pauseus w1
            low A.0     
               pause 50                ;set closing speed
         next w1
            b0=1                       ;set position flag
   endif 
   
   if pinC.2=0 and b0=1 then           ;if button is pressed and tweezers are closed
      pause 160                        ;20 msec switch debounce
         for w1=close to open step 10  ;servo signal from close to open
            high A.0                   ;rotate servo counterclockwise (open)
               pauseus w1
            low A.0     
               pause 16                ;delay 2 msec for servo stability
         next w1
            b0=0                       ;set position flag
   endif
loop