Первой задачей у меня будет: освоить таймеры... Вот есть скрин из книги: Микроконтроллеры AVR семейства Mega А.В.Евстифеев 2007
Для начала было бы интересно создание примитивной мигалки, и тут я встал в ступор, и не могу двигаться далее.
Дело в том, что частота 16 мГц и делать её проблематично, то есть максимально это 1024, в следствии вопрос можно ли поделить больше не понижая частоты процессора?
Этот код нашёл на просторах интернета, помогите пожалуйста, с этим разобраться, хотя бы настроить более длительное мигание светодиода.
Не понял что означает TIMSK, в даташите не могу понять.
Спасибо за внимание

Первой задачей у меня будет: освоить таймеры... Вот есть скрин из книги: Микроконтроллеры AVR семейства Mega А.В.Евстифеев 2007
Для начала было бы интересно создание примитивной мигалки, и тут я встал в ступор, и не могу двигаться далее.
Дело в том, что частота 16 мГц и делать её проблематично, то есть максимально это 1024, в следствии вопрос можно ли поделить больше не понижая частоты процессора?
[spoiler=Код]#include <mega16.h>
#include <delay.h>
// прерывание от тамера 0 пререполнение
interrupt [TIM0_OVF] void timer (void)
{
PORTB.1=!PORTB.1; // инвертируем сигнал на ножке 1
if(OCR0=127){
PORTB.2=1;
};
TCNT0=0x80; /* значение в регистр счетны регистр таймера
прерывание вызовется когда он отсчитает 0x80(128) тиков 0x80+0x80=0х100(переполнение)*/
}
void main(void)
{
PORTB=0x00; // порт B (7-2) на вход на всех подтягивоющий резистор отключен (высокоимпендантное состояние)
DDRB=0x03; // порт B (1 0) на выход на выходах 0(рекомендуется не использумые выводы конфигурировать на вход чтобы случайно не сжечь)
//------------------------------------------------------------------------------------
// инициализация таймера0
TCCR0=0b101;
/* режим Normal(бит 6,3 =0) наиболее простой режим счетный регистр(TCNT0) работает как
суммируищий регистр по каждому импульсу присходит инкремент TCNT0
при переходе 0xFF->0x00 флаг прерывание по переполнению устанавливается в 1
биты 0-2 управление тактовым сигналом
000 таймер остановлен
001 частота кварца делится на 1
010 частота кварца делится на 8
011 частота кварца делится на 64
100 частота кварца делится на 256
101 частота кварца делится на 1024
110 Вывод T0 счет осуществляется по спадаешему фронту
111 Вывод T0 счет осуществляется по нарастаешему */
TCNT0=0x80; /* значение в регистр счетный регистр таймера
прерывание вызовется когда он отсчитает 0x80(128) тиков 0x80+0x80=0х100(переполнение)*/
/* настройка прерываний от таймера(TIMSK)
прерывание от переполнения таймера0 (бит0=1)
прерывание от переполнения таймера1 (бит2=1)
*/
TIMSK=0x05;
// РАЗРЕШИТЬ ПРЕРЫВАНИЯ (без этой команды ни ОДНО прерывание работать не будет)
#asm("sei")
}[/spoiler]
Этот код нашёл на просторах интернета, помогите пожалуйста, с этим разобраться, хотя бы настроить более длительное мигание светодиода.
Не понял что означает TIMSK, в даташите не могу понять.
Спасибо за внимание :-)