Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Программный способ формирования временных интервалов на языке СИ

Читайте также:
  1. C) изменения в предполагаемом способе возмещения актива.
  2. II . Динамика работоспособности
  3. II этап - Начальный для формирования связной речи у детей с ОНР – овладение диалогической речью.
  4. II. 7.5. Развитие внимания у детей и пути его формирования
  5. IV. Биогенетические методы, способствующие увеличению продолжительности жизни
  6. V. 18. 5. Природные предпосылки способностей и талантов
  7. V. 18.1. Понятие о способностях

В среде Code Vision для формирования программных временных задержек в тексте программы на СИ должна быть директива подключения встроенной функции программных задержек # include < delay. h >. С ее помощью, в соответствии с тактовой частотой микроконтроллера, которая задается при создании проекта, производится временная программная задержка. Имя функции задержки в миллисекундах delay_ms, в микросекундах - delay_us. Значение п араметра функций (значения в круглых скобках) являются временем задержки. Примеры организации задержек:

 

delay_us (12); // - задержка 12 микросекунд;

delay_ms (288); // - задержка 288 миллисекунд;

delay_ms (1000); // - задержка 1000 миллисекунд = 1секунда.

 

Необходимо отметить, что величина кода процедуры задержки на языке СИ значительно больше, чем при использовании задержки на языке Ассемблер.

 

5.1.3 Формирование временных интервалов с использованием таймера\счетчика

При использовании таймера\счетчика подсчет тактовых (временных) импульсов производится таймером, а в это время программой микроконтроллера будут выполняться его основные функции.

Для формирования временных интервалов удобно применять режим “Сброса по совпадению”. Рассмотрим вариант использования таймера Т0.

Напомним, что в режиме сброса по совпадению значение таймера/счетчика Т0 сравнивается в цифровом компараторе со значением в специальном регистре сравнения OCR0. При равенстве их значений устанавливается флаг прерывания по совпадению OCF0 и может быть вызвана подпрограмма прерывания по совпадению (если эти прерывания разрешены).

Таким образом, от момента включения таймера Т0 до момента совпадения проходит временной интервал, равный произведению значения в регистре совпадения на длительность периода входных импульсов (см. рис.22a).

tинт = (OCR0 – 1)* Твх. (6)

При изменении значения в регистре совпадения изменяется величина временного интервала.

На вход таймера Т0 поступают импульсы от тактового генератора через делитель частоты. Коэффициент деления делителя К может принимать одно из значений 1,8,64,256,1024. Таким образом, соотношение между периодом импульсов тактового генератора и периодом импульсов на входе таймера:

Твх = Ттакт * К.

Подставив это соотношение в формулу (6), получим:

tинт = (OCR0 – 1) * Ттакт * К.

Отсюда находится значение, которое необходимо поместить в регистр совпадения OCR0, для получения заданного временного интервала.

 

OCR0 = tинттакт / К - 1 (8)

Или OCR0 = tинт *Fтакт / К - 1

 

Пример Рассчитать значение, которое надо поместить в регистр совпадения для получения временного интервала 320 мксек. Коэффициент деления делителя частоты К = 256. Тактовая частота микроконтроллера Fтакт =16мГц.

Значение периода импульсов тактового генератора:

Ттакт = 1/ Fтакт = 1/16*106 = 2-4*10-6 сек.

Значение регистра совпадения по формуле (8):

OCR0 = tинттакт * К - 1 = 320*10-6/ 2-4*10-6 * 256 - 1= 19.

Для загрузки этого значения используются оператор:

 

OCR0 = 19; // Регистру присвоить значение.

 

 

Максимальное значение временного интервала будет, если коэффициент деления делителя частоты равен 1024 и значение в регистре совпадения равно 255. При значении тактовой частоты 16 мГц:

 

tинт_мах = Ттакт * К * 256 = 2-4*10-6 * 210 * 28) = 0,01630 сек.

 

 

# include < mega16.h> // Директива подключения файла mega16.h с именами

// регистров ввода-вывода микроконтроллера

 

 

void main (void) // Главная функция.

{

 

TIMSK = 0b00000010; // Разрешить прерывания по совпадению Т0.

OCR0 = 19; // В регистр сравнения загружается байт,

// соответствующий временному интервалу 320 мксек.

TCCR0 = 0B00001001; // Разряды 6 и 3 (01) - режим “Сброс по;совпадению”,

// мл. разряды 001 – коэфф. деления =1 и пуск Т0 (началo

// временного интервала).

while (1)

{

// Операторы главной функции и работает Т0.

}

interrupt [ TIM0 _ COMP] end_interv _ 19mks ()

{

// Операторы функции обработки прерывания end_interv _ 19mks (),

// которая вызвана через 19 мкс.

 

}

 

 

Для больших временных интервалов можно использовать 16-разрядный таймер Т1.

 


Дата добавления: 2015-07-20; просмотров: 585 | Нарушение авторских прав


Читайте в этой же книге: UART - универсальный последовательный порт | Аналоговый компаратор | Аналого-цифровой преобразователь | Энергонезависимая память данных | Язык Ассемблер | Типы данных, объявление данных | Операторы | Оператор if-else (ветвления ) | Оператор switch | Оператор цикла for |
<== предыдущая страница | следующая страница ==>
Программный способ формирования временных интервалов на языке Ассемблер| Генерация пакета импульсов

mybiblioteka.su - 2015-2024 год. (0.007 сек.)