Цитата(ps1x @ Oct 31 2006, 23:58)

Вот такой вот код, по идее должен подсчитывать длину 1 пришедшего импульса нулевого уровня и записывать в еепром. Прерывание настроено на спад. Импульс точно есть и точно больше 100 us по длине. Что не так???
Код
int i;
char run=1;
eeprom int dat1=0;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if (run)
{
while (!PORTB.6)
{
delay_us(10);
i++;
}
run=0;
}
dat1=i;
}
Обычно делается не так, а если ещё точнее, то так вообще не делается.
Прерываеия существуют для того, чтобы освобождать процессор от задержек. А Вы прямо в прерывании её вставляете.
Обычно прерывание настраивается по срезу импульса (или наоборот) и там инициализируется таймер, а по фронту снимается значение таймера. Учитывая, что значение реакции на прерывание почти одинаковое, то получается более-менее точно.