Buen dia. Quisiera ver si alguien podria darme un mano.
Tengo un circuito que tiene un procesador ATMEL. con una salida RS485 a 9600 baudios. desde ahi, pasamos a un circuito unido que recibe RS485.
Ahora bien, el circuito es un PIC16F88 con un Crystal de 16 mhz.. Pero al recibir a 9600 baudios, velocidad que me provee en forma unica el proveedor del circuito con el cual me conecto, recibo parte del paquete de datos.
Les dejo el programa que SI FUNCIONA en 4800 baudios. Pero no en 9600.
#include <16f88.h>
#include <string.h>
#include <stdlib.h>
#fuses HS,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOMCLR,NOLVP
#use delay(clock=16000000)
#use rs232(baud=9600,uart1 ,stream=rs485,errors,STOP=1, PARITY=N)
#use rs232(baud=4800, xmit=PIN_b4,rcv=PIN_a0,stream=xbee)
#use fast_io(A)
#use fast_io(B)
void main()
{
//init();
// ext_int_edge(H_TO_L);
//disable_interrupts ( GLOBAL ); // enable all interrupts
setup_adc_ports(No_analogs);
// clear_interrupt(INT_RDA);
// enable_interrupts(INT_RDA);
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
delay_ms(1000);
while (true)
{
long timeout;
timeout=0;
while (kbhit(rs485) )
{
fputc(fgetc(rs485),xbee);
}
while (kbhit(xbee))
{ fputc(fgetc(xbee),rs485); }
}
}
Me gustaria agregar que si yo hago
char a;
char b;
char c;
char d;
y luego
a=fgetc(rs485);
b=fgetc(rs485);
c=fgetc(rs485);
d=fgetc(rs485);
Esos 4 caracteres los recibo perfectamente. Pero claro, tengo un string que no es fijo, entonces no sirve.
Si uso un puntero a un string. No funciona, tambien hace el problema de comerse gran parte del string e inclusive que aparezcan caracteres raros.
como les digo.. el programa original en 4800 baud anda perfecto.- Pero ahora lo debo usar conectando este circuito a un equipo que tiene velocidad de 9600 , recibir por el XBEE y retransmitir para que llegue a una pc que esta a distancia y que recibe por otro XBEE a RS232.-