Ir ao conteúdo
  • Cadastre-se

Problemas com interrupt rx no xc8


Posts recomendados

Olá senhores, estou programando um Pic 18F4550 com Modulo zt-05 bluetooth. Postarei a seguir parte do código, mas o problema é o seguinte. Inicia normalmente o pic, no while principal fica piscando um led branco. Quando envio um dado via bluetooth o mesmo entra na função Interrupcao acende um led verde e nao acontece mais nada. o led branco nao pisca mais.
 
Código.

void interrupt Interrupcao() {    //Checa se a interrupção foi causada pelo pino RX    /*if (PIR1bits.RCIF == 1) {        flag_rx = 1;        //Limpa flag RX        PIR1bits.RCIF = 0;    }*/    PORTDbits.RD1 = 1;}void main() {    // Seta os pinos como Entrada(1) ou Saida(0) no Registrador TRISX (X=PORTA)    TRISCbits.RC7 = 1; //Pino RX    TRISCbits.RC6 = 0; //Pino TX    TRISBbits.RB4 = 1; //Pino Bootloader    TRISDbits.RD0 = 0; //LED Bootloader (Branco)    TRISDbits.RD1 = 0; //LED Bootloader (Verde)    // Seta os pinos como LIGADO(1) ou DESLIGADO(0) no Registrador PORTX (X=PORTA)    PORTCbits.RC6 = 0; //Pino TX    PORTDbits.RD0 = 0; //LED Bootloader (Branco)    PORTDbits.RD1 = 0; //LED Bootloader (Verde)    INTCONbits.PEIE = 1; //habilita interrupção de perifericos do pic    INTCONbits.GIE = 1; //GIE: Global Interrupt Enable bit    RCIP = 0;    // Piscar (Verde)    for (int aux = 0; aux < 4; aux++) {        PORTDbits.RD1 = ~PORTDbits.RD1;        delay_ms(100);    }    int boud = 34800;    OpenUSART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE            & USART_EIGHT_BIT&USART_BRGH_HIGH, ((_XTAL_FREQ / boud) / 16));    while (TRUE) {        PORTDbits.RD0 = ~PORTDbits.RD0;        delay_seg(1);        if (flag_rx == 1) {            PORTDbits.RD1 = ~PORTDbits.RD1;            delay_seg(1);            flag_rx = 0;        }    }

Obs: Quando envio um um byte e o led (branco) esta aceso o mesmo permanece aceso e quando apagado a mesma coisa, fica apagado.

O comentário na checagem do pino RCIF foi para realizar teste, mas é a mesma coisa.

Estou usando cristal 20MHz e bootloader da microchip.

 

Preciso de ajuda, desde já agradeço.

Link para o comentário
Compartilhar em outros sites

  • 5 meses depois...
  • Membro VIP

não sei se é isso... Na interrupção ele fazia (ano passado! e ninguém respondeu.. tadinho)

PORTDbits.RD1 = 1;

ou seja, qualquer evento faria este pino ficar em 1

e no loop,

PORTDbits.RD1 = ~PORTDbits.RD1;

ou seja, sempre vai ficar em 0

outro deltalhe, está comentado...

/*if (PIR1bits.RCIF == 1) {        flag_rx = 1;        //Limpa flag RX        PIR1bits.RCIF = 0;    }*/

Pra mim, muito sinistro... bom isso foi no ano passado. Talvez não tenha relação com seu problema caro amigo @Victor Magalhães

 

tente inverter na interrupt apenas. Tipo assim.

PIR1bits.RCIF = 0;//não sei se o hw já faz isso mas por garantia, faça!PORTDbits.RD1 ^= 1;

lembrando que não uso este compilador...

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...