Читайте также:
|
|
В среде 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 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Программный способ формирования временных интервалов на языке Ассемблер | | | Генерация пакета импульсов |