В примере для 7-ми сегментных индикаторов как раз в рестарте помещен код пуска таймера 1 с предделителем 1024. А вообще такие элементарные вещи нужно в доках читать на процессор, да и в том же AVR Studio 4.0 с этим разобраться не сложно... Одним словом дерзай, читай... Что не получится - обращайся. Просто с такими вопросами на форум ходить не стоит... PS Если нету доки, обращайся, вышлю, или например на http://www.atmel.ru Удачи...
Для запуска таймера 0 служит регистр TCCR0. В зависимости от кода, который в него заносится зависит в каком режиме будет работать таймер. 0х01 - прямой счет 0х02 - предделитель на 8 0х03 - предделитель на 64 0х04 - предделитель на 256 0х05 - предделитель на 1024 0х06 - работа от внешнего входа по нарастающему фронту 0х07 - тоже по спадающему результат счета находится в регистре TCNT0 TIFR - флаг переполнения TIMSK - регистр разрешения на прерывание от таймера Для того что бы написать программу прерывания необходимо программу оформить следующим образом:
код:
.include "2313def.inc"
.def tmp =r25
.org 00 rjmp reset .org 06 ; текст программы обработчика reset: clr tmp ;очистка регистра ldi tmp,0x02 ;установка значений битов регистра out TIMSK,tmp ;установка битов в TIMSK dec tmp ldi tmp,0x01 out TCCR0,tmp ;запуск таймера loop: rjmp loop ;пустой цикл
А для таймера 1 попробуй изучить документацию, это занимательно :roll:
Вот таймером1 научился,yj возник вопрос по расчету времени Надо частоту делить на делитель? Допустим при 1 мГц и при делители 1024 получаетсяя 1000000/1024=976 Гц=0.001с Так или нет?
Еще. Прочитал в своей книжке, что 16разрядный таймер в меге8 может работать как часы реального времени, так это? если да то подскажите как настроить.
aliens писал(а):Надо частоту делить на делитель? Допустим при 1 мГц и при делители 1024 получаетсяя 1000000/1024=976 Гц=0.001с Так или нет?
Это конечно так, но это не вся правда....То что ты имел в виду - это предделитель . То есть ты получил такт таймера равный 1 мсек. После этого нужно разделить заданный тебе период импульса на этот такт и ты получишь значение регистра счётчика. Т.е если ты запишешь в регистр счётчика 0xFF и расчитанным выше делителем , то получите таймер с периодом в 1 мсек.
Короче последовательность следующая: - выбираем предделитель (8, 64,1024) подсчитываем такт - берем заданный период и делим на такт получаем число - а)выполняем операцию делитель= 0xFF- число - б) выполняем операцию делитель= 0xFFFF- число если счётчик двухбайтный
- после этого вставляем в программу как константу и каждый раз в обработчике загружаем в регистры :wink:
aliens писал(а):Еще. Прочитал в своей книжке, что 16разрядный таймер в меге8 может работать как часы реального времени, так это? если да то подскажите как настроить.
Для пояснения текущего вопроса привожу фрагмент статьи:
При подаче питания и выполнении условий сброса выполняется процедура сброса (Reset) для инициализации системных устройств. Все линии портов настраиваются на высокий уровень для выключения всех нагрузок. При этом порты настраиваются на выход записью числа 255 в регистры направления обеих портов. Направление порта В в дальнейшем кратковременно меняется для выполнения функции опроса клавиатуры. Для предделителя таймера выбирают коэффициент деления тактовой частоты 256, при этом, если таймер перезагружать кодом 176, период переполнения таймера и генерации прерываний равен 5 мс. Прерывание по переполнению таймера становится активным после разрешения глобальных прерываний (команда sei).
При использовании кварцевого резонатора 4.096 МГц длительность цикла инструкции равна 0.2441 мкс. С учетом этого, при записи числа n в регистр таймера 0 TCNT0 период его переполнения определяется по выражению:
(256-n)*256*02441, мкс
Таким образом запись числа 176 обеспечит период переполнения 5мс с высокой для счета реального времени точностью. Мой код:
.include "2313def.inc" rjmp RESET ;Reset Handle reti ;irq0 reti ;irq1 reti ;timer1 reti ;timer1 comA reti ;timer1 over rjmp OVER0 ;timer0 over reti ;spi reti ;uart reti ;uart reti ;uart reti ;anacomp OVER0:
ldi tmp,177 out TCNT0,tmp reti reset: clr tmp ;очистка регистра ldi tmp,$6f ;установка значений битов регистра out SPL,tmp ;установка начального адреса стека clr tmp sei clr tmp ldi tmp,0x02 ;установка значений битов регистра out TIMSK,tmp ;установка битов в TIMSK clr tmp ldi tmp,0x04 out TCCR0,tmp ;запуск таймера ldi tmp,177 out TCNT0,tmp next: rjmp next