Разряд | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
TCNT0 | TCNT0[7:0] | |||||||
Чтение/запись | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. |
Исх. значение | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Регистр таймера-счетчика характеризуется двунаправленностью доступа к 8-разрядному счетчику таймера 0. Запись в регистр TCNT0 блокирует отработку возникающего совпадения на следующем после записи такте синхронизации таймера. Изменение содержимого счетчика (TCNT0) во время счета связано с риском потери результата сравнения между TCNT0 и регистром OCR0.
Регистр порога сравнения - OCR0
Разряд | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
OCR0 | OCR0[7:0] | |||||||
Чтение/запись | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. |
Исх. значение | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Регистр порога сравнения содержит 8-разр. значение, которое непрерывно сравнивается цифровым компаратором со значением 8-разр. счетчика (TCNT0). Факт совпадения значений может использоваться для генерации прерывания по выполнению условия сравнения или для генерации прямоугольных импульсов на выводе OC0.
Пример программы на ассемблере, использующей таймер/счетчика
.include "m16def.inc"
.def Treg = r16
.def Preg1 = r22
.cseg
.org $000 ; Установка положения в сегменте (см. тему: сброс и установку прерывания)
rjmp start ; назначения перехода на начало программы метка «start»
.org $012 ;назначения перехода по переполнению счетчика на метку «tim»
rjmp tim
Tim:
Out DDRB, preg1
inc preg1
call inittime
reti
start:
clr preg1 ; очищаем регистр (инициализация)
sei ; разрешение прерываний установка биту 7 регистра SREG лог. 1
ldi Treg, 00000001b ;запись числа в «Treg»
out TIMSK, Treg ;запись регистра «Treg» в регистр «Timsk»
call inittime ; вызов подпрограммы «inittime»
ldi Treg, 10000101b
out TCCR0, Treg ; установка тактирования
rcall loop ; вызов «Loop»
Loop:
rjmp loop
ret
inittime:
ldi Treg, 00001111b
out TCNT0, Treg ; установка начального значения с которого начинается «отчет до переполнения»
ret
Индивидуальные задания
Порядок выполнения лабораторной работы.
1. Разработать алгоритм для выполнения индивидуального задания.
2. Разработать программу для выполнения индивидуального задания.
3. Ввести программу индивидуального задания на ПК.
4. С помощью ПОС проанализировать выполнение индивидуальной программы.
5. Загрузить программу в стенд STK500. Убедиться в правильном выполнении индивидуального задания, при отрицательном результате осуществить изменение алгоритма либо программы. Повторить загрузку.программы в стенд ОЭВМ.
6. Сохранить листинг правильно работающей программы.
7. Показать результат выполнения работы преподавателю и ответить на контрольные вопросы.
Контрольные вопросы:
1. Структура системы прерывания ATmega16.
2. Назначение, примеры применения системы прерывания.
3. Регистры управления, распределение памяти вATmega16.
4. Прерывание от таймеров, последовательного приемопередатчика
5. Аппаратное устранение дребезга контактов для схем с TTL и КМОП.
6. Программное устранение дребезга контактов.
7. Необходимость применения аппаратного либо программного устранения дребезга контактов.
8. Методы и типы частотного и временного преобразования.
9. Параметры частотного преобразования.
10. Факторы, влияющие на погрешность частотного преобразования.
11. Понятие разрешающая способность частотного преобразования.
12. Измерение периода.
13. Характеристика преобразования, нелинейность частотного преобразования.
14. Аппаратные реализации частотного и временного преобразования.
15. Примеры практического применения частотного и временного преобразования.
Лабораторная работа №3
Тема: Изучение 16 – разрядного Таймера/счетчика 1
Цель: Изучить функционирование и программирование таймера/счетчика 1.
Для выполнения данной лабораторной работы нужно знать:
Краткие теоретические сведения
16-разрядные таймеры-счетчики предназначены для точного задания временных интервалов, генерации прямоугольных импульсов и измерения временных характеристик импульсных сигналов.
Основные отличительные особенности:
На рисунке 6 и теории, индекс “n” заменяет номер таймера-счетчика , а “x” заменяет наименование канала сравнения (A, или B). Однако при программировании необходимо использовать фактические номера и наименования. Например, для записи нового состояния таймера-счетчика 1 в программе необходимо указывать TCNT1.
Функциональная схема 16-разр. таймера-счетчика показана на рисунке 6. Если требуется конкретизировать расположение того или иного вывода см. “Расположение выводов”. Регистры ввода-вывода, а также биты или линии ввода-вывода, к которым организован доступ от ЦПУ, выделены жирной линией. Описание регистров, расположение и назначение бит данных таймеров представлены в параграфе “Описание регистров 16-разр. таймеров-счетчиков”.
Регистры таймер/счетчика 1
Регистр А управления таймером-счетчиком 1 – TCCR1A
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
COM1A1 | COM1A0 | COM1B1 | COM1B0 | FOC1A | FOC1B | WGM11 | WGM10 | TCCR1A | |
Чтение/запись | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. | Чт./Зп. |
Исх. значение | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Биты 7:6 – COM1A1:0: Режим формирования выходного сигнала канала A
Биты 5:4 – COM1B1:0: Режим формирования выходного сигнала канала В
Биты COMnA1:0 и COMnB1:0 влияют на работу выводов OCnA и OCnB, соответственно. Если один или оба бита COMnA1:0 равны 1, то вывод OCnA переходит к выполнению альтернативной функции, запрещая его работу как обычного порта ввода-вывода. Аналогичные изменения происходят с выводом OCnB во время записи лог. 1 в один из битов COMnB1:0. Однако необходимо учитывать, что остается влияние на работу данных выводов со стороны регистра направления данных (DDR) и в соответствующих разрядах этого регистра должно быть задано выходное направление для выводов OCnA или OCnB.