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
------------------
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
#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
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