Mover un servomotor con PIC 16F876A

Estoy intentando mover un servomotor hi tec hs 55 con un pic 16F876a mi programacion es la siguiente
:

su funcionamiento es el siguiente:
por medio de 3 sensores de luz uv mnadar un 1 logico al puerto RB7,RB6 Y RB5
Cuando el RB7 detecte 1 mover el servo 160 grados
Cuando el RB6 detecte 1 mover servo 90 grados
Cuando el RB5 detecte 1 mover servo a 20 grados


los sensores funcionan correctamente ya los eh probado si mandan un uno logico correctamnete, me pregunto si la forma de mandar los bits por los puertos estan mal,
muchas gracias por su ayuda














;Aqui se especifica que pic que se va a usar
list P=16F876A
;***************************************************************
;incluimos las librerias delpic 16f877
#include "p16F876A.inc"
;***************************************************************
__config _XT_OSC & _WDT_OFF & _PWRTE_ON &_BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_OFF &_DEBUG_OFF & _CP_OFF
;Indicamos la localidad de memoria en la que vamos a escribir
cblock 025H
;***************************************************************
;En esta seccion declaramos todas las variables que ocuparemos

TIME1
TIME2
TIME3
TIME4
TIME5
TIME6

ENDC

;***************************************************************
;depsues de declarar las variables inicamos la programacion de los puertos
;recordemos que la declaracion de puertos se realiza en un banco distinto a la programacion normal es decir
; Para programar los puertos se realiza en el BANCO 1
; Para programar el codigo fuente es en el BANCO 0

;inicializar el puerto B como salida

movlw B'00000000' ;cargamos un valor binario de 8 bits al reg de trabajo
movwf PORTB ;Movemos los 8 bits en 0 AL PUERTO B En estas secciones se limpia el puerto B
bcf STATUS,RP1
bsf STATUS,RP0 ;Nos vamos al banco 1
movlw B'11100000'
movwf TRISB ; Cuando movemos los ceros al trisB estamos declarando a nuestro puerto b como salida
bcf STATUS,RP0 ;nos vamos al banco 1 para seguir con la programacion del programa principal


;**************************************************************************************************************************************************
;PROGRAMACION PARA EL RECONOCIMIENTO DEL ESTADO DEL PUSH BUTTON

inicio



;**************************************************************************************************************************************************

;Programa 1

SOLTAR1 btfss PORTB,7 ;Espera a que se suelte el pulsador.
goto SOLTAR1

movlw H'16'
movwf PORTB
call Retardo1

SOLTAR2 btfss PORTB,6 ;Espera a que se suelte el pulsador.
goto SOLTAR2

movlw H'16'
movwf PORTB
call Retardo2

SOLTAR3 btfss PORTB,5 ;Espera a que se suelte el pulsador.
goto SOLTAR3

movlw H'16'
movwf PORTB
call Retardo3









GOTO inicio







;¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨

Retardo3

MOVLW d'7'
MOVWF TIME6
CICLO6 MOVLW d'43'
MOVWF TIME5
CICLO5 DECFSZ TIME5,1
GOTO CICLO5
DECFSZ TIME6,1
GOTO CICLO6


nop
Return




Retardo2

MOVLW d'17'
MOVWF TIME4
CICLO4 MOVLW d'43'
MOVWF TIME3
CICLO3 DECFSZ TIME3,1
GOTO CICLO3
DECFSZ TIME4,1
GOTO CICLO4


nop
Return





Retardo1

MOVLW d'17'
MOVWF TIME2
CICLO2 MOVLW d'43'
MOVWF TIME1
CICLO1 DECFSZ TIME1,1
GOTO CICLO1
DECFSZ TIME2,1
GOTO CICLO2
NOP
RETURN


END
 
Luiszetayo: Para tener todos los elementos, envia las caracteristicas de los servos empleados y el esquema del circuito.
Saludos
 
Atrás
Arriba