Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Таймеры

Программная реализация временной задержки большой велечины

 

В восмиразрядном регистре может быть записано максимальное десятичное число 255. Тогда максимальное время задержки

Tз=255*3/8+7/8=95,625+0,875=96,5мкс

Для формирования задержки в 1с можно использовать метод вложенных циклов.

rcall sec stop: rjmp stop   sec: ldi r16,0xac ldi r17,0x13 ldi r18,0x06 count1: dec r16   brne count1   dec r17     brne count1     dec r18     brne count1   nop   ret    
Нет
Уменьшение содержимого регистра R3
Да
Нет
Уменьшение содержимого регистра R2
Да
Загрузка в регистры R1,R2,R3 двоичные числа
Нет
Уменьшение содержимого регистра R1
Да

 

Эти способы имеют большой недостаток, так как во время подсчета времени задержки микроконтроллер невыполняет иной работы. Для этой цели используются аппаратные средства микроконтроллера, а именно таймер.

Таймеры

8-РАЗРЯДНЫЙ ТАЙМЕР/СЧЕТЧИК 0

8-разрядный таймер/счетчик может получать импульсы тактовой частоты - CK, импульсы с предварительного делителя (CK/8, CK/64, CK/256 или CK/1024), импульсы с внешнего вывода или быть остановлен соответствующими установками регистра TCCR0. Флаг переполнения таймера находится в регистре TIFR. Биты управления таймером расположены в регистре TCCR0. Разрешение и запрещение прерываний от таймера управляется регистром TIMSK.

При работе таймера/счетчика от внешнего сигнала, внешний сигнал синхронизируется с тактовым генератором ЦПУ. Для правильной обработки внешнего сигнала, минимальное время между соседними импульсами должно превышать период тактовой частоты процессора. Сигнал внешнего источника обрабатывается по спадающему фронту тактовой частоты процессора.

8-разрядный таймер/счетчик можно использовать как счетчик с высоким разрешением, так и для точных применений с низким коэффициентом деления тактовой частоты. Более высокие коэффициенты деления можно использовать для медленных функций или измерения временных интервалов между редкими событиями.

 

РЕГИСТР УПРАВЛЕНИЯ ТАЙМЕРОМ/СЧЕТЧИКОМ 0 - TCCR0

 

Бит 7 6 5 4 3 2 1 0

┌───┬───┬───┬───┬───┬────┬────┬────┐

$33($53)│ - │ - │ - │ - │ - │CS02│CS01│CS00│ TCCR0

└───┴───┴───┴───┴───┴────┴────┴────┘

Чт./зап.(R/W) R R R R R R/W R/W R/W

Начальн.знач. 0 0 0 0 0 0 0 0

 

Биты 7..3 - зарезервированы. В AT90S2313 эты биты зарезервированы и

всегда читаются как 0.

Биты 2,1,0 - CS02, CS01, CS00 - выбор тактовой частоты. Эти биты за-

дают коэффициент деления предварительного делителя.

 

Таблица 6. Выбор коэффициента предварительного деления

┌────┬────┬────┬─────────────────────────────────────────────────────┐

│CS02│CS01│CS00│Описание │

├────┼────┼────┼─────────────────────────────────────────────────────┤

│0 │0 │0 │Таймер/счетчик остановлен │

├────┼────┼────┼─────────────────────────────────────────────────────┤

│0 │0 │1 │CK │

├────┼────┼────┼─────────────────────────────────────────────────────┤

│0 │1 │0 │CK/8 │

├────┼────┼────┼─────────────────────────────────────────────────────┤

│0 │1 │1 │CK/64 │

├────┼────┼────┼─────────────────────────────────────────────────────┤

│1 │0 │0 │CK/256 │

├────┼────┼────┼─────────────────────────────────────────────────────┤

│1 │0 │1 │CK/1024 │

├────┼────┼────┼─────────────────────────────────────────────────────┤

│1 │1 │0 │Внешний вывод T0, нарастающий фронт │

├────┼────┼────┼─────────────────────────────────────────────────────┤

│1 │1 │1 │Внешний вывод T0, спадающий фронт │

└────┴────┴────┴─────────────────────────────────────────────────────┘

 

Условие Stop запрещает/разрешает функционирование таймера/счетчика. В режимах деления используется частота тактового генератора. При использовании работы от внешнего источника предварительно должен быть установлен соответствующий бит регистра направления данных (0 - включает

ножку на ввод).

 

ТАЙМЕР/СЧЕТЧИК 0 - TCNT0.

 

Бит 7 6 5 4 3 2 1 0

┌───┬───┬───┬───┬───┬───┬───┬───┐

$32($52) │MSB│ - │ - │ - │ - │ - │ - │LSB│ TCNT0

└───┴───┴───┴───┴───┴───┴───┴───┘

Чт./зап.(R/W) R/W R/W R/W R/W R/W R/W R/W R/W

Начальн.знач. 0 0 0 0 0 0 0 0

 

 

 
 

 


Таймер/счетчик реализован как нарастающий счетчик с возможностью чтения и записи. При записи таймера/счетчика, если присутствуют тактовые импульсы, таймер/счетчик продолжает счет в следующем за операцией записи тактовом цикле таймера.

 

Таймеры вмикроконтроллерах используются для обеспечения заданной задержки.

Обычно для переключения таймера используются тактовые импульсы процессора. Загрузив в таймер начальное значение, можно отсчитывать определенные интервалы времени, фиксируя окончание интервала по моменту переполнения таймера.

Часто перед таймером включают предварительный делитель тактовой частоты, чтобы иметь возможность отсчитывать более длинные интервалы времени. Делитель обеспечивает инкремент содержимого таймера после поступления определенного числа тактовых импульсов, определяемых коэффициентом деления делителя.

Если требуется реализовать задержку в 10 мс (0.01с) в микроконтроллере с тактовой частотой 10 МГц, то можно использовать схему, показанную на рис. A, следующим образом.

 

 

 
 

 

 


Рис А

Сначала надо определить требуемый коэффициент деления. При тактовой частоте 10 МГц таймер должен переключиться до переполнения 10000 раз, что невозможно для 8-разрядного счетчика. Чтобы обеспечить заданную задержку, необходимо выбрать коэффициент деления для предварительного делителя, который обычно является степенью двойки (то-есть 1, 2, 4, 8,...256). Если выбрать коэффициент деления 64, то таймер переключится 156 раз при поступлении на вход делителя 64 х 156 = 9984 тактовых импульсов, что достаточно близко к требуемой величине. Более точное значение задержки может быть достигнуто путем добавления команд N0P или других команд, используемых для заполнения определенных промежутков времени. Для отсчета заданного времени таймер можно очистить, а затем непрерывно сравнивать его содержимое со значением 156.

Более эффективный способ отсчета — загрузить в таймер число 100 = 256 - 156 и ждать, когда флаг прерывания по переполнению таймера установится в 1. Используя данный метод, можно реализовать мультизадачный режим выполнения программ. Переключение задач будет производиться, когда таймер отсчитает 10 мс.

Не рекомендуется использовать этот метод для создания часов реального времени. Так как при перезагрузке таймера значение коэффициента деления делителя неизвестно, а его содержимое сбрасывается в 0 при записи в регистр таймера, то при отсчете времени могут возникать ошибки. Вместо этого лучше дать возможность таймеру считать непрерывно (тогда делитель никогда не сбрасывается), а при его переполнении увеличивать содержимое счетчика часов реального времени. Когда программе требуется узнать текущее время, она выбирает и преобразует содержимое этого счетчика, получая правильное значение времени. Такой метод используется в IВМ РС, где переключение («тик») таймера происходит 18,2 раз в секунду.

 

Рассмотрим программы задержки с использованием таймера.

 

 

ДА
Оперция STEP
НЕТ
Задание коэф. деления
Обнуление счетчика

LDI R16,0x00 OUT TCNT0,R16   LDI R16,0x01 OUT TCCR0,R16     M1: IN R16,TIFR ANDI R16,0x02 CPI R16,0 BRNE M1   STEP:  
Возврат из подпрограммы и разрешение прерываний
Действия
Цикл ожидания прерываний
Разрешение всех прерываний
Разрешение прерываний от таймера
Инициализация таймера и делителя. Запуск таймера
Обнуление регистров
Определение векторов прерываний

  .org 0x00 rjmp loop   .org 0x02 rjmp timer   loop: ldi r29,0x00 ldi r16,0x01 out tccr0,r16 ldi r16,0x02 out timsk,r16 sei   stop: rjmp stop     timer: inc r20 reti  

 


<== предыдущая | следующая ==>
Индикаторные методы | Амблиопия и способы лечения

Date: 2015-07-17; view: 218; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию