Частота кварца 22118,2 кГц (хотя пробывал и на 24000кГц).
Проблема состоит в следующем: отказывается правильно работать с данными на скорости 115200. Хотя, на 9600 работает нормально (ошибки 5%), а на 38400 просто работает (ошибки ~20%). Если судить по осциллографу, то получается что передаваемые МК данные искажены по сравнению с поступающими на вход Rx. Следствие это ошибки при приеме или передаче, или в обоих случаях определить не удалось. Такое ощущение, что просто не попадаю с частотой, но данные беру из даташитов, да и вычислениями проверял - все сходится. И что я только не пробывал, результата нет.
Вот примеры, как я инициализирую UART и настраиваю скорость обмена:
Версия для Т1:
SCON=0xd8; //reg. UART - 3, razr. priema., 9-i bit=1
TMOD=0x21; //T1 - reg.2, T0 - reg.1
TCON=0;
PCON=0x80; //skorost` *2
TL1=TH1=0xff; //115200
TR1=1; //run timer UART
IP=0;
IE=0x90; //Global, UART
Версия для Т2:
T2MOD = 0x00;
PCON = 0x80; //бит SMOD. Удвоение скорости обмена UART
SCON = 0xd8; //настройка UART. Режим 3 - 9-бит, разрешение приема, 9-й бит=1
TH2 = RCAP2H = 0xff; //загрузка Т2 исходя из выбранной скорости обмена-115200
TL2 = RCAP2L = 0xfa; //
T2CON = 0x30; //настройка Т2. Т2-задающий генератор UART
TI=RI = 0; //cброс флагов прерывания UART
TR2 = 1;
//настройка прерываний
IE = 0x90; //Общее, UART
Были попытки синхронизировать прием и передачу от разных таймеров (Т0 и Т1), результат опять же отрицательный.
Если кто-нибудь чем нибудь сможет помочь, буду очень благодарен
