bonjour a tous j'ai un probleme pour commander mon servo avec mon pic 16f627 au niveau des impulsions que je mette 1ms ou 2ms mon servo tourne tout le temp vers la gauche impossible meme de le mettre au centre il va toujours en butée dans un seul sens si quelqu'un a une idée ou a deja eu ce probleme merci de m'aider svp je galere voici mon programme

;LogiPic v1.53 IdMax@free.fr - http://IdMax.free.fr
;***************************** ****************************** ******************
;* SERVO.prj
;* Pic 16F627
;* Code source inspiré des ouvrages de Bigonoff
;***************************** ****************************** ******************

LIST p=16F627; Définition de processeur

#include <p16F627.inc>; Définitions de constantes

__CONFIG _CP_OFF & _LVP_OFF & _MCLRE_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC

;***************************** ****************************** **********
;ASSIGNATIONS
;***************************** ****************************** **********

; REGISTRE OPTION_REG (configuration)
; -----------------------------------
OPTIONVAL EQU D'7' ; masque OPTION
; RBPU b7 : 1= Résistance rappel +5V hors service
; INTEDG b6 : 1= Interrupt sur flanc montant de RB0
; 0= Interrupt sur flanc descend. de RB0
; TOCS b5 : 1= source clock = transition sur RA4
; 0= horloge interne
; TOSE b4 : 1= Sélection flanc montant RA4(si B5=1)
; 0= Sélection flanc descendant RA4
; PSA b3 : 1= Assignation prédiviseur sur Watchdog
; 0= Assignation prédiviseur sur Tmr0
; PS2/PS0 b2/b0 valeur du prédiviseur
; 000 = 1/1 (watchdog) ou 1/2 (tmr0)
; 001 = 1/2 1/4
; 010 = 1/4 1/8
; 011 = 1/8 1/16
; 100 = 1/16 1/32
; 101 = 1/32 1/64
; 110 = 1/64 1/128
; 111 = 1/128 1/256

; REGISTRE INTCON (contrôle interruptions standard)
; -------------------------------------------------
INTERMASK EQU D'128' ; masque INTCON
; GIE b7 : masque autorisation générale interrupt
; PEIE-EE b6 : masque autorisation générale périphériques
; T0IE b5 : masque interruption tmr0
; INTE b4 : masque interuption RB0/Int
; RBIE b3 : masque interruption RB4/RB7
; T0IF b2 : flag tmr0
; INTF b1 : flag RB0/Int
; RBIF b0 : flag interruption RB4/RB7

; REGISTRE PIE1 (contrôle interruptions périphériques)
; ----------------------------------------------------
PIE1VAL EQU D'0'
; PSPIE b7 : Toujours 0 sur PIC 16F786
; ADIE b6 : masque interrupt convertisseur A/D
; RCIE b5 : masque interrupt réception USART
; TXIE b4 : masque interrupt transmission USART
; SSPIE b3 : masque interrupt port série synchrone
; CCP1IE b2 : masque interrupt CCP1
; TMR2IE b1 : masque interrupt TMR2 = PR2
; TMR1IE b0 : masque interrupt débordement tmr1

; REGISTRE T2CON (contrôle TIMER2)
; ----------------------------------------------------
T2CONVAL EQU D'0'
; UNUSED b7 : inutilisé, laisser à 0
; TOUTPS3 b6
; TOUTPS2 b5
; TOUTPS1 b4
; TOUTPS0 b3
; TMR2ON b2
; T2CKPS1 b1
; T2CKPS0 b0

; REGISTRE T1CON (contrôle TIMER1)
; ----------------------------------------------------
T1CONVAL EQU D'0'

PRVAL EQU D'0'

BRGVAL EQU D'5'
;***************************** ****************************** **********
;DEFINE
;***************************** ****************************** **********

;***************************** ****************************** ******************
;MACROS
;***************************** ****************************** ******************
BANK0 macro
bcf STATUS,RP1
bcf STATUS,RP0 ;passage en banque 0
endm

BANK1 macro
bcf STATUS,RP1
bsf STATUS,RP0 ;passage en banque 1
endm

BANK2 macro
bsf STATUS,RP1
bcf STATUS,RP0 ;passage en banque 2
endm

BANK3 macro
bsf STATUS,RP1
bsf STATUS,RP0 ;passage en banque 3
endm

;***************************** ****************************** ******************
;VARIABLES
;***************************** ****************************** ******************

;***************************** ****************************** ******************
; VARIABLES BANQUE 0 *
;***************************** ****************************** ******************
; Zone de 96 bytes
; ----------------
CBLOCK 0x20
cmpt1 : 1
cmpt2 : 1
cmpt3 : 1
ENDC


;***************************** ****************************** ******************
;DEMARRAGE SUR RESET
;***************************** ****************************** ******************
org 0x000 ; Adresse de départ après reset

goto _init_ ; Adresse 0: initialiser

;***************************** ****************************** ******************
;Initialisation
;***************************** ****************************** ******************
_init_
BANK0 ;Passage en banque 0
clrf PORTA ; Sorties portA à 0
BANK0 ;Passage en banque 0
clrf PORTB ; Sorties portB à 0
BANK0
CLRF PORTA ;Initialize PORTA by setting;output data latches
MOVLW B'00000111' ;Turn comparators off and
MOVWF CMCON ;enable pins for I/O functions
BANK1
MOVLW D'0'
MOVWF VRCON

BANK1 ;Passage en banque 1
clrf EEADR ; permet de diminuer la consommation
movlw OPTIONVAL ; charger masque
BANK1 ;Passage en banque 1
movwf OPTION_REG ; initialiser registre option

movlw T2CONVAL ; charger masque
BANK0 ;Passage en banque 0
movwf T2CON ; initialiser registre T2CON

movlw T1CONVAL ; charger masque
BANK0 ;Passage en banque 0
movwf T1CON ; initialiser registre T1CON

movlw PIE1VAL ; charger masque
BANK1 ;Passage en banque 1
movwf PIE1 ; initialiser registre PIE1

movlw PRVAL ; charger masque
BANK1 ;Passage en banque 1
movwf PR2 ; initialiser la valeur du débordement de TMR2

BANK0 ;Passage en banque 0

;***Direction des I/O***
BANK1 ;Passage en banque 1
bcf TRISA,3 ;
BANK0 ;Passage en banque 0

movlw INTERMASK
BANK0 ;Passage en banque 0
movwf INTCON

goto start ; sauter au programme principal

;***************************** ****************************** ******************
;Routines
;***************************** ****************************** ******************
;***************************** ****************************** ******************
;* Temporisation
;***************************** ****************************** ******************
_tmpT__18000µs
nop
movlw d'59'
movwf cmpt3
_b3T__18000µs
movlw d'43'
movwf cmpt2
_b2T__18000µs
movlw d'1'
movwf cmpt1
_b1T__18000µs
decfsz cmpt1,f
goto _b1T__18000µs
decfsz cmpt2,f
goto _b2T__18000µs
decfsz cmpt3,f
goto _b3T__18000µs
return

_tmpT__1500µs
nop
movlw d'1'
movwf cmpt3
_b3T__1500µs
movlw d'213'
movwf cmpt2
_b2T__1500µs
movlw d'1'
movwf cmpt1
_b1T__1500µs
decfsz cmpt1,f
goto _b1T__1500µs
decfsz cmpt2,f
goto _b2T__1500µs
decfsz cmpt3,f
goto _b3T__1500µs
return

;***************************** ****************************** ******************
;Programme principal
;***************************** ****************************** ******************
start ;
_sautj0_2
;***Etat d'une sortie***
BANK0 ;Passage en banque 0
bcf PORTA,3

call _tmpT__20000µs
;***Inversion d'une sortie***
BANK0 ;Passage en banque 0
movlw D'8'
xorwf PORTA, f

call _tmpT__1500µs
goto _sautj0_2

END ; directive fin de programme