То, что я вставил в сообщение хоть как-то работает...
Про код из мануала я имею в виду вот этот (стр. 142 мануала компилятора):
Но они не работают сосвем...
Танцы с портами типа PORTA &= 0xFF, никакого влияния не оказывают;
Имя функции tc0Int(void) тоже не на что не влияет, функция перестаёт работать, если указана без параметров (вместо tc0Int(void) ставлю tc0Int(tick_count), и более-менее начинает работать...)
От того, глобальная tick_count или локальная тоже ничего не меняется, объявление её статической тоже не на что не влияет. Присвоение типа Volitile тоже не решает проблему...
int tick_count;
void __interrupt(high_priority) tcInt(void)
{
if (TMR0IE && TMR0IF)
{ // any timer 0 interrupts?
TMR0IF=0; ++tick_count;
}
if (TMR1IE && TMR1IF)
{
// any timer 1 interrupts?
TMR1IF=0;
tick_count += 100;
} // process other interrupt sources here, if required return;
}
И вот этот (оттуда же):
void __interrupt(irq(TMR0),high_priority) tc0Int(void)
{
TMR0IF=0;
++tick_count;
return;}
void __interrupt(irq(TMR1),high_priority) tc1Int(void)
{
TMR1IF=0;
tick_count += 100;
return;
}
Без прерываний я уже помигал, всё работает.
Сейчас задача освоить прерывания.
Вот я и спрашиваю, в чём главная ошибка. Почему при выходе из прерывания, светодиод гаснет? Нет никакой команды, гасящей светодиод, что заставляет его погаснуть? Я уже и все остальные функции портов отключал, думал, другие регистры заставляют диод погаснуть, ан нет...
Ведь само по себе прерывание-то работает, светодиоды (6 шт.) вспыхивают по очереди, как и задумано, но по задуманному они должны гореть до того момента, пока не загорится каждый следующий светодиод, а они гаснут тут же, как зажглись...
И время между вспышками получается как рассчитанное, значит, таймер работает...
Спасибо, попробую...