Цитата(Ruslan Konovalov @ Jul 29 2008, 17:14)

Мне было бы достаточно работать на скорости 115200
Ладно, шут с ним с Питером, пусть сидит в своём Берлине(:-). Давайте не будем никого слушать и поступим следующим образом.
0) Отказываемся от данеггеровской программы.
1) Подключаете вход RX к INTх, которая срабатывает на 1-0 перепад.
2) В подпрограмме обработки прерывания от INTх пишете настройку таймера на переполнение через ПОЛТОРА периода вашей скорости 115200, т.е. таймер должен сработать по переполнению через 13 мкс, bitcounter=8, запрещаете прерывания от INTх и выходите. Больше ничего.
3) В подпрограмме обработки прерывания от переполнения таймера пишете занесение текущего принятого бита в srxdata, как-то так
srxdata=srxdata<<1;
if(srxpin&0x01) srxdata++;
скручиваете счётчик бит, если счётчик бит скручен, останавливаете таймер и взводите флаг srxdone.
if((bitcounter--)==0) {stoptimer(); srxdone=1}; else настраиваете таймер на переполнение через ОДИН период, т.е. 8.68 мкс и выходите.
4) В фоне опрашиваете флаг srxdone, если он взведен, читаете принятый байт, сбрасываете флаг srxdone и разрешаете прерывания от INTх. Вы снова готовы принимать байты.
Ну, вроде всё, должно помочь горю. Держите нас в курсе.