Hola amigo:
Claro que te puedo ayudar con un pequeño aporte, seria con la comunicacion rs232 entre el PIC y la PC, no se si estes familiarizado con el lenguaje en C pero tratare de ser lo mas explicito posible, este pequeño programita esta echo en el compilador CCS y es para el PIC 16f877. Te puedes apoyar con la hyperterminal de la PC o si quieres me pasas tu correo y te hago llegar el programita que yo utilizo (docklinght) y tambien te podria mandar el compilador en el que fue echo el programilla. Bueno el código el el siguiente:
#include <16F877.h>
#FUSES XT,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)
///////////////////////Principio del programa//////////////////////////////////
void main(void)
{
int dato=0;//declaracion de variables
set_tris_b(0b11111111);//puerto b como salida
set_tris_c(0b10111111); //RC7/Rx entrada, RC6/Tx salida
output_b(0b00000000); //pone en ceros todo el puerto b
while(TRUE)//Ciclo
{
if(kbhit())//si ha llegado un dato
{
dato=getc(); //Lee el dato recibido
if (dato==1)//si el dato es 1
{
output_high(PIN_B0);
}
if (dato==2)//si el dato es 2
{
output_low(PIN_B0);
}
}
}
}
//////////////////////////////Fin del programa//////////////////////////////////Enpesamos por los fuses:
#FUSES NOWDT,XT
Los fuses son instrucciones para el programador NOWDT le indica al programador que no vas a usar el perro guardian, XT le indica que vas a usar un oscilador externo.
---------------------------------------------------------------------------------------------------------------
#use delay(clock=4000000)
Esto corresponde al oscilador de 4mhz que se ocupa
----------------------------------------------------------------------------------------------------------------
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
Esto es la configuración de la comunicacion rs232 en la cual se ocupan 9600 baudios correspondientes a la velocidad de transmisión, ocupamos PIN_C6 como pin de transmisión y el PIN_C7 como PIN de recepción.
----------------------------------------------------------------------------------------------------------------
void main(void)
{
}
Esto es una función la cual corresponde a nuestro programa principal, es decir todo lo que este dentro de esta función es nuestro programa.
----------------------------------------------------------------------------------------------------------------
int dato=0;//declaracion de variables
set_tris_b(0b11111111);//puerto b como salida
set_tris_c(0b10111111); //RC7/Rx entrada, RC6/Tx salida
output_b(0b00000000); //pone en ceros todo el puerto b
Aqui declaramos una variable como entero llamada "dato" en la cual vamos almacenar el dato transmitido de la PC al PIC.
Luego configuramos el puerto B como salida poniendo puros unos en el tris B, este puerto lo vamos a usar para prender o apagar tu motor.
Después configuramos el puerto C como entradas y salidas segun corresponde a los pines de recepción y transmisión.
Ponemos todo los pines del puerto B en cero para asegurar que ninguno se active hasta que se reciva algun dato por rs232.
----------------------------------------------------------------------------------------------------------------
if(kbhit())
{
}
El if en lenguaje en C que es ocupado como pregunta , en este caso lo que preguntamos con esta instrucción es que si ha llegado un dato de la PC al pic via rs232. Todo lo que esta dentro de esta instrucción se realiza si es que ha llegado un dato, si no, el pic no realiza nada y solo espera a que llegue el dato.
----------------------------------------------------------------------------------------------------------------
dato=getc();
Esta instrucción se encuentra dentro del if(kbhit()), es decir, que se ejecutara solo si ha llegado un dato de la PC. Con esta instrucción pasamos lo que hay en getc() hacia la variable dato declarada al principio de nuestra programación. En getc() se almacenan los datos recividos de la comunicacion rs232,es importante aclarar que debes ser muy cuidadoso con lo que le mandas de la PC al PIC, ya que como estamos esperando recivir 1 y 2 pero como variables enteras, si no los mandas asi esto te causara problema.
Por ejemplo si mandas un 1 como caracter el PIC no lo tomaria en cuenta ya que 1 en caracter es igual a 49 en entero o decimal.
----------------------------------------------------------------------------------------------------------------
if (dato==1)//si el dato es 1
{
output_high(PIN_B0);
}
if (dato==2)//si el dato es 2
{
output_low(PIN_B0);
}
Por ultimo solo comparamos cual fue el dato recivido si uno o dos, si es uno ponemos en 1 el pin 0 del puerto B y si es 2 ponemos en cero el pin 0 del puerto B, es importante aclarar que estoy tomando en cuenta que solo necesitas prender y apagar un motor controlado por el PIC, no se si vallas a ocupar un motor a paso u otro, si es asi tendriamos que modificar el programa.
----------------------------------------------------------------------------------------------------------------
En esta pagina tienes la manera en la que ocuparias el max 232 y como se conecta tanto al PIC como a la PC:
http://www.iearobotics.com/proyectos/cuadernos/ct1/images/max232-conex.jpgBueno es todo y espero te sirva de algo, si necesitas el sofware del compilador o el de simulación de la hypeterminal me dices y te lo mando. Suerte