Проверка правильности команды у вас есть, сорри не заметил.
Но в вашем коде, после правильного декодирования не хватает сброса b_cnt = 0; и start_cond = 0; т.е. b_cnt будет присваиваться по очереди 33,34 аж до 255, вот вам и задержки при регулировании.
Код:
|
if ((cmd_1 + cmd_0) == 0xFF) { //проверили правильность приема команды
cmd = cmd_1;
} |
У вас в
Код:
|
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void) |
не обрабатывается сигнал короткой помехи (это когда tick ‹10)
Да и на приемник может действовать длинная помеха, что конечно мало вероятно (это когда tick ›96)
Неплохо бы по условию (tick ‹10) как и по условию (tick ›96)
сбрасывать
b_cnt = 0;
start_cond = 0;
tick = 0;
Это позволит программке искать начало посылки сразу, а не после того как
Судя по
длина стартового импульса должна быть 9 мс импульс и +4,5 мс пауза = 13,5 мс.
при повторе команды 9+2,25=11,25 мс.
Вы отлавливаете
Код:
|
if (tick ›= 92 && tick ‹ 96)
//если прошло от 8,832 мс до 9,216 мс |
Так для интереса сигнал осциллографом вы смотрели на пульте или после TSOP ?