Muy bien, este es el código, y es para mover 4 drivers de motores series de la marca pololu:
lo que hice fue una función que tuviera las configuraciones de los distintos canales, con la idea de que, cuando vaya a trabajar sobre un canal específico, llamar a la función, configurar adecuadamente el rs232 (1 canal por hardware y los otros 3 por software) e inmediatamente enviar los datos necesarios. Pero eso no me funciona al menos en el proteus y temo hacerlo en realidad sea que dañe el micro.
#include <18f4523.h>
#fuses INTRC_IO //Oscilador interno, sin CLKOUT
#fuses NOFCMEN //Desabilitado el modo de fallo de reloj
#fuses NOIESO //Modo de conmutacion interna - externa desabilitado
#fuses PUT //Power Up Timer habilitado
#fuses BROWNOUT_NOSL //Brownout habilitado normal
#fuses BROWNOUT //Brownout habilitado
#fuses BORV21 //Brownout con 2.1 V
#fuses NOPBADEN
//#fuses NOLPT10OSC //Timer 1 funcionando en modo normal
#fuses MCLR //Pin Master Clear usado como Master Clear
#fuses NOSTVREN //El Stack no causa reset
#fuses NOLVP //Programación con alto voltaje
#fuses NOXINST //Modo legacy - de compatibilidad
#fuses NODEBUG //Modo debug desabilitado
#fuses NOPROTECT //Memoria de programa desprotegida
#fuses NOCPB //Memoria de arranque (boot) desprotegida
#fuses NOCPD // Memoria EEPROM desprotegida
#fuses NOWRT //Memoria de programa desprotegida
#fuses NOWRTC //Memoria de programa desprotegida (registros de configuración)
#fuses NOWRTB //Memoria de programa desprotegida (boot)
#fuses NOWRTD //Memoria de programa desprotegida (eeprom)
#fuses NOEBTR //Memoria de programa desprotegida
#fuses NOEBTRB //Memoria de programa desprotegida (boot)
#fuses NOWDT //Watchdog desconectado
//#use delay (clock=4000000)
#use delay (clock=4000000)
//#use RS232(baud=9600, xmit=PIN_C6, rcv=PIN_C5, bits=8)
//#use RS232(baud=9600, xmit=PIN_C5, rcv=PIN_C4, bits=8, force_sw)
//BLOQUE DE DECLARACIÓN DE FUNCIONES
void config_rs232(int canal)
{
switch(canal)
{
case(1):
#use RS232(baud=9600, xmit=PIN_C7, rcv=PIN_C6, bits=8)
break;
case(2):
#use RS232(baud=9600, xmit=PIN_C5, rcv=PIN_C4, bits=8, force_sw)
break;
case(3):
#use RS232(baud=9600, xmit=PIN_C3, rcv=PIN_C2, bits=8, force_sw)
break;
case(4):
#use RS232(baud=9600, xmit=PIN_C1, rcv=PIN_C0, bits=8, force_sw)
break;
}//Cierre del switch
}
void main()
{
config_rs232(1);//configuraci'on para que funcione el canal 1
//#use RS232(baud=9600, xmit=PIN_C5, rcv=PIN_C4, bits=8, force_sw)
delay_ms(5); //espera de 5 ms para que el controlador "despierte"
while(true)
{
//Arrancar e ir adelante
puts("131");//exitsafestart
puts("3200");//
delay_ms(1000); //Espera de 1 segundo
puts("131");//exitsafestart
puts("0");//
delay_ms(1000); //Espera de 1 segundo
puts("131");//exitsafestart
puts("-3200");//Dirección del motor
delay_ms(1000); //Espera de 1 segundo
puts("131");//exitsafestart
puts("0");//
delay_ms(1000); //Espera de 1 segundo
}//Cierre del while
}//Cierre del main