Цитата(sls_ @ May 29 2007, 10:35)

datas = i2c_rx(0);
i2c_stop();
Вот тут у вас ошибка. При приеме последнего байта вы должны ответить NACK, иначе при определенных условиях не сможете сформировать стоп. Условие просто - если в следующем байте в памяти старший бит равен нулю. Память начнет выдавать его на шину сразу после ACK и не даст вам сформировать стоп - высокий уровень на SDA не появится. Не работал с 848, поэтому запутался в MDO/MDE в вашем исходнике. На всякий случай посмотрите еще
вот это сообщение.
P.S. ой, извиняюсь, не обратил внимания на строчки
Код
if(ack){MDE=1; MDO=0;}// bSDA = 0;
else {MDE=1; MDO=1;}//bSDA = 1;
Ответ снимаю...
А правильно ли я понимаю, что MDE=1 настраивает ногу на вывод? И правильно ли я догадываюсь, что этот порт у 848 "честный", т.е. с верхним транзистором? Тогда в сообщении по ссылке скорее всего и описан корень вашей проблемы. Если нет, объясните кратенько назначение MDE и MDO, я попробую проанализировать ваш исходник детально.