Ага. Инициализация была пропущена. Я не заметил
Сейчас результы работы UART такие:
Тестировал прием данных на порты по-отдельности:
Порт P1.0 и P1.1 принимают данные без ошибок.
Порт P1.2 - не получается правильно принять данные. Прерывание вызывается, обрабатывается, но что-то работает неверно - байты искажаются.
Соединил перемычкой P1.0 и P1.1. Хотел таким образом протестировать одновременный прием данных по обоим линиям.
На P1.0 все в порядке, а на P1.1 - неверные данные.
Пока нет возможности протестировать одновременный прием разных данных на все порты, но потом я это сделаю.
Перещелкивание пинов, которое использовалось для отладки на осцилографе я удалил. Больше не знаю как можно оптимизировать по скорости.
Подозреваю что прием работает неправильно из-за вот этих настроек:
sfr16 PCA0CP0=0xfb;
sfr16 PCA0CP1=0xe9;
sfr16 PCA0CP2=0xeb;
Я не понял почему задержки именно такие. Каким образом они вычислялись? Попробовал эксперементально подобрать числа - не получилось.
ps. Можно ли принимать данные на разных скоростях? Например на одном порту 115200, на другом - 9600, а на третьем - 19200. Пока мне это не нужно делать, просто интересная идея возникла.