Ocorre a comunicação, mas os dados não coincide.
Meu código basicamente faz: eu envio um byte para o pic via bluetooth e o pic devolve o mesmo. E uma condição, caso o byte seja 0x10 liga um led.
Mas o byte devolvido nunca é o mesmo.
Segue parte do meu código. Se alguem poder me ajudar agradeço.
- Código: Selecionar todos
#define _XTAL_FREQ 48000000
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <usart.h>
int dado = 0;
int flag = 0;
void interrupt interrupcoes() {
//check if the interrupt is caused by RX pin
if (PIR1bits.RCIF) {
dado = ReadUSART(); //read the byte from rx register
flag = 1;
PIR1bits.RCIF = 0; // clear rx flag
}
}
void delay_seg(int tempo){
tempo = tempo * 100;
do{
__delay_ms(10);
}while(tempo-- > 0);
}
void main(void) {
// LED 1 = ENTRADA, 0 = SAIDA
TRISDbits.RD0 = 0;
TRISDbits.RD1 = 0;
// Configura a usart
TRISCbits.RC6 = 0; //TX pin set as output
TRISCbits.RC7 = 1; //RX pin set as input
//compare with the table above
PIR1bits.RCIF = 0; //reset RX pin flag
RCIP = 0; //Not high priority
RCIE = 1; //Enable RX interrupt
INTCONbits.PEIE = 1; //Enable pheripheral interrupt (serial port is a pheripheral)
INTCONbits.GIE = 1; //HABILITA AS INTERRUPCOES
OpenUSART(USART_TX_INT_OFF &
USART_RX_INT_ON &
USART_ASYNCH_MODE &
USART_EIGHT_BIT&
USART_BRGH_HIGH, 129);// Crystal 20MHz e Taxa 9600
PORTDbits.RD0 = 0;
while(1){
PORTDbits.RD1 = !PORTDbits.RD1;
delay_seg(1);
if(flag == 1){
flag = 0;
WriteUSART(dado);
if(dado == 0x10){
PORTDbits.RD0 = !PORTDbits.RD0;
}
}
}
}
Obs. Comunicação com usart 9600.
Cristal 20Mhz. E estou usando o bootloader da microchip.
Tirei uma foto da montagem tbm.