Simple PIC18 USART La interrupción no funciona

1

Estoy intentando implementar un enlace entre Arduino y un PIC18F25K22. Puedo transmitir desde el PIC y leer los datos en el Arduino, pero tengo problemas para ir en la otra dirección. Creo que el problema es con mi rutina de servicio de interrupción, pero podría ser cualquier cosa, por supuesto. Estoy usando MPLAB X 1.60 con XC8 1.12. En la guía del usuario del compilador, he encontrado este ejemplo.

  

Aquí se muestra un ejemplo de una función de interrupción.

int tick_count;
void interrupt tc_int(void)
{
if (TMR0IE && TMR0IF) {
TMR0IF=0;
++tick_count;
return;
}
// process other interrupt sources here, if required
}
     

El código generado por el compilador se colocará en el vector de interrupción   Dirección que ejecutará esta función después de cualquier cambio de contexto.   que se requiere.

mi propio código se modela después de eso, básicamente exactamente. Main solo está configurado, luego un rato (1).

void usart_setup()
{
    TX1_PIN = OUTPUT;
    RX1_PIN = INPUT;
    TXSTA1 = 0; // page 277, 8bits tx, async mode, low baud
    TXSTAbits.TXEN1 = 1; //tx enabled
    RCSTA1 = 0; // page 278, 8bit rx,
    RCSTA1bits.SPEN1 = 1; //serial enable bit
    RCSTA1bits.CREN1 = 1; //continuous receive enable bit
    BAUDCON1 = 0; // page 279
    BAUDCON1bits.DTRXP1 = 0; //Non inverted polarity
    BAUDCON1bits.CKTXP = 0; //idle state is high?
    // page 280, set to 9600 baud (actual 9615)
    SPBRG1 = 12; // baud rate low byte
    SPBRGH1 = 0; // buad rate high bit
    rx_pos = 0;
}

void setup(void)
{
    OSCCON = 0b11100110; // setup internal oscillatior to 8MHz, TCY is 0.5 microsecond
    RCONbits.IPEN = 0; //no interrupt priority
    INTCONbits.GIE = 1; // enable interrupts
    INTCONbits.PEIE = 1; // enable peripheral interrupts
    PIE1bits.RC1IE = 1; // enable USART receive interrupt
}

void interrupt ISR()
{
    if (PIE1bits.RC1IE && PIR1bits.RCIF) // if the USART receive interrupt flag has been set
    {
        PIR1bits.RCIF = 0;
        usart_tx_byte(RCREG1);
        //dealt with interrupt
    }
}

Por ahora, solo debería repetir todo lo recibido, pero en lugar de eso no hace nada. He comprobado dos veces las conexiones y sé que la transmisión funciona, por lo que estoy perdido.

Editar

Así que hablar con el pato y algo más de búsqueda aquí parece haberlo resuelto. Al encender y reiniciar, los puertos se configuran para ser analógicos. Ahora deshabilito esto en mi configuración. Fue un problema entre este y mi pin RX1.

    
pregunta Trenton Holmes

0 respuestas

Lea otras preguntas en las etiquetas