No me funciona bien, no envia correctamente el valor float. dejo los codigos de emisor y receptor.
Codigo emisor:
#device adc=10
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,NOWRT,NODEBUG,NOMCLR
#use delay(internal=8M)
#use rs232(baud=38400,xmit=PIN_B5,rcv=PIN_B2)
#use fast_io(a)
#use fast_io(b)
#define LCD_DB4 PIN_A0
#define LCD_DB5 PIN_A1
#define LCD_DB6 PIN_A7
#define LCD_DB7 PIN_A6
#define LCD_RS PIN_B7
#define LCD_E PIN_B6
#include "flex_lcd420.c"
void main(){
float Data;
set_tris_a(0b00000000);
set_tris_b(0b00000000);
setup_adc_ports(NO_ANALOGS);
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc("Inicio Bluetooth"));
delay_ms(2000);
while(1){
Data=2.6;
putc(*((char *)Data));
delay_ms(10);
putc(*((char *)Data+1));
delay_ms(10);
putc(*((char *)Data+2));
delay_ms(10);
putc(*((char *)Data+3));
}
}
Codigo receptor:
#include <16f88.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,NOWRT,NODEBUG,NOMCLR
#use delay(internal=8M)
#use rs232(baud=38400,xmit=PIN_B5,rcv=PIN_B2)
#use fast_io(b)
#use fast_io(a)
#define LCD_DB4 PIN_A0
#define LCD_DB5 PIN_A1
#define LCD_DB6 PIN_A2
#define LCD_DB7 PIN_A3
#define LCD_RS PIN_A4
#define LCD_E PIN_A6
#include "flex_lcd.c"
int kbhit_data_serial;
float Data;
#int_rda //vector de interrupción al recibir por la UART
RDA_isr(){
*((char *)Data)=getc();
delay_ms(10);
*((char *)Data+1)=getc();
delay_ms(10);
*((char *)Data+2)=getc();
delay_ms(10);
*((char *)Data+3)=getc();
kbhit_data_serial=1;
}
void main(){
setup_adc_ports(NO_ANALOGS);
set_tris_a(0x00);
set_tris_b(0b00000100); // Rx entrada
output_b(0x00);
output_a(0x00);
lcd_init();
enable_interrupts(INT_RDA); //habilita interrupción por recepción
enable_interrupts(global);
while(1){
if(kbhit_data_serial==1){
kbhit_data_serial=0;
lcd_gotoxy(1,1);
printf(lcd_putc,"Recibiendo %f",Data);
}
}
}