Problema PWM Con Pic 16f877a

hola Gente soy nuevo en el foro y novato en el tema de programacion...la cuestion es que estoy tratando de manejar 2 motores PAP con un 16F877A y un ULN 2803 y eh desarollado en assembler el programita pero la verdad es que aunque tengo avances ahora el segundo motor no me anda y otras fallas por ahi algun conocedor pueda chusmearlo y decirme algun error que tenga el programa que aqui les dejo:

#INCLUDE<P16F877A.INC>

POTE EQU 0X30
CONT1 EQU 0X31
CONT2 EQU 0x32
POTE1 EQU 0x33

ORG 0X00
ORG 0X04
ORG 0X05


banksel ADCON1
MOVLW B'00000100' ;selecciono RA0 como analogica
MOVWF ADCON1
MOVLW b'00000011'
MOVWF TRISA
CLRF TRISC
CLRF TRISB
CLRF TRISD

banksel ADCON0
MOVLW B'01000000' ;selecciono la velocidad de conversion
MOVWF ADCON0
CLRF PORTC
CLRF PORTB
CLRF PORTD

;--------------------- Motor uno (x) ------------------

INICIO
CLRF PORTC
BCF STATUS,C
BTFSC STATUS,C
BSF PORTC,2
CALL MUESTREO ;VOY A MUESTREO y hago la conversion

banksel PORTC
BTFSS POTE,7 ;testeo si el 7° bit esta un uno? para saber que temperatura hay
GOTO MENOR ;(128 es la mitad mas uno) por lo cual es maximo

BSF PORTC,0 ;indico la temperatura es mayor que la mitad
MOVFW POTE
SUBLW 0x7F
MOVWF POTE

GOTO DERECHA

MENOR
MOVFW POTE
SUBLW 0x7F
MOVWF POTE

GOTO IZQUIERDA ;indico la temperatura NO es mayor que la mitad

;**********************SUB RUTINAS*********************

MUESTREO
banksel ADCON0
MOVLW b'01000001'
MOVWF ADCON0 ;ADON=1 encendido el conversor
CALL RETARDO
BSF ADCON0,2 ;comienzo de la conversion

TEST
BTFSC ADCON0,2 ;testeo si finalizo la conversion
GOTO TEST

MOVFW ADRESH ;muevo el valor de conversion de temp
MOVWF POTE
BCF ADCON0,2
RETURN

RETARDO
MOVLW 0X30
MOVWF CONT1
UNO DECFSZ CONT1
GOTO UNO
RETURN


DELAY
MOVFW POTE
MOVWF CONT1
DOS MOVLW 0x70
MOVWF CONT2
DECFSZ CONT1
GOTO $+2
GOTO $+4
DECFSZ CONT2
GOTO $-1
GOTO DOS
RETURN

DERECHA
MOVLW b'00000001'
MOVWF PORTB
CALL DELAY
MOVLW b'00000011'
MOVWF PORTB
CALL DELAY
MOVLW b'00000010'
MOVWF PORTB
CALL DELAY
MOVLW b'00000110'
MOVWF PORTB
CALL DELAY
MOVLW b'00000100'
MOVWF PORTB
CALL DELAY
MOVLW b'00001100'
MOVWF PORTB
CALL DELAY
MOVLW b'00001000'
MOVWF PORTB
CALL DELAY
MOVLW b'00001001'
MOVWF PORTB
CALL DELAY
CLRF PORTB
GOTO INICIO1

IZQUIERDA
MOVLW b'00000001'
MOVWF PORTB
CALL DELAY
MOVLW b'00001001'
MOVWF PORTB
CALL DELAY
MOVLW b'00001000'
MOVWF PORTB
CALL DELAY
MOVLW b'00001100'
MOVWF PORTB
CALL DELAY
MOVLW b'00000100'
MOVWF PORTB
CALL DELAY
MOVLW b'00000110'
MOVWF PORTB
CALL DELAY
MOVLW b'00000010'
MOVWF PORTB
CALL DELAY
MOVLW b'00000011'
MOVWF PORTB
CALL DELAY
CLRF PORTB
GOTO INICIO1

;--------------------- Motor dos (y) ------------------

INICIO1
CLRF PORTC
BCF STATUS,C
BTFSC STATUS,C
BSF PORTC,3
CALL MUESTREO1 ;VOY A MUESTREO y hago la conversion

banksel PORTC
BTFSS POTE1,7 ;testeo si el 7° bit esta un uno? para saber que temperatura hay
GOTO MENOR1 ;(128 es la mitad mas uno) por lo cual es maximo

BSF PORTC,1 ;indico la temperatura es mayor que la mitad
MOVFW POTE1
SUBLW 0x7F
MOVWF POTE1

GOTO DERECHA1

MENOR1
MOVFW POTE1
SUBLW 0x7F
MOVWF POTE1

GOTO IZQUIERDA1 ;indico la temperatura NO es mayor que la mitad

;**********************SUB RUTINAS 1 *********************

MUESTREO1
banksel ADCON0
MOVLW b'01001001'
MOVWF ADCON0 ;ADON=1 encendido el conversor
CALL RETARDO
BSF ADCON0,2 ;comienzo de la conversion

TEST1
BTFSC ADCON0,2 ;testeo si finalizo la conversion
GOTO TEST1

MOVFW ADRESH ;muevo el valor de conversion de temp
MOVWF POTE1
BCF ADCON0,2
RETURN

;RETARDO
; MOVLW 0X30
; MOVWF CONT1
;UNO DECFSZ CONT1
; GOTO UNO
; RETURN


DELAY1
MOVFW POTE1
MOVWF CONT1
DOS1 MOVLW 0x70
MOVWF CONT2
DECFSZ CONT1
GOTO $+2
GOTO $+4
DECFSZ CONT2
GOTO $-1
GOTO DOS1
RETURN

DERECHA1
MOVLW b'00000001'
MOVWF PORTD
CALL DELAY
MOVLW b'00000011'
MOVWF PORTD
CALL DELAY
MOVLW b'00000010'
MOVWF PORTD
CALL DELAY
MOVLW b'00000110'
MOVWF PORTD
CALL DELAY
MOVLW b'00000100'
MOVWF PORTD
CALL DELAY
MOVLW b'00001100'
MOVWF PORTD
CALL DELAY
MOVLW b'00001000'
MOVWF PORTD
CALL DELAY
MOVLW b'00001001'
MOVWF PORTD
CALL DELAY
CLRF PORTD
GOTO INICIO

IZQUIERDA1
MOVLW b'00000001'
MOVWF PORTD
CALL DELAY
MOVLW b'00001001'
MOVWF PORTD
CALL DELAY
MOVLW b'00001000'
MOVWF PORTD
CALL DELAY
MOVLW b'00001100'
MOVWF PORTD
CALL DELAY
MOVLW b'00000100'
MOVWF PORTD
CALL DELAY
MOVLW b'00000110'
MOVWF PORTD
CALL DELAY
MOVLW b'00000010'
MOVWF PORTD
CALL DELAY
MOVLW b'00000011'
MOVWF PORTD
CALL DELAY
CLRF PORTD
GOTO INICIO

END

Desde ya muchisimas gracias por cualquier colaboracion y ayuda

Saludos
 
Atrás
Arriba