A continuación os muestro una rutina para mover un servo en ensamblador. Esta preparado para un PIC16F876A a 4Mhz pero podeis modificarlo o adaptarlo a vuestro antojo segun la aplicacion y el pic que necesiteis...
Codigo Ensamblador:
;********************************************************************************
; Fecha: 17 Abril 2007
; Autor: Julio Montagut Desco
; Web: www.jvmbots.es
;
; Programa: Servo simple
; Hardware: PIC16F876
; XTAL: HS - 4Mhz
;
; Programa para recorrer los 180º de un servo conectado en PORTB.0
;********************************************************************************
__CONFIG _BODEN_ON & _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC & _DEBUG_OFF & _CPD_OFF & _LVP_OFF
LIST P=16F876A
INCLUDE
CBLOCK 0x0C
R_ContA,R_ContB,cnt1,servo,R_ContC,R_ContD
ENDC
ORG 0
goto Inicio
Inicio
bsf STATUS,RP0 ; Acceso al Banco 1.
clrf TRISB ; PORTB son salidas
bcf STATUS,RP0 ; Acceso al Banco 0.
main:
movlw 0x7F ;Posicion del servo al centro (0-255)
movwf servo
movlw b'1'
movwf PORTB ;Pin del servo a 1
movlw d'160' ;Ajuste fino de 0º del servo +/- 0'4 - 0'5 ms
call Delayus ;Retardo de 0'4 - 0'5 ms
clrf cnt1 ;Reset del contador del bucle
PWM ;Inico del bucle del PWM
movlw 0
decfsz servo,1 ;Comparacion del contador con la variable de posicion
iorlw 1
andwf PORTB,1
nop
incfsz cnt1, 1
goto $-6 ; Bucle
movlw d'20'
Call Delayms ;Delay para completar los 20ms del ciclo de 50Hz
Goto main
;Delay_us
Delayus
movwf R_ContA
us_a
goto $+1
goto $+1
goto $+1
goto $+1
decfsz R_ContA,F
goto us_a
return
;Delay_ms
Delayms
movwf R_ContC
ms1_a
movlw d'249'
movwf R_ContD
ms2_a
nop
decfsz R_ContD,F
goto ms2_a
decfsz R_ContC,F
goto ms1_a
return
END





