Autor Tema: Escribir y leer sumultánemente por RS232  (Leído 2360 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Escribir y leer sumultánemente por RS232
« en: 03 de Octubre de 2011, 11:32:39 »
Hola de nuevo, intento escribir y leer simultáneamente por RS232, pero al compilar me sale el siguiente error:

a numeric expression must appear here.

Le estoy dando vueltas pero no veo nada, os dejo el código por si alguien ve algo extraño.

Gracias de nuevo.

Código: [Seleccionar]
#include <16F877A.H>
#include <stdlib.H>
#use delay(clock = 4000000)
#fuses XT,NOWDT,NOPROTECT
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)




int sig;
int32 del, sal;
int32 dato;
void main(){

setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports(ALL_ANALOG);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
 
 
#int_RDA
void  RDA_isr(void)
         {
           
            dato=getc();
             
             if (dato='0'){  //si el dato es 0 apaga el led
                    output_bit(PIN_D1,1);     
             }
             if (dato='1'){//si el dato es 1 enciende el led
             
                     output_bit(PIN_D2,1);
             }
                 delay_ms(3000);
                 output_bit(PIN_D1,0);
                 output_bit(PIN_D2,0);
               
         
             }



while(true){

set_adc_channel(0);
sig = read_adc();
printf("%03u\r",sig);


set_adc_channel(1);
del=read_adc();
printf("%03u\r",del);

delay_ms(1000);
}

}


Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Escribir y leer sumultánemente por RS232
« Respuesta #1 en: 03 de Octubre de 2011, 11:52:42 »
La rutina correspondiente a #int_RDA, va fuera del main. Por eso te da el error.
Otra cosa, cuando usas los if (....)..
el operador de comparación es  ==, por ejemplo
if (dato=='0'){...

un solo = significa asignación.


Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Escribir y leer sumultánemente por RS232
« Respuesta #2 en: 03 de Octubre de 2011, 11:56:18 »
Hola.

Como aporte adicional: No uses delay's tan largos en la rutina de interrupción, puede generar problemas ... si quieres una espera, mejor hazla en el programa principal.

Saludos
El papel lo aguanta todo

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Escribir y leer sumultánemente por RS232
« Respuesta #3 en: 03 de Octubre de 2011, 13:04:44 »
Gracias por vuestras respuestas, he hecho lo que me habéis dicho y funciona correctamente. Pero ahora me surge otra duda, si en lugar de mandar un o ó un 1 por el puerto serie quiero mandar una cadena de caracteres ¿cómo lo hago?, he cambiado la variable a tipo char, pero solo puedo mandar una letra, también he probado con unos ejemplos del foro haciendo char dato[8], pero tampoco obtengo buenos resultados.

Gracias de nuevo por vuestros consejos.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Escribir y leer sumultánemente por RS232
« Respuesta #4 en: 04 de Octubre de 2011, 03:56:33 »
Para eso usas printf. Ejem:

printf("\r\nMi variable sig tiene el valor: %u", sig);

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Escribir y leer sumultánemente por RS232
« Respuesta #5 en: 04 de Octubre de 2011, 13:05:00 »
Lo que intento y no consigo es escribir a través por ejemplo de virtual terminal (en realidad lo deseo hacer con labview) escribir una palabra por ejemplo "perro" y que al escribir esta palabra por ejemplo se encienda un salida. Lo único que he conseguido hasta el momento es hacerlo pero sólo con un carácter y no con una cadena de caracteres.

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Escribir y leer sumultánemente por RS232
« Respuesta #6 en: 04 de Octubre de 2011, 13:13:12 »
Dale una revisada a ESTE HILO, por alli que encuentras lo que necesitas y alguito mas  ;-).

saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Escribir y leer sumultánemente por RS232
« Respuesta #7 en: 05 de Octubre de 2011, 07:14:54 »
Gracias por tu respuesta, ya conocía este hilo y le he dado otro repaso, pero sigo sin conseguir resultados óptimos, lo único que he conseguido  es un carácter y no una cadena de caracteres.

Agradecería cualquier orientación mas cercana.

De nuevo gracias a todos por el interés

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Escribir y leer sumultánemente por RS232
« Respuesta #8 en: 05 de Octubre de 2011, 09:48:27 »
  No que tan actualizado tengas tu código y también aclaro que no uso CCS. Pero creo que la idea básicamente sería lo mismo.

  Dentro de la rutina de interrupción de recepción, vas almacenando lo que llega en una array de caracteres y así tienes toda la palabra.

  Una manera de indicar que se terminó de recibir la palabra podría ser evaluando si el caracter recibido fue el #13 (creo que es el que corresponde al "Enter"). Dicho caracter no habría que almacenarlo en el array, así no forma parte de lo recibido.

  Luego hay que evaluar el texto allí almacenado y si se corresponde con lo que queremos se actua en consecuencia. En HitechC suelo utilizar la función strcmp() que es quien compara dos string.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything