а становить:
.
Тоді період контролера становить:
Максимальне значення таймера становить , т. о., використовуваний контролер дорахував до 65535 за
Згідно з завданням, частота динамічної індикації повинна становити , тобто період становить .
Наше завдання - підібрати таку тактову частоту таймера, щоб він вважав до 65535 трохи менше, ніж за 33 мс.
Щоб збільшити період, за який дорахував до кінця таймер, потрібно скористатися предделітеля частоти. Він може сформувати чотири кратні частоти: , , , .
Зменшуючи частоту в 8 разів, період збільшиться у 8 разів і становитиме:
.
Отже, нам підійде цей предделітель. Тепер розрахуємо кількість тактових імпульсів, яке пройде через після початку відліку при такому періоді:
У шістнадцятковій системі маємо: 0x2FBA.
У мікроконтролері AT90S2313 є два таймера. Вони називаються: В«Timer-Counter 0В» і В«Timer-Counter 1В», причому в останнього наявності переривання компаратора (від англ. To compare - порівнювати). Воно-то нам і потрібно. Для його активізації запишемо в 6-й біт регісра В«TIMSKВ» логічну одиницю:
ldi var, 0b01000000TIMSK, var
Тепер, для установки предделітеля частоти в необхідне положення (CK/8), запишемо у 2-й, 1-й і 0-й біти регістра В«TIMSKВ» 0, 1 і 0 відповідно: p>
ldi var, 0b00000010TCCR1B, var
Далі необхідно розраховане шістнадцяткове число, з яким компаратор буде порівнювати стан таймера, записати в регістр В«OCR1AВ». Однак слід пам'ятати, що даний регістр є складовим, тобто складається з двох 8-бітних регістрів. Тому старший і молодший байти числа 0x2FBA числа запишемо в регістри В«OCR1AHВ» і В«OCR1ALВ» відповідно: var, 0x2F
out OCR1AH, varvar, 0xBAOCR1AL, var
Тепреь обнулив таймер: var, 0
out TCNT1H, varTCNT1L, var
На цьому ініціалізація таймера закінчена.
Зараз визначимо змінні, необхідні в процесі роботи програми. Обнулив змінну В«pressedBtnВ», в яку записується, яка кнопка натиснута в справжній момент.pressedBtn, 0
У змінній В«indВ» записуємо в четверт...