Сразу смотрим нужные там 2 таблицы: Таблица 1
Таблица2
Таймер из 2 таблицы нам нужен TOIE1. То есть TIMSK = 0b00000100; \\\это число зашифровывает цифру 2, если считать от 0 слева. А 2-TOIE1.
Я использую внутренний гениратор на 8МГЦЧастота МК-8 000 000 Гц Смотрим на 1 таблицу, для примера возьмем делитель на 1024 (101), переведем из 2 в 10 систему счисления, получится 5. Значит TCCR1B=0x05; Частота таймера=Тактовая частота / делитель = 8 000 000 / 1024= 7812.5 Гц Период это обратное значение частоты. 1\частоту таймера=1\7812.5=0.000128 с= 128 * 10^-6 с = 128 мкс Максимальное значение, которое может измерить 16 битный таймер - 65536 65536 * 128 * 10^-6 = 8.388 секунды. Это число (8.388) значит что таймер будет срабатывать(переполняться) каждые 8.388 сек. Если вам нужно другое число то просто настаиваем частоту МК на нужную частоту и выбираем делитель.
Теперь пример кода :)
#include <mega8.h> unsigned char pr=0; \\\число, в которое будем записывать количество прерываний таймера. Например2-2*8.388 = 16.776 секунды // Declare your global variables here interrupt[TIM1_OVF]void timer1_overflow(void) \\\настройки таймера { TCNT1=0; \\\обнуляем таймер. Именно в него записывает 8.388 и он обнуляется каждое это время pr++; \\\каждый раз как обнуляется таймер в него записывает единица if(pr==1) \\\если pr=1, значит таймер уже обнулился 1 раз (прошло 8.388 секунды) { PORTC.1=0; \\\настраиваем порт на 0 через 8.388 сек после старта } else if(pr==30) \\\если pr=30, значит таймер обнулился 30 раз. 8.388*30=251.64с=4.2 минуты { PORTC.1=1; \\\настраиваем порт как 1 через 4.2 минуты } else if(pr==59)\\\таймер обнулялся 59 раз=8.2 минуты { pr=0; \\\обнуляем наш счетчик на 8 минут. Цикл начинается заново } } void main(void) { TCCR1B=0x05; \\\делитель на 1024 TIMSK = 0b00000100; \\\TOIE1 TCNT1=0; \\\Снова обнуляем счетчик #asm \\\разрешаем прерывания sei #endasm DDRC.1=0xff; \\\ настраиваем порт PORTC.1=1; while (1) { }; }
Наш код через 8 сек после старта avr настраивает портс.1 как 0, через 4.2 мин делает порт как 1 и через 8.2 минуты обнуляем таймер и все начинается заново. Числа и порты можете выбирать сами, надеюсь все понятно! На этом все! Спасибо :)
|