U1ERRIRbits.RXFOIF ? uart1.oerr = 1 : uart1.oerr = 0;
интерпретируется как:
(U1ERRIRbits.RXFOIF ? uart1.oerr = 1 : uart1.oerr) = 0;
Который пытается присвоить 0
...? Если вы хотите использовать такую конструкцию, вам нужны фигурные скобки:
U1ERRIRbits.RXFOIF ? uart1.oerr = 1 : (uart1.oerr = 0);
Или лучше:
uart1.oerr = U1ERRIRbits.RXFOIF ? 1 : 0;
или
uart1.oerr = !!U1ERRIRbits.RXFOIF;
или
uart1.oerr = (bool)U1ERRIRbits.RXFOIF;
или просто:
uart1.oerr = U1ERRIRbits.RXFOIF;
как typeof(uart1.oerr) == bool
, значение будет неявно преобразовано в 1
для ненулевых значений или 0
для нуля.