Цитата(lancode @ Nov 3 2008, 06:15)

...
Здесь возникает ошибка округления
BITTIME = 154 вместо 253,8
Я попробовал увеличить частоту таймера с SYSCLOCK/48 до SYSCLOCK/4.
но видимо что-то сделал неправильно, сдвиг стал только больше. например вместо буквы "a" стал получать букву "и". Подскажите как можно обойти эту ошибку округления.

Странная ошибка округления! Надеюсь Вы правильно все настройки для таймера и осцилятора сделали.
Лучше, конечно, взять не 256-SYSCLOCK/48/BOUDRATE, а 256-SYSCLOCK/BOUDRATE, т.к. дискретность на один бит получается больше. При 12 МГц клоке на бит получаем SYSCLOCK/BOUDRATE=104 клока. Рекомендую и частоту взять не 12, а 24 МГц с умножителя. Вообще частоту и предделитель лучше выбирать такими, чтобы количество клоков на бит было максимальным, не превышающим 256. Приоритеты желательно для обоих прерываний выставить высшими, и, сответственно, using 2.
Еще рекомендация. Если у есть нормальный осцил добавь глобальную переменную типа sbit centertoggle=Px^y; на любой свободный пин и в функции T0_RX_SoftWare сразу после объявления переменных добавить перещелкивание этой переменной centertoggle=!centertoggle;. Тогда на двухлучевом осциле можно по фронтам этого сигнала посмотреть, где же происходит обработка битов на самом деле.
Если все же не будет получаться, я попробую проверить. У меня, кажется, на работе есть кит 320. Правда, если появится "окно" на работе на этой или следущей неделе

. Если это нужно, уточните, может все же на PCA сделать? Все-таки сразу 3 Rx получаем.