Hola a Todos
Me llamo Jaime y pues soy un novato en esto de la programacion de pics en C, hasta ahora he hecho algunos programitas sencillos para irme adentrando poco a poco en esta onda. Pero ahora necesito que me echen la mano, estoy haciendo un programa para controlar un motor a pasos, y de manera general lo quiero controlar con tres botones, uno para giro a la izquierda, otro para giro a la derecha otro para detener. Al iniciar el programa quiero que espere a que yo oprima un boton para que comience a girar, y cuando oprima el boton de deterner pues que se detenga en la secuencia que iba. Entonces si yo oprimo alguno de los botones de giro, necesito que el motor empiece a girar pero en a partir de la secuencia en la que se detuvo, ya sea a la izquierda o a la derecha. Lo he intentado por medio de interrupciones por cambio en el puerto B pero no se que estoy haciendo que no me sale lo que necesito. Aqui esta el codigo que hice para que me digan que ando haciendo mal, de antemano muchas gracias y saludos desde Mexico.
#include <16f874A.h>
#fuses HS, NOPROTECT, NOWDT, NOPUT, NOBROWNOUT, NOLVP, NOCPD, WRT
#use delay(clock=20000000)
#byte PORTB=0x06
#BIT RBIF=0xB.0
#define DELAY 1000
#define SWEEP 4
#define NUMSTEPS 4
int tecla = 0;
char step[] = {5, 9, 10, 6};
char stepPos = 0;
#int_RB
void interrupt()
{
int current;
static int last=0xF0;
output_high(PIN_C1);
current=PORTB;
if (!(bit_test(current,5))&&(bit_test(last,5))) {tecla=2;}
if (!(bit_test(current,6))&&(bit_test(last,6))) {tecla=0;}
if (!(bit_test(current,7))&&(bit_test(last,7))) {tecla=1;}
delay_ms(50);
last=current;
}
void iniciar()
{
RBIF=0;
enable_interrupts(int_RB);
enable_interrupts(global);
}
void espera()
{
tecla=0;
while(tecla==0);
}
void pulseMotor()
{ aqui mando las salidas con un retardo
............ }
void stepMotorForw()
{ mando la secuencia hacia adelante
............... }
void stepMotorBack()
{ mando la secuencia al reves
......}
main()
{
char i;
set_tris_d(0x00);
iniciar();
while (TRUE)
{
do
{
espera();
}
while ((tecla!=2)&&(tecla!=1));
if (tecla==1)
{
for(i=0; i < SWEEP; i++)
{
output_low(PIN_C1);
pulseMotor();
stepMotorForw();
}
}
if (tecla==2)
{
for(i=0; i < SWEEP; i++)
{
output_low(PIN_C1);
stepMotorBack();
pulseMotor();
}
}
}
}
Se aceptan sugerencias y correcciones, gracias.