Autor Tema: Problema con el envio serie de un array de 8 bits  (Leído 1441 veces)

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

Desconectado barg

  • PIC10
  • *
  • Mensajes: 45
Problema con el envio serie de un array de 8 bits
« en: 01 de Agosto de 2007, 07:37:13 »
Hola amigos!!!

Despues de unas merecidas vacaciones vuelvo a ponerme a trabajar, y como siempre lleno de dudas y problemas  :lol: :lol: Ya tengo unos modulos que el amigo Azicuetano nos mostro para realizar una comunicacion inalambrica mediante la interrupcion USART.Son geniales!!Ya he probado el ejemplito que el nos propone y ademas he hecho yo algunos otros y van a las mil maravillas.Pero para mi proyecto necesito algo mas y por eso viene mi problema.Necesito que el dato que envie pueda ser modificado bit a bit, por lo que ya no me vale mandar un dato del tipo caracter como habia hecho hasta ahora.He probado con un tipo byte y funciona, pero no me permite hacer un cambio en un solo bit (de este modo: dato[3] =1) sino que tengo que escribir de nuevo todos los bits del byte.Por esto, he pensado en utilizar un array de 8 bits.Mi version del CCS me permite declarar arrays por lo que no he tenido que utilizar el metodo que muy bien explica RedPic, sino que lo he declarado asi: int1 dato[8]. Ya me ha dado error al intentar enviarlo asi.De modo que he pensado en volcarlo en una variable tipo byte para su envio, pero tampoco me funciona y estoy ahi parado.

Os pongo los codigos, a ver si alguien  puede hecharme una mano.

EMISOR

#include <18F4620.h>

#fuses HS,PROTECT,NOLVP,PUT,BROWNOUT,NOMCLR
#use delay(clock=8000000)
#use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7)

#use fast_io(A)
#use fast_io(B)
int i;
int1 dato[8]={0,0,0,0,1,1,1,1};
byte recibido;
void main(void)
{
   set_tris_b(0b00000000);

   port_b_pullups(FALSE);

   enable_interrupts(int_rda);               // Habilita Interrupción del USART
   enable_interrupts(global);
   delay_ms(5);
   recibido = recibido&&dato[7];
   for (i=6;i<=0;i--){
        recibido = recibido*2;
        recibido = recibido&&dato;
   }

   for(;;){
      putc(recibido);
      delay_ms(500);
      output_toggle(PIN_B0);
   }
}

RECEPTOR


#include <18F4620.h>

#fuses HS,PROTECT,NOLVP,PUT,BROWNOUT,NOMCLR
#use delay(clock=8000000)
#use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7)

#use fast_io(A)
#use fast_io(B)

#bit LED0 = 0xF81.0
#bit LED1 = 0xF81.1

byte Keypress=' ';

#int_rda
void serial_isr()
{
  if(kbhit()){ 
    Keypress=getc();
    if(Keypress==0b11110000)
    {
      if (LED0==0){
        LED0 = 1;
        LED1 = 0;
      }else{
        LED0 = 0;
        LED1 = 1;
      }
    }
  }
}

void main(void)
{
   set_tris_b(0b00000000);

   port_b_pullups(FALSE);

   enable_interrupts(int_rda);               // Habilita Interrupción del USART
   enable_interrupts(global);
   
   for(;;) { }
}

Seguro que tengo algun error que me saca los colores :oops: :oops: pero de alguna forma hay que aprender, jeje

Un saludo y muchas gracias de antemano

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Problema con el envio serie de un array de 8 bits
« Respuesta #1 en: 01 de Agosto de 2007, 08:26:46 »

... Ya me ha dado error al intentar enviarlo asi. De modo que he pensado en volcarlo en una variable tipo byte para su envio, pero tampoco me funciona y estoy ahi parado ...


Primero y antes que nada preguntarte: ¿Cuál es el error que te lanza? ¿No hace nada? ¿Hace algo pero no sabes qué hace? ¿Hace pero no hace lo que tiene que hacer? ....  :D :D :D

Segundo y para empezar a entrar en faena: && se utiliza para comparar en sentencias del tipo if(i>0 && j<1) .... Pero para hacer una asignación de bits mediante la tabla de verdad de un AND LóGICO utiliza & sólo.

   recibido = recibido & dato[7];
en lugar de
   recibido = recibido&&dato[7];
 
... Suerte.

 
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado barg

  • PIC10
  • *
  • Mensajes: 45
Re: Problema con el envio serie de un array de 8 bits
« Respuesta #2 en: 01 de Agosto de 2007, 12:44:53 »
Si intento utilizar el array de bits para la transmision (es decir, poner putc(dato)) me da el siguiente error a la hora de compilar el codigo

Error 51 ... : A numeric expression must appear here