Hola a todos!!
Espero que alguien me pueda ayudar con el problema que tengo...lo que pasa es que estoy tratando de controlar un motor con el PIC16F84A y con el integrado L293D, segun yo las conexiones entre ambos estan bien, sin embargo tengo dificultades para que el motor siga las instrucciones de mi programa, ya que lo que quiero es que al presionar un push button el motor gire para un lado y se detenga (si el push sigue presionado despues de que el motor se haya detenido, entonces el motor debera continuar parado), luego si el push ya no esta presionado que gire en sentido contrario y tambien se detenga. No se que es lo que me hace falta o esta mal en el programa, aca se los anexo:
; Zona de Datos*************************************************
LIST P=16F84; tipo de procesador
include "P16F84.INC"; Definiciones de registros internos
__CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_XT_OSC
;Declaracion de variable****************************************
w equ 0x00;
f equ 0x01;
PORTB equ 0x06;
STATUS equ 0x03;
CBLOCK 0x0c;
R_CONTA
R_CONTB
ENDC
#DEFINE SensorMarcha PORTA, 1; Interruptor de puesta en marcha RA1
ORG 0;
Inicio
bsf STATUS, RP0; Acceso al Banco 1
bsf SensorMarcha; configura la linea de entrada RA0
bsf TRISA, 1;
clrf TRISB; Las lineas del puertoB se configuran como salidas
bcf STATUS, RP0;Acceso al Banco 0
Sensar btfsc SensorMarcha; Salta si la entrada esta en 0
goto Sensar;
movlw 0x0A; giro a favor
movwf PORTB;
goto Retardo_1ms; se llama a la etiqueta para hacer el retardo
Paro clrw
movwf PORTB; se detiene el motor
btfss SensorMarcha;Salta si la entrada esta en 1
goto Paro;
movlw 0x06; giro en contra
movwf PORTB;
goto Retardo_1ms1; se llama a la subrutina para hacer el retardo
Paro1 clrw
movwf PORTB; Se detiene el motor
goto Sensar
; Subrutina "Retardo" -------------------------------------------------------------------
;
; Subrutina de retardo en milisegundos. El valor cargado en W antes del llamado a la
; subrutina indica el número de milisegundos del retardo.
;
Retardo_1ms
movlw d'249'; Numero de veces que se repetirá el ciclo para generar 100 ms
movwf R_CONTA
top nop
nop
nop
nop
nop
nop
decfsz R_CONTA,f ; Pregunta si termino 1 ms
goto top
goto Paro
Retardo_1ms1
movlw d'249'; Numero de veces que se repetirá el ciclo para generar 100 ms
movwf R_CONTB
top1 nop
nop
nop
nop
nop
nop
decfsz R_CONTB,f ; Pregunta si termino 1 ms
goto top1
goto Paro1
end
Como pueden ver me toco hacer el retardo como una etiqueta y con la instruccion goto por que cuando lo hice con la instruccion call y return no hacia el paro. En este caso, giraba una vez hacia el paro pero ya no hacia el otro giro. En verdad espero que me puedan ayudar, por que ya no se que mas hacer. Muchas Gracias!!