ПредишенСледващото

При програмиране на 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< TCNT1 = TCNT1_1MS;
// Активиране на таймер 1 преливник прекъсват.
TIMSK = (1<>

нищожен timePoll (свободен)
статичен U16 timecnt = 100;

ако (TIMSK (1< се върне;

TCNT1 = TCNT1_1MS;
TIMSK = (1<

//[timerint.S]
#include
.текст
.глобален TIMER1_OVF_vect
TIMER1_OVF_vect:
; CBI _SFR_IO_ADDR (PORTB), PB7
тласък R24
; LDI R24,

(1< LDI R24, 0
от _SFR_IO_ADDR (TIMSK), R24
; от 0x39, R24
поп R24
; SBI _SFR_IO_ADDR (PORTB), PB7
Reti

[Броене програма с точност до 1 мс]

Ако имате по-организиран начин глобален брояч милисекунда е от значение клеймото, времето в програмата става тривиална задача. Ето един пример за изчисляване забавяне от 0.5 секунди:

u32 timecnt = клеймото + 500;
докато (клеймото

Подкрепете проекта - споделете линка, благодаря!