Техника микропроцессорных систем в электросвязи. Исследования микроконтроллеров
Классификация, структура, архитектура и модульная организация микроконтроллеров. Средства разработки программного обеспечения AVR-контроллеров. Директивы транслятора ассемблера, рабочая частота и циклы. Исследование арифметических и логических команд.
Рубрика | Коммуникации, связь, цифровые приборы и радиоэлектроника |
Вид | методичка |
Язык | русский |
Дата добавления | 19.09.2019 |
Размер файла | 3,0 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
3.2.9 Команды возврата из подпрограмм
В конце каждой подпрограммы обязательно должна находиться команда возврата из нее. В системе команд микроконтроллеров семейства имеются две таких команды. Для возврата из обычной подпрограммы, вызываемой командами RCALL и ICALL, используется команда RET. Для возврата из подпрограммы обработки прерывания используется команда RETI.
Обе команды восстанавливают из стека содержимое счетчика команд, сохраненное там перед переходом к подпрограмме. Команда возврата из подпрограммы RETI дополнительно устанавливает в "1" флаг общего разрешения прерываний I регистра SREG, сбрасываемый аппаратно при возникновении прерывания.
На выполнение каждой из команд возврата из подпрограммы требуется 4 машинных цикла.
3.2.10 Программы исследования ветвящихся участков программ
;**** Исследование ветвящихся участков программ
.include "2313def.inc"
rjmp RESET;
RESET:
ldi r31, low(ramend) ; формирование стека
out SPL, r31; в верхней части ОЗУ
;**** Организация циклов при помощи команд условного перехода
;**** и относительного безусловного перехода
ldi r16, 0x05; занесение кода $05 в регистр r16
loop1:
dec r16;уменьшение содержимого r16 на1
breq equal;если равно нулю, то переход на "equal"
rjmp loop1;иначе - на начало цикла "loop1"
equal:
nop ;пустая операция
loop2:
inc r16;увеличение содержимого r16 на1
cpi r16,$05 ;сравнение r16 с числом $05
brne loop2 ;если не равно нулю, то переход на "loop2"
rjmp ok;иначе - выход из цикла "ok"
ok:
nop ;пустая операция
;**** Организация ветвления при помощи команды косвенного
;**** безусловного перехода ijmp через регистр z
.EQU loop3h = 0x01
.EQU loop3l = 0xff
ldi zl, loop3l; занесение кода перехода в регистр zl (младш. часть кода)
ldi zh, loop3h; занесение кода перехода в регистр zl (ст. ч часть кода)
nop
nop
.ORG 0x1ff
nop
ijmp loop3
.EXIT
3.3 Исследование портов ввода-вывода
3.3.1 Общие сведения
Как и любые другие микроконтроллеры, микроконтроллеры AVR семейства Classic имеют порты ввода/вывода. Каждый порт состоит из определенного числа выводов, через которые микроконтроллер может принимать или передавать цифровые сигналы.
Количество доступных портов, или, если точнее, количество контактов ввода/вывода, является одним из основных параметров, влияющих на выбор конкретной модели микроконтроллера.
- AT90S1200 имеет два порта ввода/вывода: В (8-разрядный) и D (7-разрядный). Общее количество контактов ввода/вывода равно 15;
- AT90S2313 также имеет два порта ввода/вывода: В (8-разрядныЙ) и D (7-разряд-ный). Общее количество контактов ввода/вывода равно 15;
- AT90S/LS2323 имеет один 3-разрядный порт ввода/вывода В;
- AT90S/LS2343 имеет один 5-разрядный порт ввода/вывода В;
- AT90S/LS2333, AT90S/LS4433 имеют по три порта ввода/вывода: В (6-разряд-ный), С (6-разрядный) и D (8-разрядный). Общее количество контактов ввода/вывода равно 20;
- AT90S/LS4434, AT90S/LS8535 имеют по четыре 8-разрядных порт ввода/вывода А, В, С и D. Общее количество контактов ввода/вывод равно 32;
- AT90S4414, AT90S8515 также имеют по четыре 8-разрядных портов ввода/вывода А, В, С и D. Общее количество контактов ввода/выводе в этих моделях равно 32;
- АТ90С8534 имеет один 7-разрядный порт А и два входа внешних прерываний. В данном микроконтроллере присутствует также и 6-разрядный аналоговый входной порт. Таким образом, общее количество контактов ввода/вывода в этой модели равно 15;
Во всех микроконтроллерах семейства, за исключением АТ90С8534, большинство контактов ввода/вывода имеет дополнительные функции, поскольку эти выводы также используются периферийными устройствами микроконтроллера.
Конфигурирование каждой лини порта (задание направления передачи данных) может быть произведено программно в любой момент времени. Входные буферы портов построены по схеме триггера Шмитта. Для линий, сконфигурированных как входные, имеется возможность подключения внутреннего подтягивающего резистора сопротивлением 35...120 кОм между входом и проводом питания Uсс. Кроме того, если вывод (вход) с подключенным внутренним подтягивающим резистором подключить к общему проводу, он может служить источником тока.
Максимальная нагрузочная способность выходных буферов портов ввода/вывода при логическом "0" на выходе составляет 20 мА. Благодаря этому микроконтроллер может непосредственно управлять светодиодными индикаторами, биполярными и полевыми транзисторами, а также непосредственно быть подключенным ко многим типам датчиков.
Большинство выводов портов поддерживают альтернативные функции встроенных периферийных устройств микроконтроллера. Все порты являются двунаправленными портами ввода-вывода с опциональными подтягивающими резисторами.
3.3.2 Обращение к портам ввода/вывода
Упрощенная структурная схема элемента ввода/вывода приведена на рисунке 3.3. Здесь DDRx - бит контроля направления передачи данных и привязки вывода к шине питания (VCC), PORTx - бит привязки вывода к VCC и бит выходных данных, PINx - бит для отображения логического уровня сигнала на физическом выводе микросхемы. На рисунке 3.4, в качестве примера приведена структурная схема первого разряда порта D (PD1) микроконтроллера AT90S4434.
Обращение к портам производится через регистры ввода/вывода, причем под каждый порт в адресном пространстве ввода/вывода зарезервировано по 3 адреса (таблица 3.2). По этим адресам размещаются три регистра - регистр данных порта PORTx, регистр направления данных DDRx и регистр выводов порта PINx. Разряды этих регистров имеют названия Рх7...РхО - для регистров PORTx, DDx7...DDxO - для регистром DDRx и PINx7...PINxO - для регистров PINx. Действительные названия регистров (и их разрядов) получаются подстановкой названия порта вместо символа «х», соответственно для порта А регистры называют PORTA, DDRA, PINA, для порта В - PORTB, DDRB, PINB и т.д. Положение этих регистров в адресном пространстве ввода/вывода приведено в таблице 3.2. При сбросе микроконтроллера регистры DDRx и PORТх очищаются, а все выводы портов после сброса устанавливаются в третье состояние.
Рисунок 3.3 - Структура разряда порта ввода/вывода
DDRx - бит контроля направления передачи данных и привязки вывода к шине питания (VCC); PORTx - бит привязки вывода к VCC и бит выходных данных; PINx - бит отображения логического уровня сигнала на физическом выводе микросхемы
Следует заметить, что регистры PINx на самом деле регистрами не являются, по этим адресам осуществляется доступ к физическим значениям сигналов на выводах порта. Соответственно, они доступны только для чтения, тогда как регистры PORTx и DDRx доступны и для чтения, и для записи. А в микроконтроллере АТ90С8534 регистр выводов порта вообще отсутствует, т.к. единственный порт этой модели является только портом вывода.
Рисунок 3.4 - Структурная схема канала PD1 микроконтроллера AT90S4434
WP - Запись в PORTD; WD -Запись в DDRD; RL -Чтение регистра-защелки порта; RP -Чтение состояния вывода порта; RD -Чтение регистра DDRD; TXD - UАRТ.передаваемые данные; TXEN- UART разрешение передачи
Таблица 3.2
Адреса регистров портов ввода/вывода
Порт |
Название регистра |
Адрес |
AT9BS1200 |
AT90S2313 |
AT90S/LS2323 AT90S/LS2343 |
AT90S/LS2333 AT90S/LS4433 |
AT90S/LS4434 AT90S/LS8535 |
AT90S4414 AT90S8515 |
АТ90С8534 |
|
А |
PORTA |
$1B ($3B) |
0 |
0 |
0 |
|||||
DDRA |
$1A ($3A) |
0 |
0 |
0 |
||||||
P1NA |
$19 ($39) |
0 |
0 |
|||||||
В |
PORTB |
$I8 ($38) |
0 |
0 |
0 |
0 |
0 |
0 |
||
DDRB |
$17 ($37) |
0 |
0 |
0 |
0 |
0 |
0 |
|||
PINB |
$16 ($36) |
0 |
0 |
0 |
0 |
0 |
0 |
|||
С |
PORTC |
$15 ($35) |
0 |
0 |
0 |
|||||
DDRC |
$14 ($34) |
0 |
0 |
0 |
||||||
PINC |
$13 ($33) |
0 |
0 |
0 |
||||||
D |
PORTD1 |
$12 ($32) |
0 |
0 |
0 |
0 |
0 |
|||
DDRD |
$11 ($31) |
0 |
0 |
0 |
0 |
0 |
||||
PIND |
$10 ($30) |
0 |
0 |
0 |
0 |
0 |
Порядковый номер вывода порта соответствует, разумеется, порядковому номеру разряда регистров этого порта. Поэтому если разрядность порта меньше восьми, в регистрах порта используется соответствующее число младших разрядов. Незадействованные старшие разряды регистров доступны только для чтения и всегда содержат "0".
Таким образом, запись в порт означает запись требуемого состояния для каждого вывода порта в соответствующий регистр данных порта РORTx. А чтение состоянии порта выполняется чтением либо регистра данных порта PORTx, либо регистра выводов порта PINx. При чтении регистра выводов порта PINx происходит считывание логических уровней сигналов, присутствующих на выводах порта. А при чтении регистра данных порта PORTx происходит считывание данных, находящихся в регистре защелке порта. Причем сказанное справедливо как для входных, так и для выходных контактов.
Контрольное чтение состояния выводов порта PINx после записи в порт (запись в регистр PORTx) необходимо выполнить с задержкой, учитывающей емкостную нагрузку на выводах порта. Это можно выполнить с помощью одной или двух команд пустых команд NOP.
3.3.3 Конфигурирование портов ввода/вывода
Как уже было отмечено, порты имеют всего две возможности по конфигурированию:
- задание направления передачи данных (вход или выход);
- подключение/отключение внутреннего подтягивающего резистора.
Направление передачи данных определяется содержимым регистра передачи данных DDRx. Если разряд DDRхn - этого регистра установлен в "1", соответствующий n-й вывод порта является выходом. Если же разряд DDRxn этого регистра сброшен в "0", соответствующий вывод порта является входом.
А вот управление подтягивающим резистором осуществляется с помощью регистра данных порта PORTx. Если разряд Рхn регистра PORTx установлен в "1" и соответствующий вывод порта является входом, между этим выводом и проводом питания подключается подтягивающий резистор. Чтобы отключить подтягивающий резистор, необходимо либо сбросить соответствующий разряд регистра PORTx, либо сделать вывод порта выходом.
Таблица 3.3
Влияние регистров DDRx и PORTx на конфигурацию выводов портов
Разряды регистров |
функции вывода |
Резистор |
Примечание |
||
DDRxn |
PORTxn |
||||
0 |
0 |
вход |
отключен |
Третье состояние |
|
0 |
1 |
вход |
подключен |
При подключении вывода к общему проводу является источником тока |
|
1 |
0 |
выход |
отключен |
Выход установлен в "0" |
|
1 |
1 |
выход |
отключен |
Выход установлен в "1" |
|
Примечание: |
n= 7. . . 0 номер вывела (разряд порта). |
3.3.4 Примеры конфигурирования
Предположим, что все выводы 8-разрядного порта А определены как выходы и требуется установить младшие 4 разряда в "1", а старшие 4 разряда - в "0". Это можно осуществить путем записи в этот порт соответствующего значения, как показано ниже.
; Программа вывода числа 0Fh из порта А
include "8515def.inc"
rjmpRESET ;Reset Handle
;-
RESET:
;задание направления передачи
ldi r0,$FF ;запись числа FFh в регистр r0
out DDRA,r0;запись числа FFh в регистр DDRA
;запись числа 0Fh в порт А
ldi r0,$0F;запись числа 0Fh в регистр r0
out PORTA,r0;запись числа 0Fh в порт А (0..3=«1», 4. .7=«0»)
Теперь предположим, что все выводы порта А определены как входы и требуется узнать их состояние. Это осуществляется следующим образом:
;Программа чтения состояния выводов порта А
include "8515def.inc"
rjmpRESET ;Reset Handle
;-
RESET:
;задание направления передачи
ldi r0,$FF
out DDRA,r0
;запись числа 0Fh в порт А
ldi r0,$0F ;запись числа 0Fh в регистр r0
out PORTA,r0;запись числа 0Fh в порт А (0..3=«1», 4. .7=«0»)
;формирование задержки
nop;пустая операция
inr0,PINA;в регистре r0 - сигналы на выводах порта А
Приведенные примеры сознательно упрощены. Все выводы используются либо только как входы, либо только как выходы. Разумеется, можно задать конфигурацию каждого вывода независимо от остальных, так что в одном порту будут находиться одновременно как входы, так и выходы.
3.4 Исследование таймера
Большинство задач управления, которые реализуются с помощью МК, требуют исполнения их в реальном времени. Под этим понимается способность системы получить информацию о состоянии управляемого объекта, выполнить необходимые расчетные процедуры и выдать управляющие воздействия в течение интервала времени, достаточного для желаемого изменения состояния объекта.
Возлагать функции формирования управления в реальном масштабе времени только на центральный процессор неэффективно, так как это занимает ресурсы, необходимые для расчетных процедур. Поэтому в большинстве современных МК используется аппаратная поддержка работы в реальном времени с использованием таймера (таймеров).
Модули таймеров служат для приема информации о времени наступления тех или иных событий от внешних датчиков событий, а также для формирования управляющих воздействий во времени.
Рассмотрим принципы построения и режимы работы таймеров на примере восьмиразрядных универсальных микроконтроллеров AVR семейства Classic.
3.4.1 Таймеры микроконтроллеров AVR семейства Classic
Микроконтроллеры семейства Classic, в зависимости от модели, имеют в своем составе от одного до трех таймеров общего назначения - T0, T1, T2 и один сторожевой таймер WDT, обеспечивающий перезапуск микроконтроллера при зацикливании программ. В таблице 3.4 приведен состав таймеров микроконтроллеров семейства Classic, а в таблице 3.5 - выводы, используемые таймерами.
8-разрядный таймер Т0 имеется во всех моделях. Он может использоваться только для отсчета и измерения временных интервалов или как счетчик внешних событий. При переполнении счетного регистра таймера генерируется запрос на прерывание. 16-разрядный таймер Т1 и 8-разрядный таймер Т2 за счет введения дополнительных аппаратных средств входного захвата (input capture - IС) и выходного сравнения (output compare - ОС) обладают более широкими возможностями реализации алгоритмов реального времени. Эти таймеры также могут использоваться в качестве широтно-импульсных модуляторов. Таймер Т2, кроме того, может работать в асинхронном (относительно тактового сигнала микроконтроллера) режиме.
В микроконтроллере АТ90С8534 8-разрядный таймера/счетчика Т0 и 16-разрядный Т1 функционально идентичны и могут использоваться только для формирования временных интервалов.
Каждый таймер/счетчик (кроме таймеров/счетчиков в АТ90С8534) использует один или более выводов портов ввода/вывода микроконтроллера. При совместном использовании линий портов ввода/вывода с таймерами/счетчиками необходимо самостоятельно сконфигурировать выводы в соответствии с их функциональным назначением (вход/выход).
Таблица 3.4
Таймеры/счетчики реального времени
Таймер/счетчик |
AT90S1200 |
AT90S2313 |
AT90S/ LS2323 AT90S/ LS2343 |
AT90S/ LS2333 AT90S/ LS4433 |
AT90S/ LS4434 AT90S/ LS8535 |
AT90S4414 AT90S8515 |
АТ90С8534 |
|
Таймер/счетчик ТО |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
Таймер/счетчик Т1 |
+ |
+ |
+ |
+ |
+ |
|||
Таймер/счетчик Т2 |
+ |
Таблица 3.5
Выводы, используемые таймерами/счетчиками
Название |
AT90S1200 |
AT90S2313 |
AT90S/LS2323 AT90S/LS2343 |
AT90S/LS2333 AT90S/LS4433 |
AT90S/LS4434 AT90S/LS8535 |
AT90S4414 AT90S8515 |
Описание |
|
ТО |
PD4 |
PD4 |
РВ2 |
PD4 |
РВО |
РВО |
Вход внешнего сигнала таймера ТО |
|
Т1 |
-- |
PD5 |
-- |
PD5 |
PBI |
РВ1 |
Вход внешнего сигнала таймера Т 1 |
|
IСР |
-- |
PD6 |
-- |
РВО |
PD6 |
ICP* |
Вход захвата таймера Т1 |
|
ОС1 |
-- |
РВЗ |
-- |
РВ1 |
-- |
-- |
Выход схемы сравнения таймера Т1 |
|
ОС1А |
-- |
-- |
-- |
-- |
PD5 |
PD5 |
Тоже |
|
ОС1В |
-- |
-- |
-- |
-- |
PD4 |
ОС 1В* |
Тоже |
|
ОС2 |
-- |
-- |
-- |
-- |
PD7 |
-- |
Выход схемы сравнения таймера Т2 |
|
TOSC1 |
-- |
-- |
-- |
-- |
РС6 |
-- |
Вход для подключения резонатора |
|
TOSC2 |
-- |
-- |
-- |
-- |
РС7 |
-- |
Выход для подключения резонатора |
*Выделенный вывод микроконтроллера (не линия порта ввода/вывода)
3.4.2 Таймер Т0
8-разрядный таймер/счетчик Т0 может использоваться для формирования временных интервалов или для подсчета числа внешних событий. Структурная схема таймера Т0 приведена на рисунке 3.5.
В состав таймера входят: регистр управления (TCCR0); счетный регистр (TCNT0); блок управления таймером. Флаг переполнения счетного регистра таймера T0V0 находится в регистре флагов прерываний таймеров TIFR. Разрешение и запрещение прерываний от таймера Т0 осуществляются установкой/сбросом флага T0IE0 регистра TIMSK.
Счетный регистр таймера TCNT0 доступен в любой момент времени как для чтения, так и для записи. При записи в регистр TCNT0 во время работы таймера счет будет продолжен в следующем за командой записи машинном цикле. После подачи напряжения питания в регистре TCNT0 находится нулевое значение.
Рисунок 3.5 - Структурная схема таймера/счетчика Т0
Разряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Наименование |
- |
- |
- |
- |
- |
CS02 |
CS01 |
CS00 |
|
Чтение(R)/Запись(W) |
R |
R |
R |
R |
R |
R/W |
R/W |
R/W |
|
Начальное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Рисунок 3.6 - Формат регистра TCCRO
При переходе таймера из состояния "$FF" в состояние "$00" устанавливается флаг T0V0 регистра TIFR и генерируется запрос на прерывание. Разрешение прерывания осуществляется установкой в "1" разряда T0IE0 регистра TIMSK при установленном флаге общего разрешения прерываний I регистра SREG.
Таймер Т0 может работать в двух режимах:
1. Режим таймера. В этом режиме на вход таймера поступают импульсы тактового сигнала микроконтроллера (непосредственно или через предделитель).
2. Режим счетчика событий. В этом режиме инкремент содержимого счетного регистра производится по активному фронту сигнала на входе ТО микроконтроллера.
Выбор режима работы (источника тактового сигнала), а также запуск и остановка таймера осуществляются с помощью разрядов CS02...CS00 регистра управления таймером TCCR0 (рисунок 3.6), расположенного по адресу $33 ($53). Соответствие между состоянием этих разрядов и режимом работы таймера/счетчика приведено в таблице 3.6. Остальные разряды регистра доступны только для чтения и содержат "0".
При использовании таймера в режиме счета внешних событий необходимо помнить, что сигнал, присутствующий на выводе Т0, синхронизируется с частотой тактового генератора микроконтроллера (состояние вывода Т0 считывается по нарастающему фронту внутреннего тактового сигнала). Поэтому для обеспечения корректной работы таймера от внешнего сигнала промежуток времени между соседними импульсами должен быть больше периода тактового сигнала микроконтроллера.
Обратите внимание, что инкремент содержимого счетного регистра таймера/счетчика при работе в режиме счета внешних событий производится даже в том случае, если вывод Т0 сконфигурирован как выход. Эта особенность дает пользователю возможность программно управлять процессом счета.
Таблица 3.6
Выбор источника тактового сигнала для таймера ТО
CS02 |
CS01 |
CS00 |
Источник тактового сигнала |
|
0 |
0 |
0 |
Таймер/счетчик остановлен |
|
0 |
0 |
1 |
СК (тактовый сигнал микроконтроллера) |
|
0 |
1 |
0 |
СК/8 |
|
0 |
1 |
1 |
СК/64 |
|
1 |
0 |
0 |
СК/256 |
|
1 |
0 |
1 |
СК/1024 |
|
I |
1 |
0 |
Спадающий фронт импульса на выводе Т0* |
|
1 |
1 |
1 |
Нарастающий фронт импульса на выводе Т0* |
В модели АТ90С8534 значения «110» и «111» разрядов CS02...CS00 зарезервированы (режим счет внешних событий отсутствует).
3.4.3 Таймер Т1
16-разрядный таймер/счетчик Т1 реализует следующие функции:
- формирование временных интервалов (аналогично функции таймера Т0);
- подсчет числа внешних событий (аналогично функции таймера Т0);
- входной захвата (input capture - IС) - сохранение текущего состояния таймера в отдельном РВВ по внешнему сигналу;
- выходного сравнения (output compare - ОС) - формирование прерывания при равенстве содержимого счетного регистра заданному значению;
- генерация ШИМ-сигнала.
Существует три варианта рассматриваемого таймера/счетчика в зависимости от модели микроконтроллера. Рассмотрим структуру таймера Т1 микроконтроллера AT90S8515 (рисунок 3.7).
В состав таймера входят четыре 16-разрядных регистра (счетный регистр TCNT1, регистр захвата ICR1, регистры сравнения OCR1А и OCR1В), 16-разрядный компаратор, два 8-разрядных управляющих регистра TCCR1А и TCCR1B, а также блок управления таймером.
Два других варианта имеют сокращенный набор устройств.
Все флаги состояния таймера/счетчика (переполнения, совпадения и захвата) находятся в регистре флагов прерываний от таймеров TIFR, а разрешение/запрещение прерываний от таймера осуществляется установкой/сбросом соответствующих флагов регистра TIMSK.
Счетный регистр таймера Т1 реализован как суммирующий (в режиме ШИМ -- как суммирующий/вычитающий) счетчик и доступен в любой момент времени как для чтения, так и для записи. При записи в регистр TCNT1 во время работы таймера счет будет продолжен по следующему за операцией записи импульсу тактового сигнала таймера/счетчика. После подачи напряжения питания в регистре TCNT1 находится нулевое значение.
Рисунок 3.7 - Структурная схема таймера Т1. Примечание: Позиции разрядов регистров TIMSK и TIFR показаны условно
Физически регистр TCNT1 размещен в двух регистрам TCNT1H:TCNT1L, расположенных по адресам $2D:$2C (адреса в адресном пространстве ОЗУ, соответственно, $4D:$4C). Чтобы при обращении ЦПУ микроконтроллера к этим регистрам запись или чтение обоих байтов содержимого счетного регистра происходило одновременно, обращение производится с использованием специального 8-разрядного регистре TEMP (этот регистр используется только процессором и программно недоступен). Этот же регистр используется и при обращении к остальным 16-разрядным регистрам таймера/счетчика Tl: OCR1 (OCR1A и OCR1B) и ICR1. Прерывания на время обращения к любому из этих регистров должны быть запрещены.
Запись в регистр TCNT1.При записи старшего байта значения в регистр TCNT1H он помещается в регистр TEMP. Далее, при записи младшего байта в регистр TCNT1L он объединяется с содержимым регистра TEMP и оба байта записываются в регистр TCNT1 одновременно. Из сказанного видно, что для выполнения полного цикла записи в 16-разрядный регистр первым должен быть загружен старший байт (регистр TCNT1H).
Чтение регистра TCNT1. При чтении регистра TCNT1L (младший байт) содержимое регистра TCNT1H пересылается в регистр TEMP. А при последующем чтении регистра TCNT1H возвращается значение, сохраненное в регистре TEMP. Следовательно, для выполнения полной операции чтения 16-разрядного регистра первым должен быть прочитан младший байт (регистр TCNT1L).
Управление таймером/счетчиком Т1 осуществляется с помощью двух регистров управления TCCR1A и TCCR1B (в модели АТ90С8534 -- с помощью одного регистра TCCR1). Эти регистры расположены по адресам $2F ($4F) (регистр TCCR1A) и $2Е ($4Е) (регистры TCCR1B, TCCR1).
Формат регистра TCCR1A приведен на рисунке 3.8, а регистров TCCR1B и TCCR1 -- на рисунке 3.9. Неиспользуемые разряды регистров доступны только для чтения.
Разряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
AT90S/LS4434 AT90S/LS8535 AT90S4414 AT90S8515 |
|
Наименов. |
СОМ1А1 |
СОМ1АО |
СОМ1А1 |
СОМ1АО |
- |
- |
PWM11 |
PWM10 |
||
Чтен.(R)/Зап.(W). Нач. значение |
R/W0 |
R/W0 |
R/W0 |
R/W0 |
R0 |
R0 |
R/W0 |
R/W0 |
Рисунок 3.8 - Формат регистра TCCR1A
Разряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Наименование |
ICNCI |
ICES1 |
- |
- |
CTC1 |
CS12 |
CS11 |
CS10 |
|
Чтение(R)/Запись(W) Начальное значение |
R/W0 |
R/W0 |
R0 |
R0 |
R/W0 |
R/W0 |
R/W0 |
R/W0 |
а)
Разряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Наименование |
- |
- |
- |
- |
CTC1 |
CS12 |
CS11 |
CS10 |
|
Чтение(R)/Запись(W)Начальное значение |
R0 |
R0 |
R0 |
R0 |
R/W0 |
R/W0 |
R/W0 |
R/W0 |
б)
Рисунок 3.9 -Формат регистров: а -- TCCR1В; б -- TCCR1
По отношению к тактовому сигналу таймер/счетчик Т1 может работать в двух режимах:
1. Режим таймера. В этом режиме на вход таймера/счетчика поступают импульсы тактового сигнала микроконтроллера (непосредственно или через предделитель).
2. Режим счетчика событий. В этом режиме инкремент содержимого I счетного регистра производится по активному фронту сигнала на входе Т1 микроконтроллера. Выбор источника тактового сигнала, а также запуск и остановка таймера/счетчика осуществляются с помощью разрядов CS12...CS10 регистр управления таймером TCCR IB (таблица 3.7).
При использовании внешнего тактового сигнала необходимо помнить, что он синхронизируется с частотой тактового генератора микроконтроллера (состояние вывода Т1 считывается по нарастающему фронту внутреннего тактового сигнала). Поэтому для обеспечения корректной работы таймера от внешнего сигнала промежуток времени между соседними импульсами должен быть больше периода тактового сигнала микроконтроллера.
Таблица 3.7
Выбор источника тактового сигнала для таймера Т1
Регистр TCCR1В (TCCR1) |
Источник тактового сигнала |
|||
CS12 |
CS11 |
CS10 |
||
0 |
0 |
0 |
Таймер/счетчик остановлен |
|
0 |
0 |
1 |
СК (тактовый сигнал микроконтроллера) |
|
0 |
1 |
0 |
СК/8 |
|
0 |
1 |
1 |
СК/64 |
|
1 |
0 |
0 |
СК/256 |
|
1 |
0 |
1 |
СК/1024 |
|
1 |
1 |
0 |
Вывод Т1, инкремент счетчика - по спадающему фронту импульсе* |
|
1 |
1 |
1 |
Вывод Т1, инкремент счетчика - по нарастающему фронту импульсе* |
*В модели АТ90С8534 значения «110» и «111» разрядов CS12...CS10 зарезервированы (режим счета внешних событий отсутствует).
При использовании внешнего тактового сигнала инкремент содержимого счетного регистра таймера/счетчика производится даже в том случае, если вывод Т1 сконфигурирован как выход. Эта особенность дает пользователю возможность программно управлять процессом счета.
Режим таймера
Принцип работы таймера Т1 в этом режиме такой же, как и таймера/ счетчика Т0. По каждому импульсу, поступающему на тактовый вход таймера/счетчика, производится инкремент содержимого счетного регистра TCNT1. При переходе таймера/счетчика из состояния "SFFFF" в состояние "$0000" устанавливается флаг T0V1 регистра TIFR и генерируется запрос на прерывание. Разрешение прерывания осуществляется установкой в "1" разряда TOIE1 регистра TIMSK (разумеется, флаг общего разрешения прерываний I регистра SREG также должен быть установлен в "1").
Функция захвата (Capture)
Данная функция заключается в сохранении в определенный момент времени состояния таймера/счетчика в регистре захвата ICR1. Это действие может производиться либо по активному фронту сигнала на выводе IСР микроконтроллера, либо по сигналу от аналогового компаратора. При этом устанавливается флаг ICF1 регистра TIFR генерируется запрос на прерывание. Разрешение прерывания осуществляется установкой в "1" разряда TICIE1 регистра TIMSK.
Упрощенная структурная схема узла, выполняющего данную функцию, приведена на рисунке 3.10.
Рисунок 3.10 - Структурная схема узла захвата
ACIC - разрешение захвата по АСО; АСО - выход компаратора
Для управления схемой захвата используются два разряда регистра TCCR1B: ICNC1 и ICES1. Разряд ICNC1 управляет схемой подавления помех. Если этот разряд сброшен в "0", схема подавления помех выключена и захват производится по первому же активному фронту на выводе ICP микроконтроллера. Если же этот разряд установлен в "1", то при появление активного фронта на выводе ICP производится 4 выборки с частотой, равной тактовой частоте микроконтроллера. Захват будет выполнен только в том случае, если все выборки имеют уровень, соответствующий активному фронту сигнала (лог. "1" для нарастающего и лог. "0" для спадающего).
Активный фронт сигнала, т.е. фронт, по которому будет выполнено сохранение содержимого счетного регистра в регистре захвата, определяется состоянием разряда ICES 1. Если этот разряд сброшен в "0", то активным является спадающий фронт. Если же этот разряд установлен в "1", то активным является нарастающий фронт. Разумеется, вывод ICP должен быть сконфигурирован как входной, т.е. разряд регистра управления портом DDRx, соответствующий данному выводу, должен быть сброшен в "0".
Физически регистр захвата ICR1 размещен в двух регистрах ICR1H:ICR1L, расположенных по адресам $27:$26 (адреса в адресной пространстве ОЗУ соответственно $47:$46) и доступных только для чтения. Поскольку регистр захвата является 16-разрядным, при его чтении используется временный регистр TEMP. При чтении регистра ICR1L (младший байт) содержимое этого регистра пересылается в ЦПУ, а содержимое регистра ICRH (старший байт) сохраняется в регистре TEMP. При чтении регистра ICR1H возвращает значение, сохраненное в регистре TEMP. Следовательно, при чтении регистра ICR1 первым должен быть прочитан регистр ICR1L. Прерывания на время обращения к регистру ICR1 должны быть запрещены.
Функция сравнения (Compare)
Данная функция заключается в непрерывном (каждый машинный цикл) сравнении содержимого счетного регистра таймера/счетчика с числом, находящемся в регистре сравнения. При совпадении содержимого этих регистров устанавливается флаг соответствующего прерывания, а также могут выполняться другие действия.
Количество регистров сравнения, а также их названия отличаются в различных моделях микроконтроллеров (см. таблицу 3.8). Причем в моделях, имеющих по два регистра сравнения, операция сравнения производится независимо для каждого регистра.
Если состояние таймера становится равным числу, находящемуся в регистре сравнения, то в следующем машинном цикле устанавливается соответствующий этому регистру флаг прерывания в регистре TIFR для регистра OCR1 - флаг OCF1, для регистра OCR1A - флаг OCF1A, для регистра OCRIB - флаг OCF1B) и генерируется запрос на прерывание. Разрешение прерываний осуществляется установкой в "1" соответствующих флагов регистра TIMSK (OCIE1, OCIE1A и ОСТЕ1В для регистров OCR1, OCR1A и OCR1B соответственно).
Таблица 3.8
Регистры сравнения таймера/счетчика Т1
Модель |
Регистр сравнения |
||
первый |
второй |
||
T90S2313 |
OCR1A |
||
T90S/LS2333 -T90S/LS4433 |
OCR1 |
||
-T90S/LS4434 -T90S/LS8535 |
OCRIA |
OCR1B |
|
T90S4414/8515 |
OCR1A |
OCR IB |
Наряду с установкой флага в регистре TIFR при равенстве счетного регистра и регистра сравнения могут выполняться и другие действия:
- сброс таймера/счетчика (только для регистров OCR1 и OCR1A);
- изменение состояния определенного вывода микроконтроллера (для всех регистров).
Поведение микроконтроллера, т.е. выполнение или невыполнение указанных действий, определяется несколькими разрядами регистров управления TCCR1A и TCCR1B. Названия этих разрядов и их описание приведены в таблице 3.9. Каждый регистр сравнения размещается в двух регистрах ввода-вывода РВВ:
- OCR1 - OCR1H:OCR1L, адреса $2В:$2А ($4В:$4А);
- OCR1А - OCR1AH:OCR1AL, адреса $2В:$2А ($4В:$4А);
- OCR1B - OCR1BH:OCR1BL, адреса $29:$28 ($49:$48).
Поскольку регистры сравнения являются 16-разрядными, при их чтении и записи используется временный регистр TEMP. При записи регистра сравнения первым должен записываться регистр OCRlxH (старший 5айт), а при чтении первым должен считываться регистр OCRlxL (младший байт). Прерывания на время обращения к регистру сравнения должны быть запрещены.
Режим ШИМ
В этом-режиме таймер Т1 представляет собой одинарный или сдвоенный, в зависимости от модели, широтно-импульсный модулятор. Широтно-импульсная модуляция является одним из видов непрерывной импульсной модуляции, при котором ширина импульса пропорциональна значению модулирующего сигнала. Соответственно в данном случае широтно-импульсная модуляция заключается в генерировании сигнала с программируемыми частотой и скважностью.
Для перевода таймера Т1 в режим ШИМ и задания частоты ШИМ-сигнала используются разряды PWM11:PWM10 регистра управления таймером TCCR1A. Соответствие между состоянием этих разрядов и режимом работы таймера/счетчика Т1 приведено в таблице 3.10.
Таблица 3.9
Управление работой схемы сравнения таймера Т1
Регистр |
Название |
Модель AT90 |
Описание |
||||
TCCR1A |
7,6 |
СОМ1А1, СОМ1АО |
S2313S4434 LS4434 S8535 LS8535 0S4414 S8515 |
Управление выводом ОС1А (ОС1)* микроконтроллераСостояние этих разрядов определяет поведение вывода ОС1А (ОС1) при совпадении содержимого счетного регистра и регистра сравнения OCR1A (OCR1). При изменении состояния этих разрядов соответствующее прерывание от компаратора таймера рекомендуется запретить (во избежание ложной генерации прерывания). Чтобы таймер мог управлять этим выводом, он должен быть сконфигурирован как выходной. Поведение вывода задается следующим образом: |
|||
СОМ11, СОМ10 |
S2333 LS2333 S4433 |
СОМ1А1 (СОМ11) |
СОМ1А0 (СОМ10) |
Описание |
|||
0 |
0 |
Таймер/счетчик Т1 отключен от вывода ОС1А (ОС1) |
|||||
0 |
1 |
Состояние вывода меняется на противоположное |
|||||
1 |
0 |
Вывод сбрасывается в «0» |
|||||
1 |
1 |
Вывод устанавливается в «1» |
|||||
5,4 |
СОМ1В1. СОМ1ВО |
S4434 LS4434 S8535 LS8535 S4414S8515 |
Управление выводом ОС1В микроконтроллераСостояние этих разрядов определяет поведение вывода ОС1В при совпадении содержимого счетного регистра и регистра сравнения OCRIB. При изменении состояния этих разрядов соответствующее прерывание от компаратора таймера рекомендуется запретить (во избежание ложной генерации прерывания). Чтобы таймер мог управлять этим выводом, он должен быть сконфигурирован как выходной. Поведение вывода задается следующим образом: |
||||
СОМ1В1 |
СОМ1ВО |
Описание |
|||||
0 |
0 |
Таймер/счетчик Т1 отключен от вывода ОС1В |
|||||
0 |
1 |
Состояние вывода меняется на противоположное |
|||||
1 |
0 |
Вывод сбрасывается в «0» |
|||||
1 |
1 |
Вывод устанавливается в «1» |
|||||
ТССR1B |
3 |
СТС1 |
Вcе |
Сброс таймера/счетчикаЕсли этот разряд установлен в «1», то при совпадении содержимого счетного регистра и регистра сравнения OCR A (OCR1) производив сброс таймера в состояние «$0000»** |
* Для AT90S2313, AT90S/LS2333 и AT90S/LS2343 -- ОС1,
для AT90S/LS4434, AT90S/LS8535 и AT90S4414/8515 -- ОС1 А.
** Поскольку сброс выполняется в машинном цикле, следующем за тем, во время которого произошло совпадение, поведение таймера зависит от установленного коэффициента деления предделителя таймера (см. табл. 3.7). При коэффициенте деления, равном 1, состояние таймера меняется следующим образом:
... С-2 С-1 С 0 1 ...
а при коэффициенте деления, не равном 1:
...- (С-2, ...,С-2) (С-1,...,С-1) (С, 0, ...,0) ...,
где С -- число, находящееся в регистре сравнения.
Таблица 3.10
Управление режимом ШИМ таймера Т1
Регистр TCCR1A |
Описание |
||
PWM11 |
PWM10 |
||
0 |
0 |
Режим ШИМ таймера/счетчика Т1 выключен |
|
0 |
1 |
8-разрядный широтно-импульсный модулятор |
|
1 |
0 |
9-разрядный широтно-импульсный модулятор |
|
1 |
1 |
1 0-разрядный широтно-импульсный модулятор |
Для генерации сигнала с ШИМ используется схема сравнения таймера, поэтому в моделях AT90S2313, AT90S/LS2333 и АT90S/LS4433 модулятор является одинарным (один регистр сравнения), а в моделях AT90S/LS4434, AT90S/LS8535 и AT90S4414/8515 - сдвоенным (два регистра сравнения).
Сигнал ШИМ снимается с выхода схемы сравнения таймера. В рассматриваемом режиме счетный регистр таймера функционирует как реверсивный счетчик, модуль счета которого (ТОР) зависит от режима работы модулятора. Значение модуля счета и соответствующая частота ШИМ-сигнала для каждого режима работы модулятора приведены в таблице 3.11.
Таблица 3.11
Модуль счета счетного регистра и частота ШИМ-сигнала
Разрешение модулятора |
Модуль счета (ТОР) |
Частота ШИМ-сигнала |
|
8 разрядов |
$00FF (255) |
fТСК1/510 |
|
9 разрядов |
$01FF(511) |
fТСК1/1022 |
|
10 разрядов |
$03FF (1023) |
fТСК1/2046 |
Примечание: fТСК1 - частота тактового сигнала таймера/счетчика Т1.
При работе таймера Т1 в режиме ШИМ состояние счетного регистра изменяется от $000 до значения ТОР, а затем снова до $000 после чего цикл повторяется. При равенстве состояния счетчика и содержимого регистра сравнения состояние соответствующего этому регистру вывода микроконтроллера изменяется согласно таблице 3.12 (рисунок 3.11). Таким образом, длительность импульса равна удвоенному значению содержимого регистра сравнения.
Таблица 3.12
Поведение выходов схемы сравнения в режиме ШИМ
Регистр TCCR1A |
Поведение вывода OClx (OC1) |
||
СОМ1х1 (СОМ11) |
COMlx0 (СОМ10) |
||
0 |
0 |
Таймер/счетчик Т1 отключен от вывода |
|
0 |
1 |
Таймер/счетчик Т1 отключен от вывода |
|
1 |
0 |
Сбрасывается в «0» при прямом счете и устанавливается в « 1» при обратном счете (неинвертированный ШИМ-сигнал) |
|
1 |
1 |
Устанавливается в «1» при прямом счете и сбрасывается в «0» при обратят счете (инвертированный ШИМ-сигнал) |
Примечание: х - А или В.
Соответственно если в счетный регистр записать значение $000 или ТОР, то при следующем совпадении состояния счетчика и содержимого регистра сравнения выход схемы сравнения переключится в устойчивое состояние согласно таблице 3.13.
Таблица 3.13
Устойчивые состояния выхода схемы сравнения
Регистр TCCR1A |
Регистр OCRlx (OCR1) |
Состояние вывода OClx (ОС1) |
||
COMU1 (СОМИ) |
COMUO (СОМ10) |
|||
1 |
0 |
$000 |
0 |
|
1 |
0 |
ТОР |
1 |
|
1 |
1 |
$000 |
1 |
|
1 |
1 |
ТОР |
0 |
Примечание: х -- А или В
Особенностью работы таймера/счетчика Т1 в режиме ШИМ является то, что при записи в регистр сравнения младшие 10 разрядов записываемого числа на самом деле сохраняются в специальном временном регистре (не путать с регистром TEMP). А изменение содержимого регистра сравнения происходит только в момент достижения счетчиком максимального значения (ТОР). Благодаря такому решению исключается появление несимметричных выбросов сигнала на выходе модулятора (помех), которые были бы неизбежны при непосредственной записи в регистр сравнения.
Соответственно при чтении регистра сравнения в промежутке между записью в него и его действительным изменением возвращается содержимое временного регистра. То есть всегда возвращается значение, записанное последним.
При работе таймера Т1 в режиме ШИМ может генерироваться прерывание по переполнению счетного регистра таймера, а также прерывания от схемы сравнения.
Рисунок 3.11 - Формирование ШИМ-сигнала
Рисунок 3.12 - Структурная схема сторожевого таймера
Флаги прерываний устанавливаются в «1» при изменении счетчиком направления счета: флаг TOV1 - в точке $000, а флаги OCF1 (для регистра OCR1), OCF1A (для регистра OCR1A) и OCF1B (для регистра OCRIB) - в точке TOР. Разрешение и обработка соответствующих прерываний выполняются как обычно.
3.4.4 Сторожевой таймер (WATCHDOG)
Основная функция сторожевого таймера - защита устройства от сбоев. Благодаря сторожевому таймеру можно прервать выполнение зациклившейся программы или выйти из других непредвиденных ситуаций, препятствующих нормальному выполнению программы.
Структурная схема сторожевого таймера приведена на рисунке 3.12.
Сторожевой таймер имеет независимый генератор, поэтому он работает даже во время нахождения микроконтроллера в режиме Power Down. Частота этого генератора зависит от напряжения питания устройства, температуры, технологического разброса. Типовое значение частоты равно 1 МГц при fcc = 5.0 В и 350 кГц при Vcc = 3.0 В.
Если сторожевой таймер включен, то через определенные промежутки времени (при наступлении тайм-аута) выполняется сброс микроконтроллера. Чтобы избежать сброса микроконтроллера при нормальном выполнении программы, сторожевой таймер необходимо регулярно сбрасывать через промежутки времени, меньше его периода. Сброс сторожевого таймера осуществляется командой WDR.
Для управления сторожевым таймером предназначен регистр WDTCR, расположенный по адресу $21 ($41). Формат этого регистра приведен на рисунке 3.13.
Разряд |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Наименование |
- |
- |
- |
WDTOE |
WDE |
WDP2 |
WDP1 |
WDP0 |
|
Чтение(R)/Запись(W) |
R |
R |
R |
R/W |
R/W |
R/W |
R/W |
R/W |
|
Начальное значение |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Рисунок 3.13 - Формат регистра WDTCR
Для включения/выключения сторожевого таймера используются два разряда регистра WDTCR - WDE и WDTOE. Если разряд WDE установлен в "1", сторожевой таймер включен, если сброшен в "0" - выключен. Непосредственно перед включением таймера рекомендуется также выполнять его сброс командой WDR.
Чтобы избежать непреднамеренного выключения таймера счетчика, предназначен разряд WDTOE. Дело в том, что выключение сторожевого таймера (сброс разряда WDE) можно осуществить только при установленном разряде WDTOE. Причем через 4 машинных цикла после установки в "1" этот разряд аппаратно сбрасывается, благодаря чему практически исчезает возможность случайного выключения сторожевого таймера.
Исходя из сказанного, для выключения сторожевого таймера рекомендуется следующая последовательность действий:
- одной командой записать лог. "1" в разряды WDE и WDTOE;
- в течение следующих четырех машинных циклов записать лог. "0" в разряд WDE.
Период наступления тайм-аута сторожевого таймера задается с помощью разрядов WDP2...WDP0 регистра WDTCR согласно таблицы 3.14.
Чтобы избежать непреднамеренного сброса микроконтроллера при изменении периода сторожевого таймера, необходимо перед записью разрядов WDP2:WDP0 либо запретить работу сторожевого таймера, либо сбросить его.
Таблица 3.14
Задание периода сторожевого таймера
WDP2 |
WDP1 |
WDPO |
Число тактов генератора |
Период наступления тайм-аута (типовое значение) |
||
Vcc =3.0 В |
Vcc = 5.0 В |
|||||
0 |
0 |
0 |
16-1024 |
47 мс |
15 мс |
|
0 |
0 |
1 |
32-1024 |
91 мс |
30 мс |
|
0 |
1 |
0 |
64-1024 |
0.19с |
60 мс |
|
0 |
1 |
1 |
128-1024 |
0.38с |
0.12с |
|
1 |
0 |
0 |
256-1024 |
0.75с |
0.24с |
|
1 |
0 |
1 |
512-1024 |
1.5с |
0.49с |
|
1 |
1 |
0 |
1024-1024 |
3.0с |
0.97с |
|
1 |
1 |
1 |
2048-1024 |
6.0с |
1.9с |
3.4.5 Формирование временных интервалов
Для программирования временных интервалов необходимо загрузить в счетчик соответствующее значение и определить коэффициент деления предделителя. Для расчета величины временной задержки используется формула (при однократном запуске таймера):
,
где n - разрядность счетчика соответствующего таймера; АInit - начальная установка таймера; k - коэффициент деления предделителя; F - частота генератора микроконтроллера.
Значение начальной установки таймера, которое необходимо загрузить в счетчик, определяется по формуле:
.
При этом точность формирования временного интервала определяется отношением .
Рассмотрим пример программы формирования временного интервала с использованием восьмиразрядного таймера Т0 микроконтроллера AT90S8515 (n = 8).
Пусть требуется получить интервал Т = 1.5 мкс. Тогда начальная установка таймера АInit будет равна
или в шестнадцатеричной системе счисления - FA.
3.4.6 Программа формирования временного интервала
;Программа формирования временного интервала
;-
.include "8515def.inc"
rjmp RESET ;Reset Handle
;-
.ORG $7;вектор прерывания по переполнению таймера Т0
rjmp TIME0
RESET:
.def temp = r16
ldi temp, low(RAMEND);инициализируем указатель стека
out SPL, temp
ldi temp, high(RAMEND)
out SPH,temp
sei ;установка глобального флага прерываний
ldi r17,256-6;запись числа Аinit в регистр r17
out TCNT0,r17
ldi r17,2;разрешение прерывания от таймера Т0
out TIMSK,r17
sbi DDRA,0;установка вывода PORTA.0 на вывод
ldi r17,1;пуск счетчика путем записи кода (001)2 в разряды
out TCCR0,r17;CS02...CS00 регистра управления таймером TCCR0
sbi PORTA,0;установка вывода PORTA.0 в состояние"1"
nop;произвольная программа (пустые команды)
nop
nop
nop
nop
rjmp RESET1
;Подпрограмма обработки прерывания по переполнению счетчика таймера Т0
TIME0:
cbi PORTA,0;сброс вывода PORTA.0 в состояние"0"
cli;глобальное запрещение прерываний
ldi r17,0
out TIMSK,r17 ; запрещение прерываний от таймера Т0
out TCCR0,r17;остановка счетчика таймера Т0
reti;выход из подпрограммы
RESET1:
4. Задание на проведение исследований
Исследование команд и отдельных узлов микроконтроллера выполняется по следующему алгоритму:
1. Изучите теоретический материал по соответствующей теме и программ исследования, а также получите задание на проведение исследования.
2. Составьте программу на ассемблере для исследования.
3. Откройте среду разработки AVR Studio.
4. Создайте новый проект для исследования.
5. Наберите текст программы в окне ассемблера или откройте файл с текстом программы в AVR Studio.
6. Откомпилируйте программу.
7. Запустите выполнение программы и пронаблюдайте за изменением содержимого регистров и портов.
8. Выведите на экран окна просмотра содержимого регистров и портов.
9. Остановите выполнение программы и сохраните проект.
10. Оформите отчет, в котором должны быть:
10.1 название; цель работы;
10.2 краткие теоретические сведения об объекте исследования (схемы, таблицы, логика работы);
10.3 листинг программы с комментариями, а также состояние задействованных регистров на каждом шаге выполнения программы;
10.4 выводы по работе.
Литература
1. Микропроцессорные системы: Учебное пособие для вузов / Александров Е.К., Грушвицкий Р.И., Куприянов М.С. и др.; Под общ. ред. Пузанкова Д.В. - СПб.: Политехника, 2002. - 935 с.: ил.
2. Основы микропроцессорной техники / Новиков Ю.В., Скоробогатов П.К. / М.: ИНТУИТ.РУ. "Интернет-Университет Информационных технологий", 2003. - 440 с.: ил.
3. Кривченко И. AVR - микроконтроллеры: очередной этап на пути развития
4. Ефстифеев А.В. Микроконтроллеры AVR семейства Classic фирмы "Atmel". М.: Издательский дом "Додека - XXI", 2002. - 288 с.: ил.
5. Голубцов М.С. Микроконтроллеры AVR: от простого к сложному, М. 2003. - 456 с.
6. Основы микропроцессорной техники / Новиков Ю.В., Скоробогатов П.К. / М.
Приложение
Таблица П.1
РВВ моделей AT90S1200, AT90S2313, AT90S/LS2323 и AT90S/LS2343
Название |
Функция |
Адрес |
|||
AT90S1200 |
AT90S2313 |
AT90S/LS2323AT90S/LS2343 |
|||
ACSR |
Регистр управления и состояния аналогового компаратора |
$08 |
$08 ($28) |
||
DDRB |
Регистр направления данных порта В |
$17 |
$17 ($37) |
$17 ($37) |
|
DDRD |
Регистр направления данных порта D |
$11 |
$11 ($31) |
-- |
|
EEAR |
Регистр адреса EEPROM |
$1Е |
$1Е($ЗЕ) |
$1Е($ЗЕ) |
|
EECR |
Регистр управления EEPROM |
$1С |
$1С ДОС) |
$1С ($30 |
|
EEDR |
Регистр данных EEPROM |
$10 |
$1D ($3D) |
$10 ($30) |
|
GIFR |
Общий регистр флагов прерываний |
-- |
$ЗА ($5А) |
$ЗА ($5А) |
|
GIMSK |
Общий регистр маски прерываний |
$3B |
$ЗВ ($5В) |
$ЗВ ($5В) |
|
ICR1H |
Регистр захвата таймера/счетчика 1 (старший байт) |
-- |
$25 ($45) |
-- |
|
ICR1L |
Регистр захвата таймера/счетчика 1 (младший байт) |
-- |
$24 ($44) |
-- |
|
MCUCR |
Общий регистр управления микроконтроллером |
$35 |
$35 ($55) |
$35 ($55) |
|
MCUSR |
Регистр состояния микроконтроллера |
-- |
-- |
$34 ($54) |
|
OCR1AH |
Регистр совпадения выхода 1 (старший байт) |
-- |
$2В (4В) |
-- |
|
OCRIAL |
Регистр совпадения выхода 1 (младший байт) |
-- |
$2А (4А) |
-- |
|
PINB |
Выводы порта В |
$15 |
$16 ($36) |
$16 ($36) |
|
PIND |
Выводы порта D |
$10 |
$10 ($30)- |
||
PORTB |
Регистр данных порта В |
$18 |
$18 ($38) |
$18 ($38) |
|
PORTD |
Регистр данных порта D |
$12 |
$12 ($32) |
-- |
|
SPL |
Указатель стека |
-- |
$30 ($50) |
$30 ($50) |
|
SREG |
Регистр состояния |
$3F |
$3F ($5F) |
$3F ($5F) |
|
TCCR0 |
Регистр управления таймером/счетчиком 0 |
$33 |
$33 ($53) |
$33 ($53) |
|
TCCR1A |
Регистр управления А таймером/счетчиком 1 |
-- |
$2F ($4F) |
-- |
|
TCCR1B |
Регистр управления В таймером/счетчиком 1 |
-- |
$2Е ($4Е) |
-- |
|
TCNT0 |
Счетный регистр таймера/счетчика 0 (8-разрядный) |
$32 |
$32 ($52) |
$32 ($52) |
|
TCNT1H |
Счетный регистр таймера/счетчика 1 |
-- |
$20 ($40) |
-- |
|
TCNT1L |
Счетный регистр таймера/счетчика 1 (млад. байт) |
-- |
$2С ($4С) |
-- |
|
TIFR |
Регистр флагов прерываний от таймера/счетчика |
$38 |
$38 ($58) |
$38 ($58) |
|
TIMSK |
Регистр маски прерываний от таймера/счетчика |
$39 |
$39 ($59) |
$39 ($59) |
|
UBRR |
Регистр скорости передачи UART |
-- |
$09 ($29) |
-- |
|
UCR |
Регистр управления UART |
-- |
$ОА ($2А) |
-- |
|
UDR |
Регистр данных UART |
-- |
$ОС ДОС) |
-- |
|
USR |
Регистр состояния UART |
-- |
$ОВ ($2В) |
-- |
|
WDTCR |
Регистр управления сторожевым таймером |
$21 |
$21 ($41) |
Таблица П.2
РВВ моделей AT90S/LS2333 и AT90S/LS4433
Название |
Функция |
Адрес |
|
AT90S/LS2333 AT90S/LS4433 |
|||
ACSR |
Регистр управления и состояния аналогового компаратора |
$08 ($28) |
|
ADCH |
Регистр данных АЦП (старший байт) |
$05 ($25) |
|
ADCL |
Регистр данных АЦП (младший байт) |
$04 ($24) |
|
ADCSR |
Регистр управления и состояния АЦП |
$06 ($26) |
|
ADMUX |
Регистр управления мультиплексором АЦП |
$07 ($27) |
|
DDRB |
Регистр направления данных порта В |
$17 ($37) |
|
DDRC |
Регистр направления данных порта С |
$14 ($37) |
|
ODRD |
Регистр направления данных порта D |
$11 ($31) |
|
EEAR |
Регистр адреса EEPROM |
$1Е($ЗЕ) |
|
EECR |
Регистр управления EEPROM |
$1С($ЗС) |
|
EEDR |
Регистр данных EEPROM |
$10 ($30) |
|
GIFR |
Общий регистр флагов прерываний |
$ЗА (S5A) |
|
GIMSK |
Общий регистр маски прерываний |
$ЗВ ($5В) |
|
ICR1H |
Регистр захвата таймера/счетчика 1 (старший байт) |
$27 ($47) |
|
1CR1L |
Регистр гахвата таймера/счетчика 1 (младший байт) |
$26 ($46) |
|
MCUCR |
Общий регистр управления микроконтроллером |
$35 ($55) |
|
OCR1H |
Регистр совпадения выхода 1 (старший байт) |
$2В ($4В) |
|
OCR1L |
Регистр совпадения выхода 1 (младший байт) |
$2А ($4А) |
|
P1NB |
Выводы порта В |
$16 ($36) |
|
P1NC |
Выводы порта С |
$13 ($36) |
|
PIND |
Выводы порта D |
$10 ($30) |
|
PORTB |
Регистр данных порта В |
$18 ($38) |
|
PORTC |
Регистр данных порта С |
$15 ($38) |
|
PORTD |
Регистр данных порта D 0 |
$12 ($32) |
|
SP |
Указатель стека |
$30 ($50) |
|
SPCR |
Регистр управления SPI |
$00 ($20) |
|
SPDR |
Регистр данных SPI |
$OF ($2F) |
|
SPSR |
Регистр состояния SPI |
$ОЕ ($2Е) |
|
SREG |
Регистр состояния |
$3F ($5F) |
|
TCCRO |
Регистр управления таймером/счетчиком 0 |
$33 ($53) |
|
TCCR1A |
Регистр управления А таймером/счетчиком 1 |
$2F ($4F) |
|
TCCR1B |
Регистр управления В таймером/счетчиком 1 |
$2E ($4E) |
|
TCNTO |
Счетный регистр таймера/счетчика 0 (8-разрядный) |
$32 ($52) |
|
TCNT1H |
Счетный регистр таймера/счетчика 1 |
$20 ($40) |
|
TCNT1L |
Счетный регистр таймера/счетчика 1 (младший байт) |
$2C ($4C) |
|
T1FR |
Регистр флагов прерываний от таймера/счетчика |
$38 ($58) |
|
TIMSK |
Регистр маски прерываний от таймера/счетчика |
$39 ($59) |
|
UBRR |
Регистр скорости передачи UART (младший байт) |
$09 ($29) |
|
UBRRHI |
Регистр скорости передачи UART (старший байт) |
$03 ($23) |
|
UCR |
Регистр управления UART |
$OA ($2A) |
|
UDR |
Регистр данных UART |
$ОС ($20) |
|
USR |
Регистр состояния UART |
$ОВ ($2В) |
|
WDTR |
Регистр управления сторожевым таймером |
$21 ($41) |
Таблица П.3
РВВ моделей AT90S/LS4434, AT90S/LS8535, AT90S4414 и AT90S8515
Название |
Функция |
Адрес |
||
AT90S/LS4434 AT90S/LS8535 |
AT90S4414 AT90S8515 |
|||
1 |
2 |
3 |
4 |
|
ACSR |
Регистр управления и состояния аналог. компаратора |
$08 ($28) |
$08 ($28) |
|
ADCH |
Регистр данных АЦП (старший байт) |
$05 ($25) |
-- |
|
ADCL |
Регистр данных АЦП (младший байт) |
$04 ($24) |
-- |
|
ADCSR |
Регистр управления и состояния АЦП |
$06 ($26) |
-- |
|
ADMUX |
Регистр управления мультиплексором АЦП |
$07 ($27) |
-- |
|
ASSR |
Регистр состояния асинхронного режима |
$22 ($42) |
-- |
|
DDRA |
Регистр направления данных порта А |
$1А($ЗА) |
$1А($ЗА) |
|
DDRB |
Регистр направления данных порта В |
$17 ($37) |
$17 ($37) |
|
DDRC |
Регистр направления данных порта С |
$14 ($37) |
$14 ($37) |
|
ODRD |
Регистр направления данных порта D |
$11 ($31) |
$11 ($31) |
|
EEARH |
Регистр адреса EEPROM (старший байт) |
$1F($3F) |
$1F($3F) |
|
EEARL |
Регистр адреса EEPROM (младший байт) |
$1Е($ЗЕ) |
$1Е($ЗЕ) |
|
EECR |
Регистр управления EEPROM |
$1С($ЗС) |
$1С($ЗС) |
|
EEDR |
Регистр данных EEPROM |
$1D ($3D) |
$1D ($3D) |
|
GIFR |
Общий регистр флагов прерываний |
$ЗА ($5А) |
$ЗА ($5А) |
|
GIMSK |
Общий регистр маски прерываний |
$ЗВ ($5В) |
$ЗВ ($5В) |
|
ICR1H |
Регистр захвата таймера/счетчика 1 (стар. байт) |
$27 ($47) |
$25 ($45) |
|
1CR1L |
Регистр захвата таймера/счетчика 1 (млад. байт) |
$26 ($46) |
$24 ($44); |
|
MCUCR |
Общий регистр управления микроконтроллером |
$35 ($55) |
$35 ($55) |
|
MCUSR |
Регистр состояния микроконтроллера |
$34 ($54) |
||
OCRIAH |
Регистр совпадения выхода А (старший байт) |
$2В ($4В) |
$2В ($4В) |
|
OCR1AL |
Регистр совпадения выхода А (младший байт) |
$2А ($4А) |
$2А ($4А) |
|
OCRIBH |
Регистр совпадения выхода В (старший байт) |
$29 ($49) |
$29 ($49) |
|
OCRIBL |
Регистр совпадения выхода В (младший байт) |
$28 ($48) |
$28 ($48) |
|
OCR2 |
Регистр совпадения выхода таймера/счетчика 2 |
$23 ($43) |
-- |
|
P1NA |
Выводы порта А |
$19 ($39) |
$19 ($39) |
|
PINB |
Выводы порта В |
$16 ($36) |
$16 ($36) |
|
PINC |
Выводы порта С |
$13 ($36) |
$13 ($36) |
|
PIND |
Выводы порта D |
$10 ($30) |
$10 ($30) |
|
PORTA |
Регистр данных порта А |
$1В ($ЗВ) |
$1В ($ЗВ) |
|
PORТВ |
Регистр данных порта В |
$18 ($38) |
$18 ($38) |
|
PORTC |
Регистр данных порта С |
$15 ($38) |
$15 ($38) |
|
PORTD |
Регистр данных порта D |
$12 ($32) |
$12 ($32) |
|
SPCR |
Регистр управления SPI |
$0D ($2D) |
$0D ($2D) |
|
SPDR |
Регистр данных SPI |
$0F ($2F) |
$0F ($2F) |
|
SPH |
Указатель стека (старший байт) |
$3E ($5E) |
$3E ($5E) |
|
SPL |
Указатель стека (младший байт) |
$3D ($5D) |
$3D ($5D) |
|
SPSR |
Регистр состояния SPI |
$0E ($2E) |
$0E ($2E) |
|
SREG |
Регистр состояния |
$3F ($5F) |
$3F ($5F) |
|
TCCRO |
Регистр управления таймером/счетчиком 0 |
$33 ($53) |
$33 ($53) |
|
TCCR1A |
Регистр управления А таймером/счетчиком 1 |
$2F ($4F) |
$2F ($4F) |
|
TCCR1B |
Регистр управления В таймером/счетчиком 1 |
$2E ($4E) |
$2E ($4E) |
|
TCCR2 |
Счетный регистр таймера/счетчика 2 |
$25 ($45) |
-- |
|
TCNTO |
Счетный регистр таймера/счетчика 0 (8-разрядный) |
$32 ($52) |
$32 ($52) |
|
TCNT1H |
Счетный регистр таймера/счетчика 1 |
$2D (S4D) |
$2D ($4D) |
|
TCNT1L |
Счетный регистр таймера/счетчика 1 (младший байт) |
$2C (S4C) |
$2C ($4C) |
|
TCNT2 |
Счетный регистр таймера/счетчика 2 (8-разрядный) |
$24 ($44) |
-- |
|
TIFR |
Регистр флагов прерываний от таймера/счетчика |
$38 ($58) |
$38 ($58) |
|
TIMSK |
Регистр маски прерываний от таймера/счетчика |
$39 ($59) |
$39 ($59) |
|
UBRR |
Регистр скорости передачи UART |
$09 ($29) |
$09 ($29) |
|
UCR |
Регистр управления UART |
$0A ($2A) |
$0A ($2A) |
|
UDR |
Регистр данных UART |
$0C ($2C) |
S0C ($2C) |
|
USR |
Регистр состояния UART |
$0B ($2B) |
S0B ($2B) |
|
WDTCR |
Регистр управления сторожевым таймером |
$21 ($41) |
$21 ($41) |
Таблица П.4
РВВ модели АТ90С8534
Название |
Функция |
Адрес |
|
АТ90С8534 |
|||
ADCH |
Регистр данных АЦП (старший байт) |
$05 ($25) |
|
ADCL |
Регистр данных АЦП (младший байт) |
$04 ($24) |
|
ADCSR |
Регистр управления и состояния АЦП |
$06 ($26) |
|
ADMUX |
Регистр управления мультиплексором АЦП |
$07 ($27) |
|
DORA |
Регистр направления данных порта А |
$1А ($ЗА) |
|
EEARH |
Регистр адреса EEPROM (старший байт) |
$1F($3F) |
Подобные документы
Понятие и виды микроконтроллеров. Особенности программирования микропроцессорных систем, построение систем управления химико-технологическим процессом. Изучение архитектуры микроконтроллера ATmega132 фирмы AVR и построение на его основе платформы Arduino.
курсовая работа [1,9 M], добавлен 13.01.2011Микроконтроллеры - микросхемы, предназначенные для управления электронными устройствами, их классификация. Структура процессорного ядра микроконтроллеров, основные характеристики, определяющие его производительность. CISC и RISC архитектура процессора.
курсовая работа [43,2 K], добавлен 03.10.2010Семейство 16-разрядных микроконтроллеров Motorola 68HC12, их структура и функционирование. Модуль формирования ШИМ-сигналов. Средства отладки и программирования микроконтроллеров 68НС12. Особенности микроконтроллеров семейства MCS-196 фирмы INTEL.
курсовая работа [239,6 K], добавлен 04.01.2015Использование микроконтроллеров AVR фирмы Atmel в проектируемой аппаратуре. Архитектура и общие характеристики прибора, предназначение арифметики логического устройства и понятие флэш-памяти. Формат пакета данных, алгоритм их передачи и система команд.
контрольная работа [427,3 K], добавлен 12.11.2010Адресное пространство микроконтроллеров MSP430F1xx. Байтовая и словная формы инструкций. Система команд MSP микроконтроллеров. Периферийные устройства микроконтроллеров MSP430F1xx. Аналого-цифровой преобразователь ADC12, его технические характеристики.
курсовая работа [278,1 K], добавлен 04.05.2014Общая характеристика операций, выполняемых по командам базовой системы. Описание и мнемокоды команд, используемых при разработке программы на языке AVR Ассемблера. Основные принципы работы команд с обращением по адресу SRAM и к регистрам ввода–вывода.
реферат [148,4 K], добавлен 21.08.2010Микроконтроллер (MCU) — микросхема, предназначенная для управления электронными устройствами. Их можно встретить во многих современных приборах, в том числе и бытовых. Рассмотрение архитектуры различных микроконтроллеров, ядра, памяти, питания, периферии.
реферат [216,5 K], добавлен 24.12.2010Общая характеристика и применение микроконтроллеров FUJITSU MB-90 и MCS-196 фирмы Intel. Основные особенности микроконтроллеров серии MCS-96 и MB90385. Внутренняя архитектура процессоров. Система команд, работа с внутренними и внешними устройствами.
курсовая работа [768,0 K], добавлен 01.12.2010Классификация систем управления (СУ) машиностроительным оборудованием. Архитектура СУ на базе микропроцессорных комплектов фирм DEC и Motorola. Программное обеспечение СУ и программируемых контроллеров. Графический язык программирования Ladder Diagram.
курс лекций [374,5 K], добавлен 22.11.2013Рассмотрение структуры и принципов работы таймеров/счетчиков (общего назначения, сторожевого, типов А, В, С, D, Е) микроконтроллеров и аналого-цифрового преобразователя семейства AVR с целью разработки обучающего компьютерного электронного пособия.
курсовая работа [1,0 M], добавлен 06.03.2010