Hola a todos, antes de nada, decir que llevo ya tiempo leyendo en el foro y buscando información, se que hay mucha información que estoy leyendo, pero he llegado a un punto que estoy estancado, asi que pido disculpas de antemano por iniciar otro hilo sobre rs232
Me manejo mas o meno bien con asm, estoy pasando ahora a C con CCS, he creado una rutina que no haga nada, y cuando llegue un bit active la interrupcion rda, y en funcion del valor de ese dato encienda un led, entra en el modo interrupcion bien, puse que parpadeará un led para saber que habia entrado, y dentro del if que lo apague, lo que pasa es que como no reconoce lo que le envio nunca entra de acuerdo al if, como terminal uso el docklight v1.9 configurado de la siguiente manera desde mi portatil,con puerto serie, 9600 N 1, si que sse que llegan los datos porque puse unos leds que parpadeen al pasar los datos,envia y recibe,pero nada legible
he comprobado con el mutlimetro que invierte la polaridad a las salida de max232, es asi como debe ser cierto?si a la entrada del max232 tengo 1 logico, a la salida -10V,
cuando le digo que me devuelve lo que ha leido me devuelve por el docklight un monton de nulls
aqui el cogido:
#include <18F2550.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES INTRC //Internal RC Osc
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES BORV20 //Brownout reset at 2.0V
#FUSES NOPUT //No Power Up Timer
#FUSES NOCPD //No EE protection
#FUSES STVREN //Stack full/underflow will cause reset
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT //Program memory not write protected
#FUSES NOWRTD //Data EEPROM not write protected
#FUSES IESO //Internal External Switch Over mode enabled
#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES NOPBADEN //PORTB pins are configured as digital I/O on RESET
#FUSES NOWRTC //configuration not registers write protected
#FUSES NOWRTB //Boot block not write protected
#FUSES NOEBTR //Memory not protected from table reads
#FUSES NOEBTRB //Boot block not protected from table reads
#FUSES NOCPB //No Boot Block code protection
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES LPT1OSC //Timer1 configured for low-power operation
#FUSES NOXINST //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES PLL12 //Divide By 12(48MHz oscillator input)
#FUSES CPUDIV4 //System Clock by 4
#FUSES USBDIV //USB clock source comes from PLL divide by 2
#FUSES VREGEN //USB voltage regulator enabled
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#int_rda
void r232(void)
{
output_high(pin_c1);
delay_ms(200);
output_low(pin_c2);
delay_ms(200);
output_high(pin_c2);
delay_ms(200);
output_low(pin_c2);
delay_ms(200);
output_high(pin_c2);
delay_ms(200);
output_low(pin_c2);
char ch;
ch=getchar();
delay_ms(30);
puts(ch);
if(ch=="w")
{
output_high(pin_c2);
delay_ms(5000);
output_low(pin_c1);
}
}
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_2);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_oscillator(OSC_4MHZ|OSC_TIMER1|OSC_31250|OSC_PLL_OFF);
set_tris_c(0x80);
enable_interrupts(int_rda);
enable_interrupts(global);
delay_ms(300);
delay_ms(3000);
while(1)
{
//puts("x");
delay_ms(200);
}
}
Aqui el circuito:
Y aqui mi agradecimiento;.....
Un saludo a toda la comunidad!