testerplus (11.08.2010 13:35, просмотров: 234) ответил testerplus на В симуляторе с внешним тактированием T1CKI (как там сэмулировать тактирование с LP - не знаю) работает четко. Завтра на работе попробую в железе с LP.
Проверил в железе - работает четко: 1024 Hz. Писал на ассемблере с минимальным кодом прерывания 7 инструкций. Как только добавил 10 нопов - получил 963 Гц. Дело,скорее всего, вот в чем: в даташите есть примечание насчет работы таймера в режиме счетчика:
Note: In Counter mode, a falling edge must be registered by the counter prior to the first incrementing rising edge.
У Вас с момента переполнения TMR1 (т.е. возникновения прерывания) до момента записи в TMR1L проходит 12 тактов (+ не забывайте, что прерывание в данном случае асинхронное, т.е. может появиться еще один такт). Скважность тактирующего сигнала от 32КГц (это уже внутри контроллера) может быть далека от 2. И поэтому у Вас падающий фронт этого сигнала успевает пройти до присваивания в TMR1.
Попробуйте для проверки свести к минимуму код прервания:
void interrput isr (void)
{
TMR1L -= 16;
TMR1H--;
TMR1IF = 0;
DATA_ASK ^= 1;
}