- •Микроконтроллеры
- •Базовая информация о микроконтроллерах
- •Сущность и назначение микроконтроллера. Семейства микроконтроллеров
- •Состав микроконтроллера
- •Назначение микроконтроллера
- •Cемейства микроконтроллеров
- •Отправная точка. Микроконтроллерi8051
- •Основные характеристики микроконтроллераi8051
- •Назначение выводовi8051
- •Структурная схемаi8051
- •Микроконтроллеры семействаavrкомпанииatmel
- •Общая характеристика архитектуры, системы команд и ассемблераAvr
- •Состав семейства и основные характеристики микроконтроллеровAvr
- •Структура ассемблерного кодаAvr
- •Группы команд микроконтроллеров avr
- •Директивы ассемблераAvr
- •Список директив ассемблераAvr
- •Директива byte
- •Директива cseg
- •Директива db
- •Директива def
- •Директива device
- •Директива dseg
- •Директива dw
- •Директивы macro иEndmacro
- •Директива equ
- •Директива set
- •Микроконтроллер atmega8535
- •Характеристики, назначение выводов и структура микроконтроллера aTmega8535
- •Характеристики микроконтроллера aTmega8535
- •Назначение выводов микроконтроллера aTmega8535
- •Структура микроконтроллера aTmega8535
- •Сброс микроконтроллера aTmega8535. Режимы пониженного энергопотребления. Сигналы запроса внешних прерываний. Регистры управления
- •Сброс микроконтроллера aTmega8535
- •Регистр mcucsr (mcu Control and Status Register)
- •Регистр mcucr (mcu Control Register)
- •Режимы пониженного энергопотребления
- •Форма сигналов запроса внешних прерываний
- •Регистры общего назначения, регистр состояния и указатель стека микроконтроллера aTmega8535
- •Регистры общего назначения
- •Регистр состояния (sreg)
- •Указатель стека
- •Ввод-вывод
- •Регистры и команды ввода-вывода
- •Порты ввода-вывода
- •Прерывания
- •Источники и таблица векторов прерываний
- •Регистр gicr (General Interrupt Control Register)
- •Внешние прерывания
- •Регистр gifr (General Interrupt Flag Register)
- •Таймеры микроконтроллера aTmega8535
- •Общая информация о таймерах микроконтроллера aTmega8535
- •Множество таймеров aTmega8535
- •Регистр timsk (Timer/Counter Interrupt Mask Register)
- •Регистр tifr (Timer/Counter Interrupt Flag Register)
- •Примеры программ работы с таймером
- •Таймер t0
- •Назначение и свойства таймера t0
- •Структура таймера t0
- •Регистры таймера t0
- •Регистр tccr0 (Timer/Counter Control Register)
- •Устройство сравнения таймера t0
- •Режимы работы таймера t0
- •Режим Normal
- •Режим ctc
- •Режим быстрой шим (fastPwMmode)
- •Режим шим с корректировкой фазы (Phase Correct pwm Mode)
- •Таймер t1
- •Назначение и свойства таймера t1
- •Структура таймера t1
- •Регистры таймера t1
- •Регистр tccr1a (Timer/Counter1 Control Register a)
- •Регистр tccr1b (Timer/Counter1 Control Register b)
- •Задание режима генерации сигнала битами wgm13:0
- •Устройство захвата (Input Capture Unit)
- •Режимы работы таймера t1
- •Список режимов работы таймера t1
- •Режим быстрой шим (fast pwm mode) таймера t1
- •Режим шим с корректировкой фазы (Phase Correct pwm Mode) таймера t1
- •Режим шим с корректировкой фазы и частоты (Phase and Frequency Correct pwm Mode) таймера t1
- •Таймер t2
- •Назначение и свойства таймера t2
- •Структура таймера t2
- •Регистры таймера t2
- •Регистр tccr2 (Timer/Counter Control Register)
- •Устройство сравнения таймера t2
- •Режимы работы таймера t2
- •Режим Normal
- •Режим ctc
- •Режим быстрой шим (fast pwm mode)
- •Режим шим с корректировкой фазы (Phase Correct pwm Mode)
- •Асинхронный режим работы таймера t2. Регистр assr (Asynchronous Status Register)
Таймер t1
Назначение и свойства таймера t1
16-разрядный таймер T1 позволяет более точно определять промежутки времени, отслеживать события и генерировать сигналы. Его основные характеристики таковы:
разрядность 16 бит, в том числе 16-битная ШИМ;
два независимых устройства сравнения (A и B);
устройство захвата;
сброс таймера при совпадении (автоматическая перезагрузка);
ШИМ с корректировкой фазы;
ШИМ с переменным периодом;
генератор частоты;
счетчик внешних событий;
четыре независимых источника прерываний (TOV1, OCF1A, OCF1B, ICF1).
Видно, что у таймеров T0 и T1 много общего. Однако таймер T1 расширяет возможности T0 по некоторым параметрам. Количественные отличия — разрядность 16 бит и два устройства сравнения. Качественное — устройство захвата. Кроме того, одноименные режимы работы таймеров T0 и T1 имеют отличия.
Структура таймера t1
Рис. Схема структуры таймера T1
BOTTOM — 0x0000.
MAX — 0xFFFF.
TOP — одно из фиксированных значений: 0x00FF, 0x01FF, 0x03FF, или значение регистров OCR1A или ICR1.
Выход OC1 должен быть установлен до того, как будет инициализирован регистр направления соответствующего порта для работы OC1 на выход. Это можно сделать, например, установкой бита FOC1 в нормальном режиме.
Регистры таймера t1
Таймер T1 содержит следующие регистры:
TCCR1A/B (Timer/Counter Control Register), два 8-битных регистра управления, определяют входной тактовый сигнал, задают режимы генерации сигнала и работы выхода;
TCNT1 (Timer/Counter Register), 16-битный счетный регистр, считает такты внутреннего или внешнего, на входе T1, тактового сигнала;
OCR1A/B (Output Compare Register), два 16-битных регистра сравнения, содержат значение, которое в каждом такте сравнивается со значением TCNT1, при совпадении сравниваемых значений может быть сгенерировано прерывание или заданное изменение сигнала на выходе OC1;
ICR1 (Input Capture Register), 16-битный регистр, в который записывается значение TCNT1 при возникновении события на входе ICP1 или выходе аналогового компаратора, кроме того, этот регистр может использоваться для задания TOP.
Доступ к 16-битным регистрам осуществляется через 8-битную шину данных процессора за два цикла. В 16-битном таймере имеется 8-битный регистр временного хранения, в который помещается старший байт 16-битного регистра. При записи процессором байта в младшую часть 16-битного регистра и этот байт, и байт из регистра временного хранения, помещенный в него ранее, одновременно записываются в 16-битный регистр. При чтении процессором младшего байта старший одновременно записывается в регистр временного хранения, откуда должен будет прочитан следующей командой.
Пример.
; Set TCNT1 to 0x01FF
ldi r17,0x01
ldi r16,0xFF
out TCNT1H,r17
out TCNT1L,r16
; Read TCNT1 into r17:r16
in r16,TCNT1L
in r17,TCNT1H
В C-коде это скрыто:
unsigned int i;
/* Set TCNT1 to 0x01FF */
TCNT1 = 0x1FF;
/* Read TCNT1 into i */
i = TCNT1;
Регистр временного хранения один, и он используется при обращении ко всем 16-битным регистрам. Поэтому если нужно записать в несколько регистров значения с одинаковым старшим байтом, то его достаточно записать только один раз.
Если разрешены прерывания, то между командами обращения к 16-битному регистру может произойти прерывание. Если его обработчик может изменить значение регистра временного хранения, то перед обращением к 16-битному регистру прерывания нужно запретить.