Hola, vengo del foro de Delphi, pues considero este hilo el lugar más apropiado para mis dudas
.
Estoy tratando de hacer un puente algo así por el estilo: PC-PIC USBCDC-MAX485-MAX485-PIC
Para la simulación utilizo: PROTEUS ISIS, Virtual Serial Port driver y un programa hecho en delphi. Versión del compilador, CCS 4.065.
Al mandar un comando desde el programa en Delphi, el PIC que está al otro extremo recibe y contesta correctamente, pero se muere en el instante. En un post anterior J1M comentó algo sobre "vaciar el buffer de residuos" utilizando la función
usb_cdc_flush_out_buffer(); que Alejandro le solucionó un problema similar. En que parte tendría que utilizar dicha función??. Otro detalle es que al cerrar el programa de lado de la PC, el proceso queda activo, y es imposible terminarlo, obligándome a reiniciar. Alguien con una
que me guíe???
Este es el código fuente para el PIC18F2550. Esta basado en el ejemplo del maestro Redpic para la comunicación USB CDC.
#use delay(clock=48000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7,parity=N) //Modificación
#include ".\include\usb_cdc.h"
#rom int 0xf00000={1,2,3,4}
#define enviar_on PIN_B0 //Modificación
#define STX 0x02
#define ETX 0x03
void enviar(void);
void recibir(void);
void enviar(void){
output_high(enviar_on);
delay_ms(5);
}
void recibir(void){
delay_ms(5);
output_low(enviar_on);
delay_ms(1);}
void main() {
BYTE i, j, address, value;
char c;
recibir();
delay_ms(333);
usb_cdc_init();
usb_init();
while(!usb_cdc_connected()) {}
do {
usb_task();
if (usb_enumerated())
{
if (kbhit()) {
c=getc();
usb_cdc_putc(c);}
}
if (usb_cdc_kbhit()) {
c=usb_cdc_getc();
enviar(); putc(c); recibir();}
}
}
} while (TRUE);
}
Ganbatte kudasai.