Проблема с использованием модуля 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;
}