Цитата(loghir @ May 25 2011, 16:46)

xemul,
при чем тут
Код
TMR1IF
?
Я забыл добавить ... после if(TMR1IF) {...}, т.к. описывал общий случай.
У мелких пиков одноуровневая система прерываний, и все возможные прерывания обрабатываются в одной функции.
Больше наивных предположений и вставок на подумать делать не буду.
Цитата(loghir @ May 25 2011, 18:26)

Если
Код
interrupt isr() {
if (T0IF) {
tmp100 = tmp100 + 1;
TMR0 = TMR0 + 100;
T0IF = 0;
}
писать до
main, компилятор выдает ошибку:
Warning [349] D:\Work\PIC_CI\My_program\work_program_timer_dima\1.c; 69.1 non-prototyped function declaration for ""
Warning [349] D:\Work\PIC_CI\My_program\work_program_timer_dima\1.c; 69.1 non-prototyped function declaration for "isr"
В мануале писс есть описания всех сообщений компилятора.
Warning - предупреждение (в Вашем случае - о небрежном стиле программирования).
Не знаю, какими букварями по С Вы пользуетесь, но, имхо, в любом написано, что функция должна быть объявлена до её использования. Т.к. обработчик прерывания явно не вызывается, то его всегда стоит объявлять явно.
Код
void interrupt isr (void); // объявление (прототип) функции
int foo(int boo); // объявление другой функции с параметром и возвращаемым значением
bit fTMR0;
void main(void)
{
if(fTMR0) { foo(...); fTMR0 = 0; }
}
void interrupt isr (void) // сама функция (реализация)
{
if(T0IF) { T0IF = 0; fTMR0 = 1; }
}
int foo(int boo)
{
return boo+1;
}
Обычно прототипы функций помещают до main(), а реализацию - после или вообще в другом файле (тогда функция объявляется со словом extern).
Цитата
А если ...
то программа просто не работает: цифры не меняются.
Наверное, так прога написана. Предлагаете нам догадаться, как именно?