Я нашел
идеальный метод кодирования/декодирования команд. Уже пишу для будущего "мини-умного дома"

Девайсина будет обучаться любым радио брелкам , которые совпадают по несущей частоте. Метод основан на подсчете длительности
каждого импульса , длительность которых в виде байтового числа сохраняется в ОЗУ , после я пакую в еепром 24с08. Метод очень прожорливый , 1 команда занимает 100байт памяти. Но зато такой метод, теоретически , работает с любым пультом

Код:
void decode_ir_data()
{
tim_system_rc=0x04;
if(start) // если установлен старт бит - начинаем измерять импульсы
{
data_ir[a] = timer_ir;
a++;
timer_ir=0; // обнуляем счетчик
if(a>99)
{
start=0; // сбрасываем старт бит
a=0; // сбрасываем счетчик данных массива
tim_system_rc=0; // сбрасываем системный таймер
tim_stop=1;
}
}
if(start==0) // старт бит установлен? нет!
{
start=0x01; // да!
timer_ir=0;
}
timer_vol=0;
}
void timer_stop()
{
start=0;
tim_system_rc=0;
tim_stop=1;
timer_vol=1;
a=0;
}
код выполняется в обработчике прерывания ИНТ
Код:
for(d=0; d<100; d++)
{
if (data_ir_eep0[d] > 2)
{
if (((data_ir_eep0[d]+2) > data_ir[d]) && ((data_ir_eep0[d]-2) < data_ir[d])) // команда Вкл.Откл. питание
{}
else cmd_ok=0;
}
timer_led_shou=0;
data_ir[d]=0; // стираем буффер
}
Проверка принятой команды