При использовании программного эмулятора И2С, есть несколько вариантов, почему драйвер индикатора пропускает байты данных.
Если драйвер не определил состояние стоп, то естественно об не поймет прием следующего байта. Только после нормального состояния стоп, прием данных начнется правильно.
Если не совсем правильно формируются импульсы синхронизации, т.е. "не много" не в то время. Поэтому драйвер начинает пропускать байты данных.
Сама библиотека обращается на индикатор как на запись данных, так и на чтение с индикатора, если при чтении данных драйвер индикатора не получить ноуаск об окончании чтения, он будет "тупить" при следующей операции записи или чтении данных.
Решение -
Все сводиться к тому, чтобы "поиграться" с длительностью сигналов которые формируют обмен между индикатором и контроллером и проверить как формируются ответы между устройствами. Но это предполагает наличия как минимум "хорошего" осциллографа.
Еще раз проверить по ходу программы правильно, ли формируется чтение данных с индикатора (на проблему ноуаск). Программный И2С это такая же библиотека написанная человеком и не стоит от нее требовать идеальной работы. Что бы "поиграться" тебе будет необходимо открыть файлы И2С библиотеки и разобраться в их работе.
Я бы порекомендовал попробовать запустить аппаратный И2С, это снимет целый ряд проблем. Я правда на 88х не тестил эту библиотеку, но на стареньких 87хА, и на "новеньких" 1936, 1938, 18хх, (то что качается 16 серии) работает без проблем. Я с 88х начал работать, но потом их оставил, т.к. новых в контроллерах расширили систему команд и это дало, что на ассемблере, что на Си как минимум 30 % уменьшить объем программного кода, и аппаратно они более привлекательны (и цена их ниже).
p.s. На прямую, в лоб, я так ничего не могу посоветовать
