Hola amigos!!!
Despues de unas merecidas vacaciones vuelvo a ponerme a trabajar, y como siempre lleno de dudas y problemas
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 pero de alguna forma hay que aprender, jeje
Un saludo y muchas gracias de antemano