Цитата(DpInRock @ May 13 2008, 17:08)

Не путайте человека. Окончание интервала со стабильным значением бита определяется сменой этого самого значения. Таймер вообще не причем.
А, бит, конечно не имеет размерности времени, пока лежит в памяти. А вот при передаче уже имеет размерность времени.
Объясняю еще раз.
Сначала накапливаем интервал, а потом режем его на один или несколько бит, в зависимости от длины.
Таким образом мы всего лишь скокращаем необходимую память для хранения принятой посылки.
Но заодно и решае проблему сравнения интервалов, если бы мы не превращали эти интервалы в биты. Ибо тогда пришлось бы как-то округлять эти интервалы при сравнении. Ибо раз от раза они будут все равно разными.
у меня вапрос такой.
как определить начало и конец пакета?
вот я изучал эти протоколы и можно сказать что
махимальная пауза между импулсами примерно 9 милисекунд,
милимальная пауза между импулсами примерно 275 микросекунд,
махимум тактов 48, тоесть надо делать масив из 48 битов
как я понимаю надо настроить таймер так?
только для нулей
unsigned int MASS[48];
interrupt [TIM0_OVF] void timer0_ovf_isr(void) // prerivanie po 10ms
{
TCNT0=0x9E;
}
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(!PINB.1) // кагда кнопка нажата
{
k=1;
if (!PIND.2 && i<48) // берем первые 48 тактов
{
TIMSK0=0x01; // вклю. TAIMER0
TCNT0=0x00;
TCCR0B=0x05;
while(!PIND.2); // ждем кагда будьет высокий уровень
TCCR0B=0x00; // запрет TIMER0
TIMSK0=0x00;
MASS[i]= TCNT0;
i++;
}
}
if (PINB.1 && k==1) // кагда кнопка отпус.
{
k=0;
i=0;
j=0;
for (i=0;i<48;i++)
{
UCSR0B=0x08; // разреш. UART
printf("%d",MASS[i]); // принт в терминал
UCSR0B=0x00; // запретить UART
}
}
}
вот я так пишу, но зависимостьи расстояние между пультом и фотоприемника, разные цифры получаю
Сообщение отредактировал VAHOO - May 13 2008, 19:57