При програмиране на AVR (ATmegaXX, ATtinyXX) трябва да се знае колко време ще изпълни код. В нея са описани прости правила за изчисляване на този период.
време за изпълнение на инструкции за монтаж са строго обвързан с тактовата честота на микроконтролера AVR, така че първото нещо, което трябва да знаете - това, което определя основната честота F. т.е., на каква честота работи вътрешна честота ... Обикновено, тактовата честота на е настроен кварц, докато тя е равна на честотата написани на кварц. Понякога кварц не се използва, и не работи много точен вътрешен RC осцилатор (без външни компоненти за генератора не е необходимо), а след това обикновено генераторът работи на честота от 1 MHz (може да бъде персонализиран, както и честотата на 8 MHz). Кой режим се използва - се определя от вътрешните конфигурация предпазители (те се наричат също джъмпери). Например, чип по подразбиране ATmega16 (когато чипа идва чиста от завода) джъмперите са настроени да работят без кварц, вътрешния RC осцилатор с честота от 1 MHz.
Така че, основната честота F в Hertz, което знаем. Сега можете да видите на време един часовник TCLK = 1 / F (в секунди). Всеки отбор се извършва определен брой цикли (колко - зависи от екипа). Например, Andi и ORI команди (които често се използват в управлението на пристанища фута) държат в продължение на 1 такт. Пример за изчисляване на продължителността на екипите на Andi:
Таблица на съответствието между отборите и броят на циклите на микроконтролера може да се намери във фиша на микроконтролера, вижте. Указанията, раздел Резюме в края на листа с данни. В последната колона на #Clocks на масата на определен брой цикли, за които се движат командата. Ако има щандове цифра - например 2, след това всичко е ясно, екипът извършва 2 цикъла. Но понякога си струва да се 1/2 или 1/2/3. Това означава например, 1/2, командата може да се изпълнява за 1 или 2 цикъла, в зависимост от условията на командата. Например, BREQ команда се изпълнява в продължение на 1 такт, ако няма клон на състоянието и 2 бара, ако има условен скок.
[Изчисляване на командата в езика C.]
Налице е също така метод за директно измерване на дължината на кода с осцилоскоп. За тази цел свободния крак е избрана от микроконтролера, и началото на измерителните краката сложи настройка код на 1 и в края на кода за измерване на крака на 0. старт на програмата за изпълнение на осцилоскоп се измерва и продължителността на импулса.
[изчисление константи за брояч / таймер]
Противоположните / таймери често се използват в програмата за времето закъснения. Аз обикновено мелодия брояч по такъв начин, че той грубо е работил прекъсване на всеки 1 милисекунда. В този случай, програмата е удобен за измерване на времето за глобален брояч (повече за това по-късно). Показване на таймера: 1 е създаден и как да се използва.
нищожен SetupTIMER1 (свободен)
// 1<
TCCR1B = (1<
// Активиране на таймер 1 преливник прекъсват.
TIMSK = (1<
нищожен timePoll (свободен)
статичен U16 timecnt = 100;
ако (TIMSK (1<
TCNT1 = TCNT1_1MS; //[timerint.S] (1< [Броене програма с точност до 1 мс] Ако имате по-организиран начин глобален брояч милисекунда е от значение клеймото, времето в програмата става тривиална задача. Ето един пример за изчисляване забавяне от 0.5 секунди: u32 timecnt = клеймото + 500;
TIMSK = (1<
#include
.текст
.глобален TIMER1_OVF_vect
TIMER1_OVF_vect:
; CBI _SFR_IO_ADDR (PORTB), PB7
тласък R24
; LDI R24,
от _SFR_IO_ADDR (TIMSK), R24
; от 0x39, R24
поп R24
; SBI _SFR_IO_ADDR (PORTB), PB7
Reti
докато (клеймото