Ты после паузы пытаешься опять выполнить подпрограмму обработки. Но никакой новой информации ещё не принято. И не известно, придёт новый пакет или нет. И если придёт, то с чем. Смысл?
Правильно сделать так (по крайней мере я так это вижу): 1) приняли инфу (после этого опять попадаем в цикл сканирования). В конце подпрограммы приёма запускаем таймер на время чуть больше межпакетного интервала (надо использовать встроенный таймер и прерывания) 2) обработали эту инфу, зажгли светодиод. это всё надо сделать быстрее, чем кончится межпакетный интервал, иначе мы попадём в прерывание не успев принять новую информацию. в нашем случае это и так произойдёт быстрее, но это так, к сведению. Так вот, после того как эту инфу обработали - попадаем опять в цикл сканирования и ждём новых данных. Если приняли ту же команду - мы получается включим этот же светодиод, то есть он как горел, так и будет гореть. Если мы попадаем в прерывание от таймера (то есть таймер отработал, но новая инфа не появилась/ кнопку отпустили) - надо всё гасить.
В начале цикла приёма надо естественно таймер сбрасывать или вообще выключать (в конце всё равно включим).
И ещё. Зажигать диоды надо не так, как в проге на сайте (там сначала всё гасят, причём не совсем правильно, а потом нужный зажигают), а просто загружать в порт нужную комбинацию.
P.S. И, кстати, паузу в конце рабочей части надо сделать поменьше. Просто вся эта прога выполняется быстрее, чем полбита по RC-5 приходят и вернувшись раньше времени в цикл сканирования мы снова попали бы в подпрограмму приёма, потому что последний полубит ещё бы не кончился и на входе висел бы низкий уровень. Так что там одной паузы в полбита как раз бы и хватило. То есть после
Код: Выделить всё
out bcf MBC,7
Код: Выделить всё
call wait