я делаю так: по стартовому биту запускаю таймер с периодом в бит, но подправляю его текущее значение на _половину_ бита, затем читаю - таймер попадает в середину каждого бита. Что за сдвиг? Сколько битов считываешь после запуска таймера?
Если скорости высокие а частота кварца твоего контроллера не делится кратно скорости передачи, то могут быть глюки со сдвигом в ту или иную сторону.
Отладку можно сделать так:
На вход контроллера посылаются данные с компьютера. В контроллер зашита отадочная программа следующего вида: на стартовые биты она дёргает ногу IOn на 3мс. При считывании битов - на 1 мс. Подключаю ко всему этому делу двухканальный осциллограф: видны два графика. Зелёным - данные поступающие с компьютера, Красным - это то, когда контроллер начинает их "считывать" и показывает это нам, дёргая ногу IOn. По сути когда срабатывает таймер. И смотрю эту временную диаграмму, нет ли глюков.
Я так делал проверку своей программы, там выяснилось, что глюки на высоких скоростях - проблема оптопар и триггеров, а не софта. Так что посмотри, может у тебя там оптопары и триггеры не успевают?
|