Проблема с использованием модуля EUSART на PIC18f87k22

Я пытаюсь настроить связь UART между брелком Arduino Pro и моим PIC18f87k22. При запуске моего кода я получаю следующую ошибку:

код ошибки

это прототип функции:

char EUSART1_Read(void)
{

RCSTA1bits.SREN = 1;
 while(!PIR1bits.RC1IF)
 {
    ;
 }


if(1 == RCSTA1bits.OERR)
{
    // EUSART1 error - restart

    RCSTA1bits.CREN = 0; 
    RCSTA1bits.CREN = 1; 
}

return RCREG1;
}

и вот как я его использую (пока единственное использование):

int16_t get_courant()
{
   char courant1;
   char courant2;
   int16_t courant;

   if(EUSART1_is_tx_ready())
           {
               EUSART1_Write(0b00000001);
           }
   if(EUSART1_is_rx_ready())
           {
           courant1= EUSART1_Read(); 
           }

   if(EUSART1_is_tx_ready())
           {
               EUSART1_Write(0b00000010);
           }
   if(EUSART1_is_rx_ready())
           {
           courant2= EUSART1_Read(); 
           }
   if (CheckBit(courant1,8))
           {
           bit_clr(courant1,8);
           courant = (courant1 << 8) | courant2;
           courant = - courant;
           }
   else 
   {
       courant = (courant1 << 8) | courant2;
   }
   return courant;   
   }

Я попытался заменить тип char на unsigned char или uint8_t, но это ничего не изменило. Любые идеи о том, что не так с моим кодом? Ty

1 ответ

Поместите в один файл:

// Prototype
char EUSART1_Read(void);
int16_t get_courant(void);

// function definition
char EUSART1_Read(void)
{
    RCSTA1bits.SREN = 1;
    while(!PIR1bits.RC1IF)
    {
        ;
    }
    if (1 == RCSTA1bits.OERR)
    {
        // EUSART1 error - restart
        RCSTA1bits.CREN = 0; 
        RCSTA1bits.CREN = 1; 
    }
    return RCREG1;
}


int16_t get_courant(void)
{
    char courant1;
    char courant2;
    int16_t courant;

    if(EUSART1_is_tx_ready())
    {
        EUSART1_Write(0b00000001);
    }
    if(EUSART1_is_rx_ready())
    {
        courant1= EUSART1_Read(); 
    }

    if(EUSART1_is_tx_ready())
    {
        EUSART1_Write(0b00000010);
    }
    if(EUSART1_is_rx_ready())
    {
        courant2= EUSART1_Read(); 
    }
    if (CheckBit(courant1,8))
    {
        bit_clr(courant1,8);
        courant = (courant1 << 8) | courant2;
        courant = - courant;
     }
     else 
     {
         courant = (courant1 << 8) | courant2;
     }
     return courant;   
}
Другие вопросы по тегам